0 ? $argv[2] : 10000)); } // Bulk insert releases into sphinx RT index. function populate_rt($table, $max) { $pdo = new DB(); switch ($table) { case 'releases_rt': $pdo->queryDirect('SET SESSION group_concat_max_len=8192'); $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' ); $rtvalues = '(id, name, searchname, fromname, filename)'; $totals = $pdo->queryOneRow('SELECT COUNT(id) AS c, MIN(id) AS min FROM releases'); if (! $totals) { exit("Could not get database information for releases table.\n"); } $total = $totals['c']; $minId = $totals['min']; break; default: exit(); } $sphinx = new SphinxSearch(); $string = sprintf('REPLACE INTO %s %s VALUES ', $table, $rtvalues); $lastId = $minId - 1; echo "[Starting to populate sphinx RT index $table with $total releases.]\n"; for ($i = $minId; $i <= ($total + $max + $minId); $i += $max) { $rows = $pdo->queryDirect(sprintf($query, $lastId, $max)); if (! $rows) { continue; } $tempString = ''; foreach ($rows as $row) { if ($row['id'] > $lastId) { $lastId = $row['id']; } switch ($table) { case 'releases_rt': $tempString .= sprintf( '(%d,%s,%s,%s,%s),', $row['id'], $sphinx->sphinxQL->escapeString($row['name']), $sphinx->sphinxQL->escapeString($row['searchname']), $sphinx->sphinxQL->escapeString($row['fromname']), $sphinx->sphinxQL->escapeString($row['filename']) ); break; } } if (! $tempString) { continue; } $sphinx->sphinxQL->queryExec($string.rtrim($tempString, ',')); echo '.'; } echo "\n[Done]\n"; }