diff --git a/src/share/system_variable/ob_system_variable.cpp b/src/share/system_variable/ob_system_variable.cpp index 3b71003c14ed3c57dadfaef7e0ff3e22627943bd..9d64b8de8426e703dff4d946fb12e3bfab5209a3 100644 --- a/src/share/system_variable/ob_system_variable.cpp +++ b/src/share/system_variable/ob_system_variable.cpp @@ -1809,7 +1809,16 @@ int ObSysVarOnCheckFuncs::check_and_convert_tx_isolation(ObExecContext& ctx, con LOG_USER_ERROR(OB_NOT_SUPPORTED, "Isolation level SERIALIZABLE not supported in system tenant"); LOG_WARN("Isolation level SERIALIZABLE not supported in system tenant", K(ret), K(in_val)); } else { - out_val = in_val; + if (OB_FAIL(ob_write_obj(ctx.get_allocator(), in_val, out_val))) { + LOG_WARN("deep copy out_val obj failed", K(ret)); + } + ObString tmp_out_val = out_val.get_string(); + if (OB_FAIL(ob_simple_low_to_up(ctx.get_allocator(), + in_val.get_string(), + tmp_out_val))) { + LOG_WARN("Isolation level change to upper string failed", K(ret)); + } + out_val.set_varchar(tmp_out_val); } return ret; } diff --git a/src/sql/code_generator/ob_code_generator_impl.cpp b/src/sql/code_generator/ob_code_generator_impl.cpp index 297d1f3fda5906eede0c101a94424ca4bac5b528..12776d153306ef5ab4dbf7ddcc18bc3a170bedfd 100644 --- a/src/sql/code_generator/ob_code_generator_impl.cpp +++ b/src/sql/code_generator/ob_code_generator_impl.cpp @@ -4109,6 +4109,7 @@ int ObCodeGeneratorImpl::convert_pdml_delete(ObLogDelete& op, const PhyOpsDesc& pdml_delete->get_dml_row_desc().set_part_id_index(partition_expr_idx); } if (OB_SUCC(ret) && op.is_index_maintenance()) { + // find shadow pk expr and add it to out row desc and calc_exprs if (OB_FAIL(handle_pdml_shadow_pk(index_dml_info.column_exprs_, out_row_desc, out_row_desc, pdml_delete))) { LOG_WARN("failed to handle pdml shadow pk", K(ret), K(index_dml_info.column_exprs_)); } diff --git a/src/sql/engine/ob_exec_context.cpp b/src/sql/engine/ob_exec_context.cpp index 856991e85a8547ddd5a6746bde66d6ae6c177bbf..524cbd79abf6324d1ff055a0558d437af9a20a88 100644 --- a/src/sql/engine/ob_exec_context.cpp +++ b/src/sql/engine/ob_exec_context.cpp @@ -162,7 +162,8 @@ ObExecContext::ObExecContext(ObIAllocator& allocator) calc_type_(CALC_NORMAL), fixed_id_(OB_INVALID_ID), expr_partition_id_(OB_INVALID_ID), - iters_(256, allocator) + iters_(256, allocator), + check_status_times_(0) {} ObExecContext::ObExecContext() diff --git a/src/sql/executor/ob_slice_calc.cpp b/src/sql/executor/ob_slice_calc.cpp index c19154e5cbecf3de71923c2888bfea3cccd9a79b..6e40f545449aea49ec2c554b44477e0f5eab9de2 100644 --- a/src/sql/executor/ob_slice_calc.cpp +++ b/src/sql/executor/ob_slice_calc.cpp @@ -229,7 +229,6 @@ int ObRepartSliceIdxCalc::get_previous_row_partition_id(ObObj& partition_id) int ObSlaveMapRepartIdxCalcBase::init() { int ret = OB_SUCCESS; - if (OB_FAIL(ObRepartSliceIdxCalc::init())) { LOG_WARN("fail init base", K(ret)); } @@ -446,7 +445,6 @@ int ObRepartSliceIdxCalc::build_repart_ch_map(ObPxPartChMap& affinity_map) LOG_WARN("fail create hashmap", "count", part_ch_array.count(), K(ret)); } - int64_t partition_id = common::OB_INVALID_INDEX_INT64; ARRAY_FOREACH_X(part_ch_array, idx, cnt, OB_SUCC(ret)) { diff --git a/src/sql/optimizer/ob_optimizer.cpp b/src/sql/optimizer/ob_optimizer.cpp index 6dd54fe672def185c55e50e1ff9c20a53e762527..864729fc2f6c0999f12f07f9ac92d14eeb21c1f1 100644 --- a/src/sql/optimizer/ob_optimizer.cpp +++ b/src/sql/optimizer/ob_optimizer.cpp @@ -304,10 +304,6 @@ int ObOptimizer::check_pdml_supported_feature(const ObDMLStmt& stmt, const ObSQL } else if (table_schema->get_foreign_key_infos().count() > 0) { LOG_TRACE("dml has foreign key, disable pdml", K(ret)); is_use_pdml = false; - } else if (stmt::T_DELETE == stmt.get_stmt_type()) { - // https://code.aone.alibaba-inc.com/oceanbase/oceanbase/codereview/5345309 - // if no trigger, no foreign key, delete can do pdml, even if with local unique index - is_use_pdml = true; } else if (!session.use_static_typing_engine() && stmt.get_check_constraint_exprs_size() > 0) { LOG_TRACE("dml has constraint, old engine, disable pdml", K(ret)); is_use_pdml = false; diff --git a/src/sql/optimizer/ob_px_resource_analyzer.cpp b/src/sql/optimizer/ob_px_resource_analyzer.cpp index 9c7e426d62cb8c849b0eb1a92e40958b35a23732..73a4cf68e8383ce1fa4739715d02d2861cf9e60b 100644 --- a/src/sql/optimizer/ob_px_resource_analyzer.cpp +++ b/src/sql/optimizer/ob_px_resource_analyzer.cpp @@ -182,10 +182,22 @@ int ObPxResourceAnalyzer::analyze(ObLogicalOperator& root_op, int64_t& max_paral LOG_WARN("fail convert log plan to nested px tree", K(ret)); } else if (OB_FAIL(walk_through_px_trees(px_trees, max_parallel_thread_group_count))) { LOG_WARN("fail calc max parallel thread group count for resource reservation", K(ret)); + } else { + release(); } return ret; } +void ObPxResourceAnalyzer::release() +{ + for (int64_t i = 0; i < dfos_.count(); ++i) { + DfoInfo* dfo = dfos_.at(i); + if (OB_LIKELY(nullptr != dfo)) { + dfo->~DfoInfo(); + } + } +} + int ObPxResourceAnalyzer::convert_log_plan_to_nested_px_tree(ObIArray& px_trees, ObLogicalOperator& root_op) { int ret = OB_SUCCESS; @@ -296,6 +308,8 @@ int ObPxResourceAnalyzer::create_dfo(DfoInfo*& dfo, int64_t dop) } else if (nullptr == (dfo = new (mem_ptr) DfoInfo())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("Null ptr unexpected", KP(mem_ptr), K(ret)); + } else if (OB_FAIL(dfos_.push_back(dfo))) { + LOG_WARN("fail push dfo. no memory!", K(ret)); } else { dfo->set_dop(dop); } diff --git a/src/sql/optimizer/ob_px_resource_analyzer.h b/src/sql/optimizer/ob_px_resource_analyzer.h index 2b17afaa189b0e61f07af05d62ef705bc9fd0add..1a89de161f42460752687f0266abb609ff4b61cb 100644 --- a/src/sql/optimizer/ob_px_resource_analyzer.h +++ b/src/sql/optimizer/ob_px_resource_analyzer.h @@ -139,10 +139,12 @@ private: int walk_through_px_trees(common::ObIArray& px_trees, int64_t& max_parallel_thread_group_count); int walk_through_dfo_tree(PxInfo& px_root, int64_t& max_parallel_thread_group_count); int create_dfo(DfoInfo*& dfo, int64_t dop); + void release(); private: /* variables */ common::ObArenaAllocator dfo_allocator_; + common::ObArray dfos_; DISALLOW_COPY_AND_ASSIGN(ObPxResourceAnalyzer); };