From 0ef3eace6894a5a4cb35448e6d1f1ff17c6e47cd Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 5 Mar 2024 03:48:19 +0000 Subject: [PATCH] partition by (c1,c2) return compile error, current is 4016 --- src/sql/parser/ob_sql_parser.cpp | 1 + src/sql/parser/parse_node.h | 1 + src/sql/parser/sql_parser_mysql_mode.y | 18 ++++++++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/sql/parser/ob_sql_parser.cpp b/src/sql/parser/ob_sql_parser.cpp index 1fced349e4..f5671206de 100644 --- a/src/sql/parser/ob_sql_parser.cpp +++ b/src/sql/parser/ob_sql_parser.cpp @@ -73,6 +73,7 @@ int ObSQLParser::parse_and_gen_sqlid(void *malloc_pool, parse_result->is_dynamic_sql_ = false; parse_result->is_batched_multi_enabled_split_ = false; parse_result->may_bool_value_ = false; + parse_result->is_external_table_ = false; int64_t new_length = str_len + 1; char *buf = (char *)parse_malloc(new_length, parse_result->malloc_pool_); diff --git a/src/sql/parser/parse_node.h b/src/sql/parser/parse_node.h index 013fdf6e82..dd3d118337 100644 --- a/src/sql/parser/parse_node.h +++ b/src/sql/parser/parse_node.h @@ -317,6 +317,7 @@ typedef struct uint32_t is_for_remap_ : 1; uint32_t contain_sensitive_data_ : 1; uint32_t may_contain_sensitive_data_ : 1; + uint32_t is_external_table_ : 1; }; ParseNode *result_tree_; diff --git a/src/sql/parser/sql_parser_mysql_mode.y b/src/sql/parser/sql_parser_mysql_mode.y index aa0b729756..d4f48d3b2a 100644 --- a/src/sql/parser/sql_parser_mysql_mode.y +++ b/src/sql/parser/sql_parser_mysql_mode.y @@ -4624,6 +4624,7 @@ TEMPORARY | EXTERNAL { result->contain_sensitive_data_ = true; + result->is_external_table_ = true; malloc_terminal_node($$, result->malloc_pool_, T_EXTERNAL); } | /* EMPTY */ @@ -6953,12 +6954,17 @@ hash_partition_option external_table_partition_option: /* list partition without partition defines*/ PARTITION BY '(' column_name_list ')' { - ParseNode *column_names = NULL; - ParseNode *partition_defs = NULL; - merge_nodes(column_names, result, T_EXPR_LIST, $4); - malloc_terminal_node(partition_defs, result->malloc_pool_, T_PARTITION_LIST); - malloc_non_terminal_node($$, result->malloc_pool_, T_LIST_COLUMNS_PARTITION, 5, column_names, partition_defs, NULL, NULL, NULL); - dup_expr_string($$, result, @4.first_column, @4.last_column); + if (result->is_external_table_) { + ParseNode *column_names = NULL; + ParseNode *partition_defs = NULL; + merge_nodes(column_names, result, T_EXPR_LIST, $4); + malloc_terminal_node(partition_defs, result->malloc_pool_, T_PARTITION_LIST); + malloc_non_terminal_node($$, result->malloc_pool_, T_LIST_COLUMNS_PARTITION, 5, column_names, partition_defs, NULL, NULL, NULL); + dup_expr_string($$, result, @4.first_column, @4.last_column); + } else { + yyerror(NULL, result, "paritition by column is not allowed"); + YYERROR; + } } ;