diff --git a/src/objit/include/objit/common/ob_item_type.h b/src/objit/include/objit/common/ob_item_type.h index 9199542e13..c23faba934 100755 --- a/src/objit/include/objit/common/ob_item_type.h +++ b/src/objit/include/objit/common/ob_item_type.h @@ -2543,6 +2543,8 @@ typedef enum ObItemType // select into outfile T_BUFFER_SIZE, T_PARTITION_EXPR, + T_CACHE_INDEX, + T_LOAD_INDEX_INTO_CACHE, T_MAX //Attention: add a new type before T_MAX } ObItemType; diff --git a/src/sql/executor/ob_cmd_executor.cpp b/src/sql/executor/ob_cmd_executor.cpp index c315c6dfb6..b2423e238d 100644 --- a/src/sql/executor/ob_cmd_executor.cpp +++ b/src/sql/executor/ob_cmd_executor.cpp @@ -572,6 +572,8 @@ int ObCmdExecutor::execute(ObExecContext &ctx, ObICmd &cmd) } case stmt::T_REPAIR_TABLE: case stmt::T_CHECKSUM_TABLE: + case stmt::T_CACHE_INDEX: + case stmt::T_LOAD_INDEX_INTO_CACHE: case stmt::T_FLUSH_PRIVILEGES: { DEFINE_EXECUTE_CMD(ObMockStmt, ObMockExecutor); break; diff --git a/src/sql/parser/sql_parser_mysql_mode.y b/src/sql/parser/sql_parser_mysql_mode.y index 969d4f2de2..2ef9d16009 100644 --- a/src/sql/parser/sql_parser_mysql_mode.y +++ b/src/sql/parser/sql_parser_mysql_mode.y @@ -554,6 +554,7 @@ END_P SET_VAR DELIMITER %type ttl_definition ttl_expr ttl_unit %type id_dot_id id_dot_id_dot_id %type opt_table_list opt_repair_mode opt_repair_option_list repair_option repair_option_list opt_checksum_option +%type cache_index_stmt load_index_into_cache_stmt tbl_index_list tbl_index tbl_partition_list opt_tbl_partition_list tbl_index_or_partition_list tbl_index_or_partition opt_ignore_leaves key_cache_name %start sql_stmt %% //////////////////////////////////////////////////////////////// @@ -18665,6 +18666,111 @@ CHECKSUM TABLE opt_table_list opt_checksum_option (void)$4; malloc_terminal_node($$, result->malloc_pool_, T_CHECKSUM_TABLE); } +| cache_index_stmt +{ + $$ = $1; + malloc_terminal_node($$, result->malloc_pool_, T_CACHE_INDEX); +} +| load_index_into_cache_stmt +{ + $$ = $1; + malloc_terminal_node($$, result->malloc_pool_, T_LOAD_INDEX_INTO_CACHE); +} +; + +load_index_into_cache_stmt: +LOAD INDEX INTO CACHE tbl_index_or_partition_list opt_ignore_leaves +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $5, $6); +} +; + +cache_index_stmt: +CACHE INDEX tbl_index_list IN key_cache_name +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $3, $5); +} +| CACHE INDEX normal_relation_factor PARTITION '(' tbl_partition_list ')' IN key_cache_name +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 3, $3, $6, $9); +} +; + +key_cache_name: +normal_relation_factor +{ + $$ = $1; +}; + +tbl_index_list: +tbl_index +{ + $$ = $1; +} +| tbl_index_list ',' tbl_index +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $1, $3); +} +; + +tbl_index: +normal_relation_factor opt_key_or_index opt_index_name +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 3, $1, $2, $3); +} +; + +tbl_partition_list: +ALL +{ + malloc_terminal_node($$, result->malloc_pool_, T_INT); + $$->value_ = 1; +} +| name_list +{ + $$ = $1; +} +; + +opt_tbl_partition_list: +PARTITION '(' tbl_partition_list ')' +{ + $$ = $3; +} +| /*empty*/ +{ $$ = NULL; } +; + +tbl_index_or_partition_list: +tbl_index_or_partition +{ + $$ = $1; +} +| tbl_index_or_partition_list ',' tbl_index_or_partition +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $1, $3); +} +; + +opt_ignore_leaves: +IGNORE LEAVES +{ + malloc_terminal_node($$, result->malloc_pool_, T_INT); + $$->value_ = 1; +} +| /*empty*/ +{ $$ = NULL; } +; + +tbl_index_or_partition: +normal_relation_factor opt_key_or_index '(' name_list ')' +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 3, $1, $2, $4); +} +| normal_relation_factor opt_tbl_partition_list +{ + malloc_non_terminal_node($$, result->malloc_pool_, T_LINK_NODE, 2, $1, $2); +} ; opt_sql_throttle_for_priority: diff --git a/src/sql/resolver/cmd/ob_mock_resolver.cpp b/src/sql/resolver/cmd/ob_mock_resolver.cpp index 30c66e3693..86c0dee58e 100644 --- a/src/sql/resolver/cmd/ob_mock_resolver.cpp +++ b/src/sql/resolver/cmd/ob_mock_resolver.cpp @@ -37,6 +37,12 @@ int ObMockResolver::resolve(const ParseNode& parse_tree) case T_CHECKSUM_TABLE: mock_stmt->set_stmt_type(stmt::T_CHECKSUM_TABLE); break; + case T_CACHE_INDEX: + mock_stmt->set_stmt_type(stmt::T_CACHE_INDEX); + break; + case T_LOAD_INDEX_INTO_CACHE: + mock_stmt->set_stmt_type(stmt::T_LOAD_INDEX_INTO_CACHE); + break; default: ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected parse tree type", K(ret), K(parse_tree.type_)); diff --git a/src/sql/resolver/ob_resolver.cpp b/src/sql/resolver/ob_resolver.cpp index ad9e96d2fc..1cad9426b8 100644 --- a/src/sql/resolver/ob_resolver.cpp +++ b/src/sql/resolver/ob_resolver.cpp @@ -1221,6 +1221,14 @@ int ObResolver::resolve(IsPrepared if_prepared, const ParseNode &parse_tree, ObS REGISTER_STMT_RESOLVER(Mock); break; } + case T_CACHE_INDEX: { + REGISTER_STMT_RESOLVER(Mock); + break; + } + case T_LOAD_INDEX_INTO_CACHE: { + REGISTER_STMT_RESOLVER(Mock); + break; + } default: { ret = OB_NOT_SUPPORTED; const char *type_name = get_type_name(parse_tree.type_); diff --git a/src/sql/resolver/ob_resolver_utils.cpp b/src/sql/resolver/ob_resolver_utils.cpp index bf5ab777bb..03085e54b3 100644 --- a/src/sql/resolver/ob_resolver_utils.cpp +++ b/src/sql/resolver/ob_resolver_utils.cpp @@ -2332,6 +2332,8 @@ stmt::StmtType ObResolverUtils::get_stmt_type_by_item_type(const ObItemType item SET_STMT_TYPE(T_SHOW_OPEN_TABLES); SET_STMT_TYPE(T_REPAIR_TABLE); SET_STMT_TYPE(T_CHECKSUM_TABLE); + SET_STMT_TYPE(T_CACHE_INDEX); + SET_STMT_TYPE(T_LOAD_INDEX_INTO_CACHE); #undef SET_STMT_TYPE case T_ROLLBACK: case T_COMMIT: { diff --git a/src/sql/resolver/ob_stmt_type.h b/src/sql/resolver/ob_stmt_type.h index 1607adcb69..f9ddaaeaa9 100644 --- a/src/sql/resolver/ob_stmt_type.h +++ b/src/sql/resolver/ob_stmt_type.h @@ -355,6 +355,8 @@ OB_STMT_TYPE_DEF_UNKNOWN_AT(T_HBASE_CHECK_AND_PUT, err_stmt_type_priv, 354) OB_STMT_TYPE_DEF_UNKNOWN_AT(T_HBASE_CHECK_AND_DELETE, err_stmt_type_priv, 355) OB_STMT_TYPE_DEF_UNKNOWN_AT(T_HBASE_HYBRID_BATCH, err_stmt_type_priv, 356) OB_STMT_TYPE_DEF_UNKNOWN_AT(T_HBASE_OTHER, err_stmt_type_priv, 357) +OB_STMT_TYPE_DEF_UNKNOWN_AT(T_CACHE_INDEX, no_priv_needed, 358) +OB_STMT_TYPE_DEF_UNKNOWN_AT(T_LOAD_INDEX_INTO_CACHE, no_priv_needed, 359) OB_STMT_TYPE_DEF_UNKNOWN_AT(T_MAX, err_stmt_type_priv, 500) #endif