fix sql plan bug

This commit is contained in:
zzg19950727
2023-05-25 16:16:59 +00:00
committed by ob-robot
parent a4c4a002a4
commit 965683bb77
5 changed files with 18 additions and 18 deletions

View File

@ -139,7 +139,7 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item)
ObObj *cells = cur_row_.cells_; ObObj *cells = cur_row_.cells_;
ObString ipstr; ObString ipstr;
common::ObAddr addr; common::ObAddr addr;
#define REFINE_LENGTH(len) ((len) > MAX_LENGTH ? MAX_LENGTH : (len))
if (OB_ISNULL(cells) || OB_ISNULL(plan_item)) { if (OB_ISNULL(cells) || OB_ISNULL(plan_item)) {
ret = OB_INVALID_ARGUMENT; ret = OB_INVALID_ARGUMENT;
SERVER_LOG(WARN, "invalid argument", K(cells)); SERVER_LOG(WARN, "invalid argument", K(cells));
@ -237,7 +237,7 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item)
break; break;
} }
case OPTIMIZER: { case OPTIMIZER: {
cells[cell_idx].set_varchar(plan_item->optimizer_, plan_item->optimizer_len_); cells[cell_idx].set_varchar(plan_item->optimizer_, REFINE_LENGTH(plan_item->optimizer_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
@ -291,19 +291,19 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item)
break; break;
} }
case OTHER_TAG: { case OTHER_TAG: {
cells[cell_idx].set_varchar(plan_item->other_tag_, plan_item->other_tag_len_); cells[cell_idx].set_varchar(plan_item->other_tag_, REFINE_LENGTH(plan_item->other_tag_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case PARTITION_START: { case PARTITION_START: {
cells[cell_idx].set_varchar(plan_item->partition_start_, plan_item->partition_start_len_); cells[cell_idx].set_varchar(plan_item->partition_start_, REFINE_LENGTH(plan_item->partition_start_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case PARTITION_STOP: { case PARTITION_STOP: {
cells[cell_idx].set_varchar(plan_item->partition_stop_, plan_item->partition_stop_len_); cells[cell_idx].set_varchar(plan_item->partition_stop_, REFINE_LENGTH(plan_item->partition_stop_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
@ -313,7 +313,7 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item)
break; break;
} }
case OTHER: { case OTHER: {
cells[cell_idx].set_varchar(plan_item->other_, plan_item->other_len_); cells[cell_idx].set_varchar(plan_item->other_, REFINE_LENGTH(plan_item->other_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
@ -337,31 +337,31 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item)
break; break;
} }
case ACCESS_PREDICATES: { case ACCESS_PREDICATES: {
cells[cell_idx].set_varchar(plan_item->access_predicates_, plan_item->access_predicates_len_); cells[cell_idx].set_varchar(plan_item->access_predicates_, REFINE_LENGTH(plan_item->access_predicates_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case FILTER_PREDICATES: { case FILTER_PREDICATES: {
cells[cell_idx].set_varchar(plan_item->filter_predicates_, plan_item->filter_predicates_len_); cells[cell_idx].set_varchar(plan_item->filter_predicates_, REFINE_LENGTH(plan_item->filter_predicates_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case STARTUP_PREDICATES: { case STARTUP_PREDICATES: {
cells[cell_idx].set_varchar(plan_item->startup_predicates_, plan_item->startup_predicates_len_); cells[cell_idx].set_varchar(plan_item->startup_predicates_, REFINE_LENGTH(plan_item->startup_predicates_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case PROJECTION: { case PROJECTION: {
cells[cell_idx].set_varchar(plan_item->projection_, plan_item->projection_len_); cells[cell_idx].set_varchar(plan_item->projection_, REFINE_LENGTH(plan_item->projection_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case SPECIAL_PREDICATES: { case SPECIAL_PREDICATES: {
cells[cell_idx].set_varchar(plan_item->special_predicates_, plan_item->special_predicates_len_); cells[cell_idx].set_varchar(plan_item->special_predicates_, REFINE_LENGTH(plan_item->special_predicates_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
@ -377,13 +377,13 @@ int ObAllVirtualSqlPlan::fill_cells(ObSqlPlanItem *plan_item)
break; break;
} }
case REMARKS: { case REMARKS: {
cells[cell_idx].set_varchar(plan_item->remarks_, plan_item->remarks_len_); cells[cell_idx].set_varchar(plan_item->remarks_, REFINE_LENGTH(plan_item->remarks_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;
} }
case OTHER_XML: { case OTHER_XML: {
cells[cell_idx].set_varchar(plan_item->other_xml_, plan_item->other_xml_len_); cells[cell_idx].set_varchar(plan_item->other_xml_, REFINE_LENGTH(plan_item->other_xml_len_));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation( cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset())); ObCharset::get_default_charset()));
break; break;

View File

@ -103,6 +103,7 @@ private:
const static int64_t KEY_IP_IDX = 2; const static int64_t KEY_IP_IDX = 2;
const static int64_t KEY_PORT_IDX = 3; const static int64_t KEY_PORT_IDX = 3;
const static int64_t ROWKEY_COUNT = 4; const static int64_t ROWKEY_COUNT = 4;
const static int64_t MAX_LENGTH = 4000;
struct PlanInfo { struct PlanInfo {
PlanInfo(); PlanInfo();

View File

@ -792,6 +792,8 @@ int ObResultSet::close()
if (OB_FAIL(my_session_.reset_tx_variable_if_remote_trans( if (OB_FAIL(my_session_.reset_tx_variable_if_remote_trans(
physical_plan_->get_plan_type()))) { physical_plan_->get_plan_type()))) {
LOG_WARN("fail to reset tx_read_only if it is remote trans", K(ret)); LOG_WARN("fail to reset tx_read_only if it is remote trans", K(ret));
} else {
my_session_.set_last_plan_id(physical_plan_->get_plan_id());
} }
// 无论如何必须执行do_close_plan // 无论如何必须执行do_close_plan
if (OB_UNLIKELY(OB_SUCCESS != (do_close_plan_ret = do_close_plan(errcode_, if (OB_UNLIKELY(OB_SUCCESS != (do_close_plan_ret = do_close_plan(errcode_,

View File

@ -2032,9 +2032,6 @@ int ObBasicSessionInfo::set_cur_phy_plan(ObPhysicalPlan *cur_phy_plan)
void ObBasicSessionInfo::reset_cur_phy_plan_to_null() void ObBasicSessionInfo::reset_cur_phy_plan_to_null()
{ {
if (NULL != cur_phy_plan_) {
last_plan_id_ = cur_phy_plan_->get_plan_id();
}
cur_phy_plan_ = NULL; cur_phy_plan_ = NULL;
} }

View File

@ -1151,6 +1151,7 @@ public:
const common::ObCurTraceId::TraceId &get_current_trace_id() const { return curr_trace_id_; } const common::ObCurTraceId::TraceId &get_current_trace_id() const { return curr_trace_id_; }
uint64_t get_current_plan_id() const { return plan_id_; } uint64_t get_current_plan_id() const { return plan_id_; }
uint64_t get_last_plan_id() const { return last_plan_id_; } uint64_t get_last_plan_id() const { return last_plan_id_; }
void set_last_plan_id(uint64_t plan_id) { last_plan_id_ = plan_id; }
void set_current_execution_id(int64_t execution_id) { current_execution_id_ = execution_id; } void set_current_execution_id(int64_t execution_id) { current_execution_id_ = execution_id; }
void set_last_trace_id(common::ObCurTraceId::TraceId *trace_id) void set_last_trace_id(common::ObCurTraceId::TraceId *trace_id)
{ {
@ -2058,8 +2059,7 @@ private:
common::ObLogIdLevelMap log_id_level_map_; common::ObLogIdLevelMap log_id_level_map_;
//=============================================================== //===============================================================
// 当前运行的physical_plan,目前只是用于获取该语句运行过程中哪些用户变量和额外的系统变量需要序列化, // 生命周期不保证,谨慎使用该指针
// 而该语句执行完之后要将其设为NULL
ObPhysicalPlan *cur_phy_plan_; ObPhysicalPlan *cur_phy_plan_;
// sql_id of cur_phy_plan_ sql // sql_id of cur_phy_plan_ sql
char sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1]; char sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1];