diff --git a/deps/oblib/src/common/object/ob_object.h b/deps/oblib/src/common/object/ob_object.h index 85a1ce1de0..dbc40eff9f 100644 --- a/deps/oblib/src/common/object/ob_object.h +++ b/deps/oblib/src/common/object/ob_object.h @@ -2038,21 +2038,25 @@ inline ObObj::ObObj() inline ObObj::ObObj(bool val) { set_bool(val); + val_len_ = 0; } inline ObObj::ObObj(int32_t val) { set_int32(val); + val_len_ = 0; } inline ObObj::ObObj(int64_t val) { set_int(val); + val_len_ = 0; } inline ObObj::ObObj(ObObjType type) { meta_.set_type(type); + val_len_ = 0; } inline ObObj::ObObj(const ObObj &other) diff --git a/src/pl/parser/pl_parser_mysql_mode.y b/src/pl/parser/pl_parser_mysql_mode.y index 3faafd8ac7..a75de86f75 100644 --- a/src/pl/parser/pl_parser_mysql_mode.y +++ b/src/pl/parser/pl_parser_mysql_mode.y @@ -430,7 +430,15 @@ sql_stmt: | SET /*sql stmt tail*/ { //read sql query string直到读到token';'或者END_P - do_parse_sql_stmt($$, parse_ctx, @1.first_column, @1.last_column, 2, ';', END_P); + ParseNode *sql_stmt = NULL; + do_parse_sql_stmt(sql_stmt, parse_ctx, @1.first_column, @1.last_column, 2, ';', END_P); + if (T_SET_PASSWORD == sql_stmt->type_ || + T_SET_NAMES == sql_stmt->type_ || + T_SET_CHARSET == sql_stmt->type_) { + malloc_non_terminal_node($$, parse_ctx->mem_pool_, T_SQL_STMT, 1, sql_stmt); + } else { + $$ = sql_stmt; + } if(T_VARIABLE_SET == $$->type_) { for(int64_t i = 0; i < $$->num_child_; ++i) { if(OB_UNLIKELY(NULL == $$->children_[i] || NULL == $$->children_[i]->children_[1])) { diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 439d82a0aa..13da9e7330 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -1030,10 +1030,7 @@ int ObSql::do_real_prepare(const ObString &sql, LOG_WARN("session info is NULL", K(ret)); } else if (OB_FAIL(parser.parse(sql, parse_result, - parse_mode, - false/*is_batched_multi_stmt_split_on*/, - false/*no_throw_parser_error*/, - is_from_pl))) { + parse_mode))) { LOG_WARN("generate syntax tree failed", K(sql), K(ret)); } else if (is_mysql_mode() && ObSQLUtils::is_mysql_ps_not_support_stmt(parse_result)) { @@ -2212,7 +2209,7 @@ int ObSql::handle_ps_execute(const ObPsStmtId client_stmt_id, ParseMode parse_mode = context.is_dbms_sql_ ? DBMS_SQL_MODE : context.is_dynamic_sql_ ? DYNAMIC_SQL_MODE : (context.session_info_->is_for_trigger_package() ? TRIGGER_MODE : STD_MODE); - if (OB_FAIL(parser.parse(sql, parse_result, parse_mode, false, false, NULL != session.get_pl_context()))) { + if (OB_FAIL(parser.parse(sql, parse_result, parse_mode))) { LOG_WARN("failed to parse sql", K(ret), K(sql), K(stmt_type)); } else if (OB_FAIL(check_read_only_privilege(parse_result, ectx, *schema_guard, sql_traits))) { LOG_WARN("failed to check read only privilege", K(ret)); @@ -4083,7 +4080,7 @@ int ObSql::parser_and_check(const ObString &outlined_stmt, if (OB_FAIL(parser.parse(outlined_stmt, parse_result, pc_ctx.is_rewrite_sql_ ? UDR_SQL_MODE : STD_MODE, pc_ctx.sql_ctx_.handle_batched_multi_stmt(), - false, NULL != session->get_pl_context()))) { + false, lib::is_mysql_mode() && NULL != session->get_pl_context()))) { LOG_WARN("Generate syntax tree failed", K(outlined_stmt), K(ret)); } else if ((PC_PS_MODE == pc_ctx.mode_ || PC_PL_MODE == pc_ctx.mode_) && OB_FAIL(construct_param_store_from_parameterized_params(