0 ? $argv[2] : 10000)); // Bulk insert releases into sphinx RT index. function populate_rt($table, $max) { if ($table === 'releases_rt') { DB::statement('SET SESSION group_concat_max_len=16384;'); $query = 'SELECT r.id, r.name, r.searchname, r.fromname, IFNULL(GROUP_CONCAT(rf.name SEPARATOR " "),"") filename FROM releases r LEFT JOIN release_files rf ON r.id = rf.releases_id WHERE r.id > %d GROUP BY r.id ORDER BY r.id ASC LIMIT %d'; $totals = Release::fromQuery('SELECT COUNT(id) AS c, MIN(id) AS min FROM releases')->first(); if (! $totals) { exit("Could not get database information for releases table.\n"); } $total = $totals->c; $minId = $totals->min; } if ($table === 'predb_rt') { DB::statement('SET SESSION group_concat_max_len=16384;'); $query = 'SELECT id, title, filename FROM predb WHERE id > %d GROUP BY id ORDER BY id ASC LIMIT %d'; $totals = Predb::fromQuery('SELECT COUNT(id) AS c, MIN(id) AS min FROM predb')->first(); if (! $totals) { exit("Could not get database information for predb table.\n"); } $total = $totals->c; $minId = $totals->min; } $sphinx = new SphinxSearch(); $lastId = $minId - 1; echo "[Starting to populate sphinx RT index $table with $total releases.]".PHP_EOL; for ($i = $minId; $i <= ($total + $max + $minId); $i += $max) { $rows = DB::select(sprintf($query, $lastId, $max)); if ($rows === 0) { continue; } foreach ($rows as $row) { if ($row->id > $lastId) { $lastId = $row->id; } switch ($table) { case 'releases_rt': $sphinx->insertRelease( [ 'id' => $row->id, 'name' => $row->name, 'searchname' => $row->searchname, 'fromname' => $row->fromname, 'filename' => $row->filename, ] ); break; case 'predb_rt': $sphinx->insertPredb( [ 'id' => $row->id, 'title' => $row->title, 'filename' => $row->filename, ] ); break; } } echo '.'; } echo "\n[Done]\n"; }