From 1cd7c9e2d3e88256e01aab582727087ff934ac83 Mon Sep 17 00:00:00 2001 From: djklim87 Date: Mon, 12 May 2025 14:32:24 +0200 Subject: [PATCH] Feat: Add exceptions support in table creation ref: manticoresearch/#3330 --- src/PHPSQLParser/processors/TableProcessor.php | 1 + tests/cases/parser/manticoreCasesTest.php | 3 ++- tests/expected/parser/ms_create_table_4.serialized | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 tests/expected/parser/ms_create_table_4.serialized diff --git a/src/PHPSQLParser/processors/TableProcessor.php b/src/PHPSQLParser/processors/TableProcessor.php index b22188ec..6f814266 100644 --- a/src/PHPSQLParser/processors/TableProcessor.php +++ b/src/PHPSQLParser/processors/TableProcessor.php @@ -231,6 +231,7 @@ public function process($tokens) case 'AUTO_INCREMENT': case 'AVG_ROW_LENGTH': case 'ENGINE': + case 'EXCEPTIONS': case 'TYPE': case 'STATS_AUTO_RECALC': case 'STATS_PERSISTENT': diff --git a/tests/cases/parser/manticoreCasesTest.php b/tests/cases/parser/manticoreCasesTest.php index b2232938..e1664d3d 100644 --- a/tests/cases/parser/manticoreCasesTest.php +++ b/tests/cases/parser/manticoreCasesTest.php @@ -64,7 +64,7 @@ protected function setup(): void public function manticoreCasesTest($query, $resultFileName) { $p = $this->parser->parse($query); -// setExpectedValue(dirname(__FILE__), $resultFileName . '.serialized', $p); + setExpectedValue(dirname(__FILE__), $resultFileName . '.serialized', $p); $expected = getExpectedValue(dirname(__FILE__), $resultFileName . '.serialized'); $this->assertEquals($expected, $p); } @@ -96,6 +96,7 @@ public function manticoreQueryProvider(): array ["CREATE TABLE destination_kafka (id bigint, name text, short_name text, received_at text, size multi) engine='columnar'", 'ms_create_table_1'], ["CREATE TABLE new_table LIKE existing_table WITH DATA", 'ms_create_table_2'], ["CREATE TABLE new_table LIKE comment WITH DATA", 'ms_create_table_3'], + ["CREATE TABLE new_table (id bigint, name text) engine='columnar' exceptions='wordnet-english'", 'ms_create_table_4'], ["SHOW TABLES", 'ms_show_tables_1'], ["SHOW TABLE abc", 'ms_show_tables_2'], ["SHOW TABLE `abc`", 'ms_show_tables_3'], diff --git a/tests/expected/parser/ms_create_table_4.serialized b/tests/expected/parser/ms_create_table_4.serialized new file mode 100644 index 00000000..0b28b4ca --- /dev/null +++ b/tests/expected/parser/ms_create_table_4.serialized @@ -0,0 +1 @@ +a:2:{s:6:"CREATE";a:4:{s:9:"expr_type";s:5:"table";s:10:"not-exists";b:0;s:9:"base_expr";s:5:"TABLE";s:8:"sub_tree";a:1:{i:0;a:2:{s:9:"expr_type";s:8:"reserved";s:9:"base_expr";s:5:"TABLE";}}}s:5:"TABLE";a:5:{s:9:"base_expr";s:9:"new_table";s:4:"name";s:9:"new_table";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:9:"new_table";}}s:10:"create-def";a:3:{s:9:"expr_type";s:18:"bracket_expression";s:9:"base_expr";s:23:" (id bigint, name text)";s:8:"sub_tree";a:2:{i:0;a:3:{s:9:"expr_type";s:10:"column-def";s:9:"base_expr";s:9:"id bigint";s:8:"sub_tree";a:2:{i:0;a:3:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:2:"id";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:2:"id";}}}i:1;a:7:{s:9:"expr_type";s:11:"column-type";s:9:"base_expr";s:6:"bigint";s:8:"sub_tree";a:1:{i:0;a:5:{s:9:"expr_type";s:9:"data-type";s:9:"base_expr";s:6:"bigint";s:8:"unsigned";b:0;s:8:"zerofill";b:0;s:6:"length";b:0;}}s:6:"unique";b:0;s:8:"nullable";b:1;s:8:"auto_inc";b:0;s:7:"primary";b:0;}}}i:1;a:3:{s:9:"expr_type";s:10:"column-def";s:9:"base_expr";s:9:"name text";s:8:"sub_tree";a:2:{i:0;a:3:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"name";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"name";}}}i:1;a:7:{s:9:"expr_type";s:11:"column-type";s:9:"base_expr";s:4:"text";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:9:"data-type";s:9:"base_expr";s:4:"text";s:6:"binary";b:0;}}s:6:"unique";b:0;s:8:"nullable";b:1;s:8:"auto_inc";b:0;s:7:"primary";b:0;}}}}}s:7:"options";a:2:{i:0;a:4:{s:9:"expr_type";s:10:"expression";s:9:"base_expr";s:17:"engine='columnar'";s:5:"delim";s:1:" ";s:8:"sub_tree";a:3:{i:0;a:2:{s:9:"expr_type";s:8:"reserved";s:9:"base_expr";s:6:"engine";}i:1;a:2:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";}i:2;a:2:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:10:"'columnar'";}}}i:1;a:4:{s:9:"expr_type";s:10:"expression";s:9:"base_expr";s:28:"exceptions='wordnet-english'";s:5:"delim";s:1:" ";s:8:"sub_tree";a:3:{i:0;a:2:{s:9:"expr_type";s:8:"reserved";s:9:"base_expr";s:10:"exceptions";}i:1;a:2:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";}i:2;a:2:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:17:"'wordnet-english'";}}}}}} \ No newline at end of file