private function insertActionsToKeep($maxIds, $olderThan = true) { $tempTableName = Common::prefixTable(self::TEMP_TABLE_NAME); $idColumns = $this->getTableIdColumns(); foreach ($this->getIdActionColumns() as $table => $columns) { $idCol = $idColumns[$table]; foreach ($columns as $col) { $select = "SELECT {$col} FROM " . Common::prefixTable($table) . " WHERE {$idCol} >= ? AND {$idCol} < ?"; $sql = "INSERT IGNORE INTO {$tempTableName} {$select}"; if ($olderThan) { $start = 0; $finish = $maxIds[$table]; } else { $start = $maxIds[$table]; $finish = Db::fetchOne("SELECT MAX({$idCol}) FROM " . Common::prefixTable($table)); } Db::segmentedQuery($sql, $start, $finish, self::$selectSegmentSize); } } // allow code to be executed after data is inserted. for concurrency testing purposes. if ($olderThan) { /** * @ignore */ Piwik::postEvent("LogDataPurger.ActionsToKeepInserted.olderThan"); } else { /** * @ignore */ Piwik::postEvent("LogDataPurger.ActionsToKeepInserted.newerThan"); } }
protected function insertActionsToKeep($maxIds, $olderThan = true, $insertIntoTempIterationStep = 100000) { $tempTableName = Common::prefixTable(self::DELETE_UNUSED_ACTIONS_TEMP_TABLE_NAME); $idColumns = $this->getTableIdColumns(); foreach ($this->dimensionMetadataProvider->getActionReferenceColumnsByTable() as $table => $columns) { $idCol = $idColumns[$table]; foreach ($columns as $col) { $select = "SELECT {$col} FROM " . Common::prefixTable($table) . " WHERE {$idCol} >= ? AND {$idCol} < ?"; $sql = "INSERT IGNORE INTO {$tempTableName} {$select}"; if ($olderThan) { $start = 0; $finish = $maxIds[$table]; } else { $start = $maxIds[$table]; $finish = Db::fetchOne("SELECT MAX({$idCol}) FROM " . Common::prefixTable($table)); } Db::segmentedQuery($sql, $start, $finish, $insertIntoTempIterationStep); } } }