From 00f87235c62d503f9e6fed3764d476481c4c80d6 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 16 Mar 2023 00:43:36 +0000 Subject: [PATCH] fix stmt print ignore hint bug --- src/sql/engine/cmd/ob_table_executor.cpp | 1 + src/sql/resolver/ddl/ob_create_table_resolver.cpp | 4 ++++ src/sql/resolver/ddl/ob_create_view_resolver.cpp | 1 + 3 files changed, 6 insertions(+) diff --git a/src/sql/engine/cmd/ob_table_executor.cpp b/src/sql/engine/cmd/ob_table_executor.cpp index d3044a9d1d..58290bf6b5 100644 --- a/src/sql/engine/cmd/ob_table_executor.cpp +++ b/src/sql/engine/cmd/ob_table_executor.cpp @@ -112,6 +112,7 @@ int ObCreateTableExecutor::prepare_ins_arg(ObCreateTableStmt &stmt, obj_print_params, param_store, true); + select_stmt_printer.set_is_root(true); // print hint as root stmt if (OB_ISNULL(buf)) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("allocate memory failed"); diff --git a/src/sql/resolver/ddl/ob_create_table_resolver.cpp b/src/sql/resolver/ddl/ob_create_table_resolver.cpp index 5940ce83be..813eb4354b 100644 --- a/src/sql/resolver/ddl/ob_create_table_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_table_resolver.cpp @@ -1548,6 +1548,10 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode &p if (OB_ISNULL(select_stmt)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("invalid select stmt", K(select_stmt)); + } else if (OB_FAIL(params_.query_ctx_->query_hint_.init_query_hint(allocator_, + session_info_, + select_stmt))) { + LOG_WARN("failed to init query hint.", K(ret)); } else { ObIArray &select_items = select_stmt->get_select_items(); ObColumnSchemaV2 column; diff --git a/src/sql/resolver/ddl/ob_create_view_resolver.cpp b/src/sql/resolver/ddl/ob_create_view_resolver.cpp index 714677261a..b41637448c 100644 --- a/src/sql/resolver/ddl/ob_create_view_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_view_resolver.cpp @@ -531,6 +531,7 @@ int ObCreateViewResolver::stmt_print(const ObSelectStmt *stmt, params_.schema_checker_->get_schema_guard(), obj_print_params, true); stmt_printer.set_column_list(column_list); + stmt_printer.set_is_root(true); // print hint as root stmt if (OB_FAIL(stmt_printer.do_print())) { if (OB_SIZE_OVERFLOW == ret && buf_len < OB_MAX_PACKET_LENGTH) { buf_len = std::min(buf_len * 2, OB_MAX_PACKET_LENGTH);