From 31dc0c63d2ae8ccf609ccc2cd81fc96e88b3374f Mon Sep 17 00:00:00 2001 From: Nicolas Giraud Date: Mon, 26 Aug 2024 14:20:24 +0200 Subject: [PATCH 1/3] Add test case with the WITH PARSER expression, with errors in parsing. --- tests/Parser/CreateStatementTest.php | 1 + .../data/parser/parseCreateTableWithParser.in | 5 + .../parser/parseCreateTableWithParser.out | 760 ++++++++++++++++++ 3 files changed, 766 insertions(+) create mode 100644 tests/data/parser/parseCreateTableWithParser.in create mode 100644 tests/data/parser/parseCreateTableWithParser.out diff --git a/tests/Parser/CreateStatementTest.php b/tests/Parser/CreateStatementTest.php index 1cdd86f38..5c4ad0573 100644 --- a/tests/Parser/CreateStatementTest.php +++ b/tests/Parser/CreateStatementTest.php @@ -66,6 +66,7 @@ public static function createProvider(): array ['parser/parseCreateTableEnforcedCheck'], ['parser/parseCreateTableNotEnforcedCheck'], ['parser/parseCreateTableWithInvisibleKey'], + ['parser/parseCreateTableWithParser'], ['parser/parseCreateTrigger'], ['parser/parseCreateUser1'], ['parser/parseCreateUser2'], diff --git a/tests/data/parser/parseCreateTableWithParser.in b/tests/data/parser/parseCreateTableWithParser.in new file mode 100644 index 000000000..3613b4406 --- /dev/null +++ b/tests/data/parser/parseCreateTableWithParser.in @@ -0,0 +1,5 @@ +CREATE TABLE `mytable` ( + `column_one` smallint unsigned DEFAULT NULL, + FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */, + CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT +) diff --git a/tests/data/parser/parseCreateTableWithParser.out b/tests/data/parser/parseCreateTableWithParser.out new file mode 100644 index 000000000..c0d3b0354 --- /dev/null +++ b/tests/data/parser/parseCreateTableWithParser.out @@ -0,0 +1,760 @@ +{ + "query": "CREATE TABLE `mytable` (\n `column_one` smallint unsigned DEFAULT NULL,\n FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */,\n CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT\n)\n", + "lexer": { + "@type": "PhpMyAdmin\\SqlParser\\Lexer", + "str": "CREATE TABLE `mytable` (\n `column_one` smallint unsigned DEFAULT NULL,\n FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */,\n CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT\n)\n", + "len": 290, + "last": 290, + "list": { + "@type": "PhpMyAdmin\\SqlParser\\TokensList", + "tokens": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CREATE", + "value": "CREATE", + "keyword": "CREATE", + "type": 1, + "flags": 3, + "position": 0 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 6 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "TABLE", + "value": "TABLE", + "keyword": "TABLE", + "type": 1, + "flags": 3, + "position": 7 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 12 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`mytable`", + "value": "mytable", + "keyword": null, + "type": 8, + "flags": 2, + "position": 13 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 22 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 23 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 24 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`column_one`", + "value": "column_one", + "keyword": null, + "type": 8, + "flags": 2, + "position": 27 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 39 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "smallint", + "value": "SMALLINT", + "keyword": "SMALLINT", + "type": 1, + "flags": 11, + "position": 40 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 48 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "unsigned", + "value": "UNSIGNED", + "keyword": "UNSIGNED", + "type": 1, + "flags": 3, + "position": 49 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 57 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "DEFAULT", + "value": "DEFAULT", + "keyword": "DEFAULT", + "type": 1, + "flags": 35, + "position": 58 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 65 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "NULL", + "value": "NULL", + "keyword": "NULL", + "type": 1, + "flags": 3, + "position": 66 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 70 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 71 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "FULLTEXT KEY", + "value": "FULLTEXT KEY", + "keyword": "FULLTEXT KEY", + "type": 1, + "flags": 23, + "position": 74 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 86 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`fulltext_index`", + "value": "fulltext_index", + "keyword": null, + "type": 8, + "flags": 2, + "position": 87 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 103 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 104 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`column_one`", + "value": "column_one", + "keyword": null, + "type": 8, + "flags": 2, + "position": 105 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 117 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 118 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "/*!50100", + "value": "/*!50100", + "keyword": null, + "type": 4, + "flags": 10, + "position": 119 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 127 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "WITH", + "value": "WITH", + "keyword": "WITH", + "type": 1, + "flags": 3, + "position": 128 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 132 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "PARSER", + "value": "PARSER", + "keyword": "PARSER", + "type": 1, + "flags": 1, + "position": 133 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 139 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`ngram`", + "value": "ngram", + "keyword": null, + "type": 8, + "flags": 2, + "position": 140 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 147 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "*/", + "value": "*/", + "keyword": null, + "type": 4, + "flags": 2, + "position": 148 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ",", + "value": ",", + "keyword": null, + "type": 2, + "flags": 16, + "position": 150 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 151 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "CONSTRAINT", + "value": "CONSTRAINT", + "keyword": "CONSTRAINT", + "type": 1, + "flags": 3, + "position": 154 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 164 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`my_constraint_1`", + "value": "my_constraint_1", + "keyword": null, + "type": 8, + "flags": 2, + "position": 165 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 182 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "FOREIGN KEY", + "value": "FOREIGN KEY", + "keyword": "FOREIGN KEY", + "type": 1, + "flags": 23, + "position": 183 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 194 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 195 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`column_one`", + "value": "column_one", + "keyword": null, + "type": 8, + "flags": 2, + "position": 196 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 208 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 209 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "REFERENCES", + "value": "REFERENCES", + "keyword": "REFERENCES", + "type": 1, + "flags": 3, + "position": 210 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 220 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`other_table`", + "value": "other_table", + "keyword": null, + "type": 8, + "flags": 2, + "position": 221 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 234 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "(", + "value": "(", + "keyword": null, + "type": 2, + "flags": 16, + "position": 235 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "`column_two`", + "value": "column_two", + "keyword": null, + "type": 8, + "flags": 2, + "position": 236 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 248 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 249 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "ON DELETE", + "value": "ON DELETE", + "keyword": "ON DELETE", + "type": 1, + "flags": 7, + "position": 250 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 259 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "RESTRICT", + "value": "RESTRICT", + "keyword": "RESTRICT", + "type": 1, + "flags": 3, + "position": 260 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 268 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "ON UPDATE", + "value": "ON UPDATE", + "keyword": "ON UPDATE", + "type": 1, + "flags": 7, + "position": 269 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": " ", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 278 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "RESTRICT", + "value": "RESTRICT", + "keyword": "RESTRICT", + "type": 1, + "flags": 3, + "position": 279 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 287 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 288 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "\n", + "value": " ", + "keyword": null, + "type": 3, + "flags": 0, + "position": 289 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": null, + "value": null, + "keyword": null, + "type": 9, + "flags": 0, + "position": null + } + ], + "count": 67, + "idx": 68 + }, + "delimiter": ";", + "delimiterLen": 1, + "strict": false, + "errors": [] + }, + "parser": { + "@type": "PhpMyAdmin\\SqlParser\\Parser", + "list": { + "@type": "@1" + }, + "statements": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Statements\\CreateStatement", + "name": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": "mytable", + "column": null, + "expr": "`mytable`", + "alias": null, + "function": null, + "subquery": null + }, + "entityOptions": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": [] + }, + "fields": [ + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "column_one", + "isConstraint": null, + "type": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\DataType", + "name": "SMALLINT", + "parameters": [], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "4": "UNSIGNED" + } + } + }, + "key": null, + "references": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "2": { + "name": "DEFAULT", + "equals": false, + "expr": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": null, + "column": null, + "expr": "NULL", + "alias": null, + "function": null, + "subquery": null + }, + "value": "NULL" + } + } + } + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": null, + "isConstraint": null, + "type": null, + "key": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Key", + "name": "fulltext_index", + "columns": [ + { + "name": "column_one" + } + ], + "type": "FULLTEXT KEY", + "expr": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": [] + } + }, + "references": null, + "options": null + } + ], + "with": null, + "select": null, + "like": null, + "partitionBy": null, + "partitionsNum": null, + "subpartitionBy": null, + "subpartitionsNum": null, + "partitions": null, + "table": null, + "return": null, + "parameters": null, + "body": [], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "6": "TABLE" + } + }, + "first": 0, + "last": 44 + } + ], + "brackets": 0, + "strict": false, + "errors": [] + }, + "errors": { + "lexer": [], + "parser": [ + [ + "A comma or a closing bracket was expected.", + { + "@type": "@31" + }, + 0 + ], + [ + "Unexpected beginning of statement.", + { + "@type": "@47" + }, + 0 + ], + [ + "Unrecognized statement type.", + { + "@type": "@50" + }, + 0 + ] + ] + } +} \ No newline at end of file From f98d717293d345f9d5df9b3ccd362d241c9315f8 Mon Sep 17 00:00:00 2001 From: Nicolas Giraud Date: Mon, 26 Aug 2024 14:26:29 +0200 Subject: [PATCH 2/3] Add missing token "WITH PARSER" in contexts and regenerate involved test case, now without parsing errors. --- src/Contexts/ContextMySql50100.php | 1 + src/Contexts/ContextMySql50500.php | 1 + src/Contexts/ContextMySql50600.php | 1 + src/Contexts/ContextMySql50700.php | 1 + src/Contexts/ContextMySql80000.php | 1 + src/Contexts/ContextMySql80100.php | 1 + src/Contexts/ContextMySql80200.php | 1 + src/Contexts/ContextMySql80300.php | 1 + src/Contexts/ContextMySql80400.php | 1 + .../parser/parseCreateTableWithParser.out | 120 +++++++++++------- tools/contexts/MySql50100.txt | 1 + tools/contexts/MySql50500.txt | 1 + tools/contexts/MySql50600.txt | 1 + tools/contexts/MySql50700.txt | 1 + tools/contexts/MySql80000.txt | 1 + tools/contexts/MySql80100.txt | 1 + tools/contexts/MySql80200.txt | 1 + tools/contexts/MySql80300.txt | 1 + tools/contexts/MySql80400.txt | 1 + 19 files changed, 89 insertions(+), 49 deletions(-) diff --git a/src/Contexts/ContextMySql50100.php b/src/Contexts/ContextMySql50100.php index 31e6c1cd9..216192b21 100644 --- a/src/Contexts/ContextMySql50100.php +++ b/src/Contexts/ContextMySql50100.php @@ -543,6 +543,7 @@ class ContextMySql50100 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql50500.php b/src/Contexts/ContextMySql50500.php index 5911bb9fb..fb80b50b5 100644 --- a/src/Contexts/ContextMySql50500.php +++ b/src/Contexts/ContextMySql50500.php @@ -552,6 +552,7 @@ class ContextMySql50500 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql50600.php b/src/Contexts/ContextMySql50600.php index df1eb923f..86fefaf32 100644 --- a/src/Contexts/ContextMySql50600.php +++ b/src/Contexts/ContextMySql50600.php @@ -575,6 +575,7 @@ class ContextMySql50600 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql50700.php b/src/Contexts/ContextMySql50700.php index a1256dd74..8c740c676 100644 --- a/src/Contexts/ContextMySql50700.php +++ b/src/Contexts/ContextMySql50700.php @@ -599,6 +599,7 @@ class ContextMySql50700 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql80000.php b/src/Contexts/ContextMySql80000.php index baaa21945..b157f04cc 100644 --- a/src/Contexts/ContextMySql80000.php +++ b/src/Contexts/ContextMySql80000.php @@ -603,6 +603,7 @@ class ContextMySql80000 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql80100.php b/src/Contexts/ContextMySql80100.php index 217657972..1a5115485 100644 --- a/src/Contexts/ContextMySql80100.php +++ b/src/Contexts/ContextMySql80100.php @@ -603,6 +603,7 @@ class ContextMySql80100 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql80200.php b/src/Contexts/ContextMySql80200.php index 2c7eb6056..c658e0094 100644 --- a/src/Contexts/ContextMySql80200.php +++ b/src/Contexts/ContextMySql80200.php @@ -603,6 +603,7 @@ class ContextMySql80200 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql80300.php b/src/Contexts/ContextMySql80300.php index 9f9a131db..44012c01a 100644 --- a/src/Contexts/ContextMySql80300.php +++ b/src/Contexts/ContextMySql80300.php @@ -603,6 +603,7 @@ class ContextMySql80300 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/src/Contexts/ContextMySql80400.php b/src/Contexts/ContextMySql80400.php index d0448040c..e6166eab5 100644 --- a/src/Contexts/ContextMySql80400.php +++ b/src/Contexts/ContextMySql80400.php @@ -591,6 +591,7 @@ class ContextMySql80400 extends Context 'UNION ALL' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'UNION DISTINCT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH CONSISTENT SNAPSHOT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, + 'WITH PARSER' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'WITH ROLLUP' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED, 'ARRAY' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, 'BIT' => Token::FLAG_KEYWORD | Token::FLAG_KEYWORD_DATA_TYPE, diff --git a/tests/data/parser/parseCreateTableWithParser.out b/tests/data/parser/parseCreateTableWithParser.out index c0d3b0354..1510a4aa5 100644 --- a/tests/data/parser/parseCreateTableWithParser.out +++ b/tests/data/parser/parseCreateTableWithParser.out @@ -271,31 +271,13 @@ }, { "@type": "PhpMyAdmin\\SqlParser\\Token", - "token": "WITH", - "value": "WITH", - "keyword": "WITH", + "token": "WITH PARSER", + "value": "WITH PARSER", + "keyword": "WITH PARSER", "type": 1, - "flags": 3, + "flags": 7, "position": 128 }, - { - "@type": "PhpMyAdmin\\SqlParser\\Token", - "token": " ", - "value": " ", - "keyword": null, - "type": 3, - "flags": 0, - "position": 132 - }, - { - "@type": "PhpMyAdmin\\SqlParser\\Token", - "token": "PARSER", - "value": "PARSER", - "keyword": "PARSER", - "type": 1, - "flags": 1, - "position": 133 - }, { "@type": "PhpMyAdmin\\SqlParser\\Token", "token": " ", @@ -612,8 +594,8 @@ "position": null } ], - "count": 67, - "idx": 68 + "count": 65, + "idx": 65 }, "delimiter": ";", "delimiterLen": 1, @@ -698,11 +680,73 @@ "expr": null, "options": { "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", - "options": [] + "options": { + "3": { + "name": "WITH PARSER", + "equals": false, + "expr": "`ngram`", + "value": "ngram" + } + } } }, "references": null, "options": null + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Components\\CreateDefinition", + "name": "my_constraint_1", + "isConstraint": true, + "type": null, + "key": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Key", + "name": null, + "columns": [ + { + "name": "column_one" + } + ], + "type": "FOREIGN KEY", + "expr": null, + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": [] + } + }, + "references": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Reference", + "table": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\Expression", + "database": null, + "table": "other_table", + "column": null, + "expr": "`other_table`", + "alias": null, + "function": null, + "subquery": null + }, + "columns": [ + "column_two" + ], + "options": { + "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", + "options": { + "2": { + "name": "ON DELETE", + "equals": false, + "expr": "RESTRICT", + "value": "RESTRICT" + }, + "3": { + "name": "ON UPDATE", + "equals": false, + "expr": "RESTRICT", + "value": "RESTRICT" + } + } + } + }, + "options": null } ], "with": null, @@ -724,7 +768,7 @@ } }, "first": 0, - "last": 44 + "last": 64 } ], "brackets": 0, @@ -733,28 +777,6 @@ }, "errors": { "lexer": [], - "parser": [ - [ - "A comma or a closing bracket was expected.", - { - "@type": "@31" - }, - 0 - ], - [ - "Unexpected beginning of statement.", - { - "@type": "@47" - }, - 0 - ], - [ - "Unrecognized statement type.", - { - "@type": "@50" - }, - 0 - ] - ] + "parser": [] } } \ No newline at end of file diff --git a/tools/contexts/MySql50100.txt b/tools/contexts/MySql50100.txt index 10cfdb414..dd9829b53 100644 --- a/tools/contexts/MySql50100.txt +++ b/tools/contexts/MySql50100.txt @@ -548,6 +548,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WORK WRAPPER WRITE (R) diff --git a/tools/contexts/MySql50500.txt b/tools/contexts/MySql50500.txt index 90ea585eb..01ab86a54 100644 --- a/tools/contexts/MySql50500.txt +++ b/tools/contexts/MySql50500.txt @@ -557,6 +557,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WORK WRAPPER WRITE (R) diff --git a/tools/contexts/MySql50600.txt b/tools/contexts/MySql50600.txt index 6a4eb38a2..85dc73f37 100644 --- a/tools/contexts/MySql50600.txt +++ b/tools/contexts/MySql50600.txt @@ -584,6 +584,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WORK WRAPPER WRITE (R) diff --git a/tools/contexts/MySql50700.txt b/tools/contexts/MySql50700.txt index 9341b5bae..f96ff0e27 100644 --- a/tools/contexts/MySql50700.txt +++ b/tools/contexts/MySql50700.txt @@ -608,6 +608,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WITHOUT WORK WRAPPER diff --git a/tools/contexts/MySql80000.txt b/tools/contexts/MySql80000.txt index 59a79493b..6661cdf83 100644 --- a/tools/contexts/MySql80000.txt +++ b/tools/contexts/MySql80000.txt @@ -612,6 +612,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WITHOUT WORK WRAPPER diff --git a/tools/contexts/MySql80100.txt b/tools/contexts/MySql80100.txt index 59a79493b..6661cdf83 100644 --- a/tools/contexts/MySql80100.txt +++ b/tools/contexts/MySql80100.txt @@ -612,6 +612,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WITHOUT WORK WRAPPER diff --git a/tools/contexts/MySql80200.txt b/tools/contexts/MySql80200.txt index 59a79493b..6661cdf83 100644 --- a/tools/contexts/MySql80200.txt +++ b/tools/contexts/MySql80200.txt @@ -612,6 +612,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WITHOUT WORK WRAPPER diff --git a/tools/contexts/MySql80300.txt b/tools/contexts/MySql80300.txt index 59a79493b..6661cdf83 100644 --- a/tools/contexts/MySql80300.txt +++ b/tools/contexts/MySql80300.txt @@ -612,6 +612,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WITHOUT WORK WRAPPER diff --git a/tools/contexts/MySql80400.txt b/tools/contexts/MySql80400.txt index f670a7781..832a52da4 100644 --- a/tools/contexts/MySql80400.txt +++ b/tools/contexts/MySql80400.txt @@ -601,6 +601,7 @@ WHEN (R) WHERE (R) WHILE (R) WITH (R) +WITH PARSER WITHOUT WORK WRAPPER From d166fd12e676feb86bf3c0c3b90318cf41e63478 Mon Sep 17 00:00:00 2001 From: Nicolas Giraud Date: Mon, 26 Aug 2024 14:36:22 +0200 Subject: [PATCH 3/3] Make the test query from #563 valid. --- .../data/parser/parseCreateTableWithParser.in | 2 +- .../parser/parseCreateTableWithParser.out | 159 +++++++++--------- 2 files changed, 85 insertions(+), 76 deletions(-) diff --git a/tests/data/parser/parseCreateTableWithParser.in b/tests/data/parser/parseCreateTableWithParser.in index 3613b4406..90d27dd69 100644 --- a/tests/data/parser/parseCreateTableWithParser.in +++ b/tests/data/parser/parseCreateTableWithParser.in @@ -1,5 +1,5 @@ CREATE TABLE `mytable` ( - `column_one` smallint unsigned DEFAULT NULL, + `column_one` VARCHAR(255) DEFAULT NULL, FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */, CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT ) diff --git a/tests/data/parser/parseCreateTableWithParser.out b/tests/data/parser/parseCreateTableWithParser.out index 1510a4aa5..160c7734f 100644 --- a/tests/data/parser/parseCreateTableWithParser.out +++ b/tests/data/parser/parseCreateTableWithParser.out @@ -1,10 +1,10 @@ { - "query": "CREATE TABLE `mytable` (\n `column_one` smallint unsigned DEFAULT NULL,\n FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */,\n CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT\n)\n", + "query": "CREATE TABLE `mytable` (\n `column_one` VARCHAR(255) DEFAULT NULL,\n FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */,\n CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT\n)\n", "lexer": { "@type": "PhpMyAdmin\\SqlParser\\Lexer", - "str": "CREATE TABLE `mytable` (\n `column_one` smallint unsigned DEFAULT NULL,\n FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */,\n CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT\n)\n", - "len": 290, - "last": 290, + "str": "CREATE TABLE `mytable` (\n `column_one` VARCHAR(255) DEFAULT NULL,\n FULLTEXT KEY `fulltext_index` (`column_one`) /*!50100 WITH PARSER `ngram` */,\n CONSTRAINT `my_constraint_1` FOREIGN KEY (`column_one`) REFERENCES `other_table` (`column_two`) ON DELETE RESTRICT ON UPDATE RESTRICT\n)\n", + "len": 285, + "last": 285, "list": { "@type": "PhpMyAdmin\\SqlParser\\TokensList", "tokens": [ @@ -100,30 +100,39 @@ }, { "@type": "PhpMyAdmin\\SqlParser\\Token", - "token": "smallint", - "value": "SMALLINT", - "keyword": "SMALLINT", + "token": "VARCHAR", + "value": "VARCHAR", + "keyword": "VARCHAR", "type": 1, "flags": 11, "position": 40 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", - "token": " ", - "value": " ", + "token": "(", + "value": "(", "keyword": null, - "type": 3, + "type": 2, + "flags": 16, + "position": 47 + }, + { + "@type": "PhpMyAdmin\\SqlParser\\Token", + "token": "255", + "value": 255, + "keyword": null, + "type": 6, "flags": 0, "position": 48 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", - "token": "unsigned", - "value": "UNSIGNED", - "keyword": "UNSIGNED", - "type": 1, - "flags": 3, - "position": 49 + "token": ")", + "value": ")", + "keyword": null, + "type": 2, + "flags": 16, + "position": 51 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -132,7 +141,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 57 + "position": 52 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -141,7 +150,7 @@ "keyword": "DEFAULT", "type": 1, "flags": 35, - "position": 58 + "position": 53 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -150,7 +159,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 65 + "position": 60 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -159,7 +168,7 @@ "keyword": "NULL", "type": 1, "flags": 3, - "position": 66 + "position": 61 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -168,7 +177,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 70 + "position": 65 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -177,7 +186,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 71 + "position": 66 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -186,7 +195,7 @@ "keyword": "FULLTEXT KEY", "type": 1, "flags": 23, - "position": 74 + "position": 69 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -195,7 +204,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 86 + "position": 81 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -204,7 +213,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 87 + "position": 82 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -213,7 +222,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 103 + "position": 98 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -222,7 +231,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 104 + "position": 99 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -231,7 +240,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 105 + "position": 100 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -240,7 +249,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 117 + "position": 112 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -249,7 +258,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 118 + "position": 113 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -258,7 +267,7 @@ "keyword": null, "type": 4, "flags": 10, - "position": 119 + "position": 114 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -267,7 +276,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 127 + "position": 122 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -276,7 +285,7 @@ "keyword": "WITH PARSER", "type": 1, "flags": 7, - "position": 128 + "position": 123 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -285,7 +294,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 139 + "position": 134 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -294,7 +303,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 140 + "position": 135 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -303,7 +312,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 147 + "position": 142 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -312,7 +321,7 @@ "keyword": null, "type": 4, "flags": 2, - "position": 148 + "position": 143 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -321,7 +330,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 150 + "position": 145 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -330,7 +339,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 151 + "position": 146 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -339,7 +348,7 @@ "keyword": "CONSTRAINT", "type": 1, "flags": 3, - "position": 154 + "position": 149 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -348,7 +357,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 164 + "position": 159 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -357,7 +366,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 165 + "position": 160 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -366,7 +375,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 182 + "position": 177 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -375,7 +384,7 @@ "keyword": "FOREIGN KEY", "type": 1, "flags": 23, - "position": 183 + "position": 178 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -384,7 +393,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 194 + "position": 189 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -393,7 +402,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 195 + "position": 190 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -402,7 +411,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 196 + "position": 191 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -411,7 +420,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 208 + "position": 203 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -420,7 +429,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 209 + "position": 204 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -429,7 +438,7 @@ "keyword": "REFERENCES", "type": 1, "flags": 3, - "position": 210 + "position": 205 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -438,7 +447,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 220 + "position": 215 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -447,7 +456,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 221 + "position": 216 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -456,7 +465,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 234 + "position": 229 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -465,7 +474,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 235 + "position": 230 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -474,7 +483,7 @@ "keyword": null, "type": 8, "flags": 2, - "position": 236 + "position": 231 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -483,7 +492,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 248 + "position": 243 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -492,7 +501,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 249 + "position": 244 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -501,7 +510,7 @@ "keyword": "ON DELETE", "type": 1, "flags": 7, - "position": 250 + "position": 245 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -510,7 +519,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 259 + "position": 254 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -519,7 +528,7 @@ "keyword": "RESTRICT", "type": 1, "flags": 3, - "position": 260 + "position": 255 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -528,7 +537,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 268 + "position": 263 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -537,7 +546,7 @@ "keyword": "ON UPDATE", "type": 1, "flags": 7, - "position": 269 + "position": 264 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -546,7 +555,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 278 + "position": 273 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -555,7 +564,7 @@ "keyword": "RESTRICT", "type": 1, "flags": 3, - "position": 279 + "position": 274 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -564,7 +573,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 287 + "position": 282 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -573,7 +582,7 @@ "keyword": null, "type": 2, "flags": 16, - "position": 288 + "position": 283 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -582,7 +591,7 @@ "keyword": null, "type": 3, "flags": 0, - "position": 289 + "position": 284 }, { "@type": "PhpMyAdmin\\SqlParser\\Token", @@ -594,8 +603,8 @@ "position": null } ], - "count": 65, - "idx": 65 + "count": 66, + "idx": 66 }, "delimiter": ";", "delimiterLen": 1, @@ -631,13 +640,13 @@ "isConstraint": null, "type": { "@type": "PhpMyAdmin\\SqlParser\\Components\\DataType", - "name": "SMALLINT", - "parameters": [], + "name": "VARCHAR", + "parameters": [ + "255" + ], "options": { "@type": "PhpMyAdmin\\SqlParser\\Components\\OptionsArray", - "options": { - "4": "UNSIGNED" - } + "options": [] } }, "key": null, @@ -768,7 +777,7 @@ } }, "first": 0, - "last": 64 + "last": 65 } ], "brackets": 0,