|
1 | 1 | <?php |
2 | 2 |
|
3 | | -use mindplay\sql_parser\SQLSplitter; |
4 | | -use mindplay\sql_parser\SQLTokenizer; |
| 3 | +use Kodus\SQL\Splitter; |
| 4 | +use Kodus\SQL\Tokenizer; |
5 | 5 |
|
6 | 6 | require dirname(__DIR__) . '/vendor/autoload.php'; |
7 | 7 |
|
8 | 8 | test( |
9 | 9 | 'single statement', |
10 | 10 | function () { |
11 | | - eq(SQLTokenizer::tokenize("SELECT 1"), [["SELECT", " ", "1"]], "unterminated"); |
12 | | - eq(SQLTokenizer::tokenize("SELECT 1"), [["SELECT", " ", "1"]], "terminated"); |
| 11 | + eq(Tokenizer::tokenize("SELECT 1"), [["SELECT", " ", "1"]], "unterminated"); |
| 12 | + eq(Tokenizer::tokenize("SELECT 1"), [["SELECT", " ", "1"]], "terminated"); |
13 | 13 | } |
14 | 14 | ); |
15 | 15 |
|
16 | 16 | test( |
17 | 17 | 'multiple statements', |
18 | 18 | function () { |
19 | | - eq(SQLTokenizer::tokenize("SELECT 1; SELECT 2"), [["SELECT", " ", "1"], ["SELECT", " ", "2"]], "separated statements"); |
20 | | - eq(SQLTokenizer::tokenize("SELECT 1; SELECT 2;"), [["SELECT", " ", "1"], ["SELECT", " ", "2"]], "terminated statements"); |
| 19 | + eq(Tokenizer::tokenize("SELECT 1; SELECT 2"), [["SELECT", " ", "1"], ["SELECT", " ", "2"]], "separated statements"); |
| 20 | + eq(Tokenizer::tokenize("SELECT 1; SELECT 2;"), [["SELECT", " ", "1"], ["SELECT", " ", "2"]], "terminated statements"); |
21 | 21 | } |
22 | 22 | ); |
23 | 23 |
|
24 | 24 | test( |
25 | 25 | 'various tokens', |
26 | 26 | function () { |
27 | | - eq(SQLTokenizer::tokenize("SELECT * FROM bar"), [["SELECT", " ", "*", " ", "FROM", " ", "bar"]]); |
28 | | - eq(SQLTokenizer::tokenize("SELECT `foo` FROM `bar`"), [["SELECT", " ", "`foo`", " ", "FROM", " ", "`bar`"]]); |
29 | | - eq(SQLTokenizer::tokenize("SELECT 'some\"quotes'"), [["SELECT", " ", "'some\"quotes'"]]); |
30 | | - eq(SQLTokenizer::tokenize('SELECT "more quotes" AS `bar`'), [["SELECT", " ", '"more quotes"', " ", "AS", " ", "`bar`"]]); |
31 | | - eq(SQLTokenizer::tokenize("SELECT :foo, :bat AS bar"), [["SELECT", " ", ":foo", ",", " ", ":bat", " ", "AS", " ", "bar"]]); |
32 | | - eq(SQLTokenizer::tokenize("SELECT a*b+c-d FROM tbl"), [["SELECT", " ", "a", "*", "b", "+", "c", "-", "d", " ", "FROM", " ", "tbl"]]); |
33 | | - eq(SQLTokenizer::tokenize("UPDATE foo (a, b) SET (1, 2)"), [["UPDATE", " ", "foo", " ", ["(", "a", ",", " ", "b", ")"], " ", "SET", " ", ["(", "1", ",", " ", "2", ")"]]]); |
34 | | - eq(SQLTokenizer::tokenize("SELECT (({[1,2]}))"), [["SELECT", " ", ["(", ["(", ["{", ["[", "1", ",", "2", "]"], "}"], ")"], ")"]]], "nested brackets/braces"); |
35 | | - eq(SQLTokenizer::tokenize("SELECT ( [ 1 ] )"), [["SELECT", " ", ["(", " ", ["[", " ", "1", " ", "]"], " ", ")"]]], "nested brackets/braces"); |
36 | | - eq(SQLTokenizer::tokenize('CREATE FUNCTION foo AS $$RETURN $1$$;'), [["CREATE", " ", "FUNCTION", " ", "foo", " ", "AS", " ", '$$RETURN $1$$']], "stored procedure"); |
37 | | - eq(SQLTokenizer::tokenize('SELECT $$FOO$$; SELECT $$BAR$$'), [["SELECT", " ", '$$FOO$$'], ["SELECT", " ", '$$BAR$$']], "dollar-quoted strings"); |
38 | | - eq(SQLTokenizer::tokenize("SELECT 'foo\\'\\\\'"), [["SELECT", " ", "'foo\\'\\\\'"]]); |
| 27 | + eq(Tokenizer::tokenize("SELECT * FROM bar"), [["SELECT", " ", "*", " ", "FROM", " ", "bar"]]); |
| 28 | + eq(Tokenizer::tokenize("SELECT `foo` FROM `bar`"), [["SELECT", " ", "`foo`", " ", "FROM", " ", "`bar`"]]); |
| 29 | + eq(Tokenizer::tokenize("SELECT 'some\"quotes'"), [["SELECT", " ", "'some\"quotes'"]]); |
| 30 | + eq(Tokenizer::tokenize('SELECT "more quotes" AS `bar`'), [["SELECT", " ", '"more quotes"', " ", "AS", " ", "`bar`"]]); |
| 31 | + eq(Tokenizer::tokenize("SELECT :foo, :bat AS bar"), [["SELECT", " ", ":foo", ",", " ", ":bat", " ", "AS", " ", "bar"]]); |
| 32 | + eq(Tokenizer::tokenize("SELECT a*b+c-d FROM tbl"), [["SELECT", " ", "a", "*", "b", "+", "c", "-", "d", " ", "FROM", " ", "tbl"]]); |
| 33 | + eq(Tokenizer::tokenize("UPDATE foo (a, b) SET (1, 2)"), [["UPDATE", " ", "foo", " ", ["(", "a", ",", " ", "b", ")"], " ", "SET", " ", ["(", "1", ",", " ", "2", ")"]]]); |
| 34 | + eq(Tokenizer::tokenize("SELECT (({[1,2]}))"), [["SELECT", " ", ["(", ["(", ["{", ["[", "1", ",", "2", "]"], "}"], ")"], ")"]]], "nested brackets/braces"); |
| 35 | + eq(Tokenizer::tokenize("SELECT ( [ 1 ] )"), [["SELECT", " ", ["(", " ", ["[", " ", "1", " ", "]"], " ", ")"]]], "nested brackets/braces"); |
| 36 | + eq(Tokenizer::tokenize('CREATE FUNCTION foo AS $$RETURN $1$$;'), [["CREATE", " ", "FUNCTION", " ", "foo", " ", "AS", " ", '$$RETURN $1$$']], "stored procedure"); |
| 37 | + eq(Tokenizer::tokenize('SELECT $$FOO$$; SELECT $$BAR$$'), [["SELECT", " ", '$$FOO$$'], ["SELECT", " ", '$$BAR$$']], "dollar-quoted strings"); |
| 38 | + eq(Tokenizer::tokenize("SELECT 'foo\\'\\\\'"), [["SELECT", " ", "'foo\\'\\\\'"]]); |
39 | 39 | } |
40 | 40 | ); |
41 | 41 |
|
42 | 42 | test( |
43 | 43 | 'comments', |
44 | 44 | function () { |
45 | | - eq(SQLTokenizer::tokenize("-- one\nSELECT -- two\n1; -- three\n-- four"), [["-- one", "\n", "SELECT", " ", "-- two", "\n", "1"], ["-- three", "\n", "-- four"]]); |
46 | | - eq(SQLTokenizer::tokenize("/* one\ntwo */\nSELECT 1;/* three\nfour */\nSELECT 2;"), [["/* one\ntwo */", "\n", "SELECT", " ", "1"], ["/* three\nfour */", "\n", "SELECT", " ", "2"]]); |
| 45 | + eq(Tokenizer::tokenize("-- one\nSELECT -- two\n1; -- three\n-- four"), [["-- one", "\n", "SELECT", " ", "-- two", "\n", "1"], ["-- three", "\n", "-- four"]]); |
| 46 | + eq(Tokenizer::tokenize("/* one\ntwo */\nSELECT 1;/* three\nfour */\nSELECT 2;"), [["/* one\ntwo */", "\n", "SELECT", " ", "1"], ["/* three\nfour */", "\n", "SELECT", " ", "2"]]); |
47 | 47 | } |
48 | 48 | ); |
49 | 49 |
|
50 | 50 | test( |
51 | 51 | 'split statements', |
52 | 52 | function () { |
53 | | - eq(SQLSplitter::split("SELECT 1; SELECT 2;"), ["SELECT 1", "SELECT 2"]); |
54 | | - eq(SQLSplitter::split("-- one\nSELECT -- two\n1; -- three\n-- four"), ["SELECT \n1"]); |
55 | | - eq(SQLSplitter::split("-- one\nSELECT -- two\n1; -- three\n-- four", false), ["-- one\nSELECT -- two\n1", "-- three\n-- four"]); |
56 | | - eq(SQLSplitter::split("/* one\ntwo */\nSELECT 1;/* three\nfour */\nSELECT 2;"), ["SELECT 1", "SELECT 2"]); |
57 | | - eq(SQLSplitter::split("/* one\ntwo */\nSELECT 1;\n/* three\nfour */\nSELECT 2;", false), ["/* one\ntwo */\nSELECT 1", "/* three\nfour */\nSELECT 2"]); |
| 53 | + eq(Splitter::split("SELECT 1; SELECT 2;"), ["SELECT 1", "SELECT 2"]); |
| 54 | + eq(Splitter::split("-- one\nSELECT -- two\n1; -- three\n-- four"), ["SELECT \n1"]); |
| 55 | + eq(Splitter::split("-- one\nSELECT -- two\n1; -- three\n-- four", false), ["-- one\nSELECT -- two\n1", "-- three\n-- four"]); |
| 56 | + eq(Splitter::split("/* one\ntwo */\nSELECT 1;/* three\nfour */\nSELECT 2;"), ["SELECT 1", "SELECT 2"]); |
| 57 | + eq(Splitter::split("/* one\ntwo */\nSELECT 1;\n/* three\nfour */\nSELECT 2;", false), ["/* one\ntwo */\nSELECT 1", "/* three\nfour */\nSELECT 2"]); |
58 | 58 | } |
59 | 59 | ); |
60 | 60 |
|
@@ -212,7 +212,7 @@ function (string $sql) { |
212 | 212 |
|
213 | 213 | $sql = str_replace("-----", "\n", $sql_template); |
214 | 214 |
|
215 | | - foreach (SQLSplitter::split($sql, false) as $index => $statement) { |
| 215 | + foreach (Splitter::split($sql, false) as $index => $statement) { |
216 | 216 | eq($statement, $expected_statements[$index]); |
217 | 217 | } |
218 | 218 | }); |
@@ -247,7 +247,7 @@ function (string $sql) { |
247 | 247 | SQL; |
248 | 248 |
|
249 | 249 | test("mysql use-case", function () use ($mysql_script, $mysql_statements) { |
250 | | - eq(SQLSplitter::split($mysql_script), array_map("trim", explode("-----", $mysql_statements))); |
| 250 | + eq(Splitter::split($mysql_script), array_map("trim", explode("-----", $mysql_statements))); |
251 | 251 | }); |
252 | 252 |
|
253 | 253 | exit(run()); |
0 commit comments