Пример #1
0
 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");
     }
 }
Пример #2
0
 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);
         }
     }
 }