From 1290fbd7ce4f102fee629e66db0b959361bd740f Mon Sep 17 00:00:00 2001 From: seuwebber Date: Wed, 1 Nov 2023 03:09:15 +0000 Subject: [PATCH] [to #52212883]fix bug dbms sql in trigger --- src/sql/ob_spi.cpp | 6 +++++- src/sql/ob_sql.cpp | 3 ++- src/sql/parser/ob_parser.cpp | 5 +++-- src/sql/parser/ob_parser.h | 3 ++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/sql/ob_spi.cpp b/src/sql/ob_spi.cpp index 76192e1e59..7f66e22b7d 100644 --- a/src/sql/ob_spi.cpp +++ b/src/sql/ob_spi.cpp @@ -2261,7 +2261,11 @@ int ObSPIService::spi_resolve_prepare(common::ObIAllocator &allocator, ret = OB_INVALID_ARGUMENT; LOG_WARN("Argument passed in is NULL", K(sql), K(ret)); } else { - PLPrepareCtx pl_prepare_ctx(session, secondary_namespace, false, false, is_cursor); + bool is_dbms_sql = false; + if (NULL != session.get_cur_exec_ctx() && NULL != session.get_cur_exec_ctx()->get_sql_ctx()) { + is_dbms_sql =session.get_cur_exec_ctx()->get_sql_ctx()->is_dbms_sql_; + } + PLPrepareCtx pl_prepare_ctx(session, secondary_namespace, false, is_dbms_sql, is_cursor); const int64_t start = ::oceanbase::common::ObTimeUtility::current_time(); SMART_VAR(PLPrepareResult, pl_prepare_result) { diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 33ad282579..5513934f7b 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -1310,7 +1310,8 @@ int ObSql::handle_pl_prepare(const ObString &sql, LOG_WARN("failed to write string", K(ret)); } else if (OB_FAIL(sess.store_query_string(sql))) { LOG_WARN("store query string fail", K(ret)); - } else if (OB_FAIL(parser.parse(sql, parse_result, parse_mode, false, false, true))) { + } else if (OB_FAIL(parser.parse(sql, parse_result, parse_mode, + false, false, true, pl_prepare_ctx.is_dbms_sql_))) { LOG_WARN("generate syntax tree failed", K(ret), "sql", parse_result.contain_sensitive_data_ ? ObString(OB_MASKED_STR) : sql); } else if (is_mysql_mode() && ObSQLUtils::is_mysql_ps_not_support_stmt(parse_result)) { diff --git a/src/sql/parser/ob_parser.cpp b/src/sql/parser/ob_parser.cpp index 288ac99332..aaba7aa4eb 100644 --- a/src/sql/parser/ob_parser.cpp +++ b/src/sql/parser/ob_parser.cpp @@ -1000,7 +1000,8 @@ int ObParser::parse(const ObString &query, ParseMode parse_mode, const bool is_batched_multi_stmt_split_on, const bool no_throw_parser_error, - const bool is_pl_inner_parse) + const bool is_pl_inner_parse, + const bool is_dbms_sql) { int ret = OB_SUCCESS; @@ -1033,7 +1034,7 @@ int ObParser::parse(const ObString &query, || FP_NO_PARAMERIZE_AND_FILTER_HINT_MODE == parse_mode); parse_result.is_for_trigger_ = (TRIGGER_MODE == parse_mode); parse_result.is_dynamic_sql_ = (DYNAMIC_SQL_MODE == parse_mode); - parse_result.is_dbms_sql_ = (DBMS_SQL_MODE == parse_mode); + parse_result.is_dbms_sql_ = (DBMS_SQL_MODE == parse_mode) || is_dbms_sql; parse_result.is_for_udr_ = (UDR_SQL_MODE == parse_mode); parse_result.is_batched_multi_enabled_split_ = is_batched_multi_stmt_split_on; parse_result.is_not_utf8_connection_ = ObCharset::is_valid_collation(charsets4parser_.string_collation_) ? diff --git a/src/sql/parser/ob_parser.h b/src/sql/parser/ob_parser.h index 9bdb3fa994..6444e08e85 100644 --- a/src/sql/parser/ob_parser.h +++ b/src/sql/parser/ob_parser.h @@ -88,7 +88,8 @@ public: ParseMode mode=STD_MODE, const bool is_batched_multi_stmt_split_on = false, const bool no_throw_parser_error = false, - const bool is_pl_inner_parse = false); + const bool is_pl_inner_parse = false, + const bool is_dbms_sql = false); virtual void free_result(ParseResult &parse_result); /**