From: eileen Date: Sat, 20 Jul 2019 02:43:07 +0000 (+1200) Subject: Move write to table to exportProcessor X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=b6149515442c91268189cbdb61871c047f35e8b3;p=civicrm-core.git Move write to table to exportProcessor --- diff --git a/CRM/Export/BAO/Export.php b/CRM/Export/BAO/Export.php index 58350c2431..b7f06d505b 100644 --- a/CRM/Export/BAO/Export.php +++ b/CRM/Export/BAO/Export.php @@ -208,7 +208,7 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c // In order to be able to write a unit test against this function we need to suppress // the csv writing. In future hopefully the csv writing & the main processing will be in separate functions. if (empty($exportParams['suppress_csv_for_testing'])) { - self::writeCSVFromTable($processor); + $processor->writeCSVFromTable(); } else { // return tableName sqlColumns headerRows in test context @@ -364,56 +364,6 @@ VALUES $sqlValueString CRM_Core_DAO::executeQuery($sql); } - /** - * @param \CRM_Export_BAO_ExportProcessor $processor - */ - public static function writeCSVFromTable($processor) { - // call export hook - $headerRows = $processor->getHeaderRows(); - $exportTempTable = $processor->getTemporaryTable(); - CRM_Utils_Hook::export($exportTempTable, $headerRows, $sqlColumns, $exportMode, $componentTable, $ids); - if ($exportTempTable !== $processor->getTemporaryTable()) { - CRM_Core_Error::deprecatedFunctionWarning('altering the export table in the hook is deprecated (in some flows the table itself will be)'); - $processor->setTemporaryTable($exportTempTable); - } - $exportTempTable = $processor->getTemporaryTable(); - $writeHeader = TRUE; - $offset = 0; - $limit = self::EXPORT_ROW_COUNT; - - $query = "SELECT * FROM $exportTempTable"; - - while (1) { - $limitQuery = $query . " -LIMIT $offset, $limit -"; - $dao = CRM_Core_DAO::executeQuery($limitQuery); - - if ($dao->N <= 0) { - break; - } - - $componentDetails = []; - while ($dao->fetch()) { - $row = []; - - foreach (array_keys($processor->getSQLColumns()) as $column) { - $row[$column] = $dao->$column; - } - $componentDetails[] = $row; - } - CRM_Core_Report_Excel::writeCSVFile($processor->getExportFileName(), - $headerRows, - $componentDetails, - NULL, - $writeHeader - ); - - $writeHeader = FALSE; - $offset += $limit; - } - } - /** * Get the ids that we want to get related contact details for. * diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index 5f5a77e653..0f6d1af745 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -2323,4 +2323,57 @@ WHERE id IN ( $deleteIDString ) } } + /** + * Write to the csv from the temp table. + */ + public function writeCSVFromTable() { + // call export hook + $headerRows = $this->getHeaderRows(); + $exportTempTable = $this->getTemporaryTable(); + CRM_Utils_Hook::export($exportTempTable, $headerRows, $sqlColumns, $exportMode, $componentTable, $ids); + if ($exportTempTable !== $this->getTemporaryTable()) { + CRM_Core_Error::deprecatedFunctionWarning('altering the export table in the hook is deprecated (in some flows the table itself will be)'); + $this->setTemporaryTable($exportTempTable); + } + $exportTempTable = $this->getTemporaryTable(); + $writeHeader = TRUE; + $offset = 0; + // increase this number a lot to avoid making too many queries + // LIMIT is not much faster than a no LIMIT query + // CRM-7675 + $limit = 100000; + + $query = "SELECT * FROM $exportTempTable"; + + while (1) { + $limitQuery = $query . " +LIMIT $offset, $limit +"; + $dao = CRM_Core_DAO::executeQuery($limitQuery); + + if ($dao->N <= 0) { + break; + } + + $componentDetails = []; + while ($dao->fetch()) { + $row = []; + + foreach (array_keys($this->getSQLColumns()) as $column) { + $row[$column] = $dao->$column; + } + $componentDetails[] = $row; + } + CRM_Core_Report_Excel::writeCSVFile($this->getExportFileName(), + $headerRows, + $componentDetails, + NULL, + $writeHeader + ); + + $writeHeader = FALSE; + $offset += $limit; + } + } + }