From ef7d1b3611a0e66ccf7a2bd63a0da1bcbc76547c Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 17 Aug 2023 09:51:54 +0000 Subject: [PATCH] Repair some ps bugs 1 --- src/observer/mysql/obmp_packet_sender.cpp | 3 ++- src/observer/mysql/obmp_stmt_prepare.cpp | 1 + src/sql/plan_cache/ob_sql_parameterization.cpp | 14 +++++++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/observer/mysql/obmp_packet_sender.cpp b/src/observer/mysql/obmp_packet_sender.cpp index 5a29fdd66e..b130c29aaf 100644 --- a/src/observer/mysql/obmp_packet_sender.cpp +++ b/src/observer/mysql/obmp_packet_sender.cpp @@ -1106,7 +1106,8 @@ bool ObMPPacketSender::has_pl() { bool has_pl = false; const obmysql::ObMySQLRawPacket &pkt = reinterpret_cast(req_->get_packet()); - if (obmysql::COM_STMT_EXECUTE == pkt.get_cmd() + if (obmysql::COM_STMT_PREPARE == pkt.get_cmd() + || obmysql::COM_STMT_EXECUTE == pkt.get_cmd() || obmysql::COM_QUERY == pkt.get_cmd() || obmysql::COM_STMT_PREXECUTE == pkt.get_cmd() || obmysql::COM_STMT_FETCH == pkt.get_cmd()) { diff --git a/src/observer/mysql/obmp_stmt_prepare.cpp b/src/observer/mysql/obmp_stmt_prepare.cpp index 720e1ff6ec..6ec1767278 100644 --- a/src/observer/mysql/obmp_stmt_prepare.cpp +++ b/src/observer/mysql/obmp_stmt_prepare.cpp @@ -214,6 +214,7 @@ int ObMPStmtPrepare::process() } else if (FALSE_IT(session.post_sync_session_info())) { } else if (OB_UNLIKELY(packet_len > session.get_max_packet_size())) { ret = OB_ERR_NET_PACKET_TOO_LARGE; + need_disconnect = false; LOG_WARN("packet too large than allowd for the session", K_(sql), K(ret)); } else if (OB_FAIL(sql::ObFLTUtils::init_flt_info(pkt.get_extra_info(), session, conn->proxy_cap_flags_.is_full_link_trace_support()))) { diff --git a/src/sql/plan_cache/ob_sql_parameterization.cpp b/src/sql/plan_cache/ob_sql_parameterization.cpp index 651ab6b8ed..8f85f0de2e 100644 --- a/src/sql/plan_cache/ob_sql_parameterization.cpp +++ b/src/sql/plan_cache/ob_sql_parameterization.cpp @@ -675,9 +675,13 @@ int ObSqlParameterization::transform_tree(TransformTreeCtx &ctx, } // sql with charset need not ps parameterize - if (OB_SUCC(ret) && T_QUESTIONMARK == ctx.tree_->type_ && OB_NOT_NULL(ctx.tree_->children_) - && OB_NOT_NULL(ctx.tree_->children_[0]) && ctx.tree_->children_[0]->type_ == T_CHARSET) { - ctx.sql_info_->ps_need_parameterized_ = false; + if (OB_SUCC(ret)) { + if (T_QUESTIONMARK == ctx.tree_->type_ && OB_NOT_NULL(ctx.tree_->children_) + && OB_NOT_NULL(ctx.tree_->children_[0]) && ctx.tree_->children_[0]->type_ == T_CHARSET) { + ctx.sql_info_->ps_need_parameterized_ = false; + } else if (T_INTO_OUTFILE == ctx.tree_->type_) { + ctx.sql_info_->ps_need_parameterized_ = false; + } } //判断insert中values()在tree中的哪一层,当某结点value_father_level_处于VALUE_VECTOR_LEVEL时, @@ -1822,6 +1826,10 @@ int ObSqlParameterization::mark_tree(ParseNode *tree ,SqlInfo &sql_info) } } else if ((0 == func_name.case_compare("concat")) && 1 == node[0]->reserved_) { sql_info.ps_need_parameterized_ = false; + } else if ((0 == func_name.case_compare("json_equal"))) { + sql_info.ps_need_parameterized_ = false; + } else if ((0 == func_name.case_compare("json_extract"))) { + sql_info.ps_need_parameterized_ = false; } } } else if (T_OP_LIKE == tree->type_) {