dev/core#183 Convert Logging report summary report to using CRM_Utils_SQL_TempTable
authorSeamus Lee <seamuslee001@gmail.com>
Mon, 11 Nov 2019 22:15:24 +0000 (09:15 +1100)
committerSeamus Lee <seamuslee001@gmail.com>
Tue, 12 Nov 2019 00:05:18 +0000 (11:05 +1100)
CRM/Logging/ReportSummary.php

index 03d48a3e91aabe11c3c9245419bbcca3956f9d53..2216aa46b8f701ac29fb396fff7a68edbf14702b 100644 (file)
@@ -354,9 +354,9 @@ WHERE  log_date <= %1 AND id = %2 ORDER BY log_date DESC LIMIT 1";
     }
 
     // temp table to hold all altered contact-ids
-    $sql = "CREATE TEMPORARY TABLE civicrm_temp_civireport_logsummary ( {$tempColumns} ) ENGINE=HEAP";
-    CRM_Core_DAO::executeQuery($sql);
-    $this->addToDeveloperTab($sql);
+    $this->temporaryTable = CRM_Utils_SQL_TempTable::build()->setCategory('logsummary')->setMemory()->createwithColumns($tempColumns);
+    $this->addToDeveloperTab($this->temporaryTable->getCreateSql());
+    $this->temporaryTableName = $this->temporaryTable->getName();
 
     $logTypes = CRM_Utils_Array::value('log_type_value', $this->_params);
     unset($this->_params['log_type_value']);
@@ -383,7 +383,7 @@ WHERE  log_date <= %1 AND id = %2 ORDER BY log_date DESC LIMIT 1";
         $this->currentLogTable = $entity;
         $sql = $this->buildQuery(FALSE);
         $sql = str_replace("entity_log_civireport.log_type as", "'{$entity}' as", $sql);
-        $sql = "INSERT IGNORE INTO civicrm_temp_civireport_logsummary {$sql}";
+        $sql = "INSERT IGNORE INTO {$this->temporaryTableName} {$sql}";
         CRM_Core_DAO::disableFullGroupByMode();
         CRM_Core_DAO::executeQuery($sql);
         CRM_Core_DAO::reenableFullGroupByMode();
@@ -395,7 +395,7 @@ WHERE  log_date <= %1 AND id = %2 ORDER BY log_date DESC LIMIT 1";
 
     // add computed log_type column so that we can do a group by after that, which will help
     // alterDisplay() counts sync with pager counts
-    $sql = "SELECT DISTINCT log_type FROM civicrm_temp_civireport_logsummary";
+    $sql = "SELECT DISTINCT log_type FROM {$this->temporaryTableName}";
     $dao = CRM_Core_DAO::executeQuery($sql);
     $this->addToDeveloperTab($sql);
     $replaceWith = [];
@@ -412,11 +412,11 @@ WHERE  log_date <= %1 AND id = %2 ORDER BY log_date DESC LIMIT 1";
       }
     }
 
-    $sql = "ALTER TABLE civicrm_temp_civireport_logsummary ADD COLUMN log_civicrm_entity_log_type_label varchar(64)";
+    $sql = "ALTER TABLE {$this->temporaryTableName} ADD COLUMN log_civicrm_entity_log_type_label varchar(64)";
     CRM_Core_DAO::executeQuery($sql);
     $this->addToDeveloperTab($sql);
     foreach ($replaceWith as $type => $in) {
-      $sql = "UPDATE civicrm_temp_civireport_logsummary SET log_civicrm_entity_log_type_label='{$type}', log_date=log_date WHERE log_type IN('$in')";
+      $sql = "UPDATE {$this->temporaryTableName} SET log_civicrm_entity_log_type_label='{$type}', log_date=log_date WHERE log_type IN('$in')";
       CRM_Core_DAO::executeQuery($sql);
       $this->addToDeveloperTab($sql);
     }
@@ -448,7 +448,7 @@ WHERE  log_date <= %1 AND id = %2 ORDER BY log_date DESC LIMIT 1";
     $this->limit();
     $this->orderBy();
     $sql = "{$this->_select}
-FROM civicrm_temp_civireport_logsummary entity_log_civireport
+FROM {$this->temporaryTableName} entity_log_civireport
 WHERE {$this->logTypeTableClause}
 GROUP BY log_civicrm_entity_log_date, log_civicrm_entity_log_type_label, log_civicrm_entity_log_conn_id, log_civicrm_entity_log_user_id, log_civicrm_entity_altered_contact_id, log_civicrm_entity_log_grouping
 {$this->_orderBy}
@@ -471,7 +471,7 @@ GROUP BY log_civicrm_entity_log_date, log_civicrm_entity_log_type_label, log_civ
   public function buildRows($sql, &$rows) {
     parent::buildRows($sql, $rows);
     // Clean up the temp table - mostly for the unit test.
-    CRM_Core_DAO::executeQuery('DROP TEMPORARY TABLE IF EXISTS civicrm_temp_civireport_logsummary');
+    $this->temporaryTable->drop();
   }
 
 }