<?php

/*
 * To run, type:
 * php -f google_th_4_profile.php
 *
 * Must be run at least 2 times for meaningful timing results (for caching the downloaded files).
 */

/*
 * Generate SQlite database with the first 50 million prime numbers.
 */

/*
 * Configuration options
 */

define('DATABASE_FILENAME''google_th_4.sqlite');
define('DATABASE_MAXLINES'12500);
define('ZIPPED_PRIMES_URL''http://www.utm.edu/~caldwell/primes/millions/primes%d.zip');
define('ZIPPED_PRIMES_MAX'1);

/*
 * Program implementation
 */

// Create database file
shell_exec('rm -f '.DATABASE_FILENAME.'*');

$db = new SQLiteDatabase(DATABASE_FILENAME0660$error);
if(!
$db)
    die(
"Could not create database file: {$error}");

if(!
$db->queryExec('CREATE TABLE t_primes(number INTEGER PRIMARY KEY);'$error))
    die(
$error);

/*if(!$db->queryExec('CREATE UNIQUE INDEX i_primes_number on t_primes(number ASC);', $error))
    die($error);*/

// Populate database
for($i 1$i <= ZIPPED_PRIMES_MAX$i++) {

    echo 
"Processing [primes{$i}.zip]... ";

    if(!
file_exists("primes{$i}.txt")) {
        if(
system("curl -o primes{$i}.zip -L ".str_replace('%d'"$i"ZIPPED_PRIMES_URL)) === false)
            die(
'Could not retrieve file!');
        if(
system("unzip primes{$i}.zip") === false)
            die(
'Could not decompress file!');
    }

    
$handle fopen("primes{$i}.txt"'r');
    if(!
$handle)
        die(
'Could not open file!');

    
fgets($handle);
    
fgets($handle);
    
$count 0;

    while(!
feof($handle)) {

        
$line_count 0;
        
$query '';

        while(!
feof($handle) && $line_count DATABASE_MAXLINES) {
            
$line fgets($handle);
            
$line_count++;

            foreach(
explode(' '$line) as $number) {
                if(
$number 1) {
                    
$count++;
                    
$found_any true;
                    
$query .= "INSERT INTO t_primes VALUES({$number});";
                }
            }
        }

        if(!
$db->queryExec("BEGIN; $query END;"$error))
            die(
$error);

        if(
$query) {
            echo 
"$count, ";
            unset(
$query);
        }
    }

    
fclose($handle);

    echo 
"completed ok.\n";
}

echo 
"\nSuccess!\n\n\n";

?>