Port DB import to PDO to use prepared statements for maximum performance
[busui.git] / updatedb.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
include ('include/common.inc.php');
//$conn = pg_connect("dbname=transitdata user=postgres password=snmc host=localhost") or die('connection failed');
// Unzip cbrfeed.zip, import all csv files to database
$unzip = false;
$zip = zip_open(dirname(__FILE__) . "/cbrfeed.zip");
$tmpdir = "/tmp/cbrfeed/";
mkdir($tmpdir);
if ($unzip) {
        if (is_resource($zip)) {
                while ($zip_entry = zip_read($zip)) {
                        $fp = fopen($tmpdir . zip_entry_name($zip_entry) , "w");
                        if (zip_entry_open($zip, $zip_entry, "r")) {
                                echo "Extracting " . zip_entry_name($zip_entry) . "\n";
                                $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                                fwrite($fp, "$buf");
                                zip_entry_close($zip_entry);
                                fclose($fp);
                        }
                }
                zip_close($zip);
        }
}
foreach (scandir($tmpdir) as $file) {
        if (!strpos($file, ".txt") === false) {
                $fieldseparator = ",";
                $lineseparator = "\n";
                $tablename = str_replace(".txt", "", $file);
                echo "Opening $tmpdir . $file \n";
                $line = 0;
                $handle = fopen($tmpdir . $file, "r");
                $stmt = null;
                $stmt_noarrival = $conn->prepare("insert into stop_times (trip_id,stop_id,stop_sequence) values(? ? ?);");
                while (($columns = fgetcsv($handle, 1000, ",")) !== FALSE) {
                        if ($line == 0) {
                                $query = "insert into $tablename values(";
                                $valueCount = 0;
                                foreach ($columns as $value) {
                                        $query.= ($valueCount >0 ? "," :"")." ? ";
                                        $valueCount++;
                                }
                                if ($tablename == "stops") {
                                        $query.= ", ST_GeographyFromText('SRID=4326;POINT(? ?)'));";
                                }
                                else {
                                        $query.= ");";
                                }
                                $stmt = $conn->prepare($query);
                        }
                        else {
                                $data = $columns;
                                if ($tablename == "stops") {
                                        $data[] = $data[2];
                                        $data[] = $data[0];
                                }
                                if ($tablename == "stop_times" && $data[1] == "") {
                                        $stmt_noarrival->execute(Array(
                                                $data[0],
                                                $data[3],
                                                $data[4]
                                        ));
                                }
                                else {
                                        $stmt->execute($data);
                                }
                        }
                        $line++;
                        if ($line % 10000 == 0) echo "$line records... \n";
                }
                fclose($handle);
                echo "Found a total of $line records in $file.\n";
        }
}
?>