From 5813fbd504a8a40cc686851bac703a2efce3a8a4 Mon Sep 17 00:00:00 2001 From: xianyu-w <707512433@qq.com> Date: Wed, 20 Sep 2023 14:26:39 +0000 Subject: [PATCH] bugfix: failed to update local table semi join link table --- src/sql/rewrite/ob_transform_dblink.cpp | 9 ++++++--- src/sql/rewrite/ob_transformer_impl.cpp | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sql/rewrite/ob_transform_dblink.cpp b/src/sql/rewrite/ob_transform_dblink.cpp index 298a3340b..7a3ed58c4 100644 --- a/src/sql/rewrite/ob_transform_dblink.cpp +++ b/src/sql/rewrite/ob_transform_dblink.cpp @@ -48,9 +48,11 @@ int ObTransformDBlink::transform_one_stmt(ObIArray &parent_stmt if (OB_FAIL(formalize_link_table(stmt))) { LOG_WARN("failed to formalize link table", K(ret)); } - } else if ((!stmt->is_dml_write_stmt() || stmt->is_merge_stmt()) && - OB_FAIL(pack_link_table(stmt, trans_happened))) { + } else if (OB_FAIL(pack_link_table(stmt, trans_happened))) { LOG_WARN("failed to pack link table", K(ret)); + } else if (OB_UNLIKELY(stmt->is_dml_write_stmt() && stmt->is_dblink_stmt())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected dblink stmt", KPC(stmt)); } else { LOG_TRACE("succeed to pack link table", K(ret)); } @@ -555,7 +557,8 @@ int ObTransformDBlink::collect_link_table(ObDMLStmt *stmt, ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpect null stmt", K(ret)); } else if (stmt->is_hierarchical_query() || stmt->is_unpivot_select() || - (stmt->is_select_stmt() && sel_stmt->has_select_into())) { + (stmt->is_select_stmt() && sel_stmt->has_select_into()) || + stmt->is_dml_write_stmt()) { all_table_from_one_dblink = false; } else if (has_invalid_link_expr(*stmt, has_special_expr)) { LOG_WARN("failed to check stmt has invalid link expr", K(ret)); diff --git a/src/sql/rewrite/ob_transformer_impl.cpp b/src/sql/rewrite/ob_transformer_impl.cpp index 7f1c90334..1243370c5 100644 --- a/src/sql/rewrite/ob_transformer_impl.cpp +++ b/src/sql/rewrite/ob_transformer_impl.cpp @@ -229,6 +229,7 @@ int ObTransformerImpl::do_transform_dblink_write(ObDMLStmt *&stmt, bool &trans_h ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected null", K(stmt), K(ret)); } else { + OPT_TRACE_TITLE("start transform dblink write"); ObTransformDBlink trans(ctx_); trans.set_transformer_type(PROCESS_DBLINK); trans.set_transform_for_write(true); @@ -253,6 +254,7 @@ int ObTransformerImpl::do_transform_dblink_read(ObDMLStmt *&stmt) ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected null", K(stmt), K(ret)); } else { + OPT_TRACE_TITLE("start transform dblink read"); ObTransformDBlink trans(ctx_); trans.set_transformer_type(PROCESS_DBLINK); trans.set_transform_for_write(false);