· 9 years ago · Nov 25, 2016, 08:32 AM
1#!/usr/bin/php
2<?php
3
4if (empty($argv['1']) && empty($argv['2']) ) {
5 echo "use: <dump file sqlite3> <dump file mysql>\n";
6 exit(0);
7}
8
9$sqlite3_dump = file_get_contents($argv['1']);
10$mysql_dump = $argv['2'];
11$data_out='';
12
13$fix_datetime = array('9','10','11');
14$fix_int = array('12','13','15','21','23','24','26','27','29');
15$fix_real = array('30','31');
16
17$patterns = array("/PRAGMA.*|BEGIN TRANSACTION.*|COMMIT;|.*sqlite_sequence.*;/", "/\"/", "/'t'/", "/'f'/", "/CREATE TABLE (`\w+`)/", "/(int.*default) ('')/", "/(TEXT NOT NULL)(.*)/");
18$replacements = array("", "`", "1", "0", "DROP TABLE IF EXISTS $1;\nCREATE TABLE $1", "$1 '0'", "$1,");
19
20$sqlite3_dump = preg_replace ($patterns, $replacements, $sqlite3_dump);
21$sqlite3_array = explode("\n", $sqlite3_dump);
22
23foreach ($sqlite3_array as $line) {
24 if (preg_match('/INSERT INTO/',$line)) {
25 $line_array = explode(",", $line);
26 foreach ($line_array as $key => $value) {
27
28 if (in_array($key, $fix_datetime) && preg_match('/\'\'/',$value)) {
29 $line_array[$key] = "NULL";
30 }
31 if (in_array($key, $fix_int) && preg_match('/\'\'/',$value)) {
32 $line_array[$key] = "0";
33 }
34 if (in_array($key, $fix_real) && preg_match('/\'\'/',$value)) {
35 $line_array[$key] = "-1.0";
36 }
37
38 }
39 $line = implode(",", $line_array);
40 }
41 $data_out .= $line."\n";
42}
43
44file_put_contents($mysql_dump, $data_out);