From 36c89f2ef1b16fbee0b0bb191453672b747584e7 Mon Sep 17 00:00:00 2001 From: xianyu-w <707512433@qq.com> Date: Thu, 8 Feb 2024 02:50:57 +0000 Subject: [PATCH] [CP] Fix a dblink bug --- src/sql/rewrite/ob_transform_dblink.cpp | 31 ++++++++++++++++++------- src/sql/rewrite/ob_transform_dblink.h | 2 ++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/sql/rewrite/ob_transform_dblink.cpp b/src/sql/rewrite/ob_transform_dblink.cpp index 0bef29eba..7789ed212 100644 --- a/src/sql/rewrite/ob_transform_dblink.cpp +++ b/src/sql/rewrite/ob_transform_dblink.cpp @@ -503,14 +503,29 @@ int ObTransformDBlink::has_invalid_link_expr(ObDMLStmt &stmt, bool &has_invalid_ has_invalid_expr = false; if (OB_FAIL(stmt.get_relation_exprs(exprs))) { LOG_WARN("failed to get relation exprs", K(ret)); - } else { - for (int64_t i = 0; OB_SUCC(ret) && !has_invalid_expr && i < exprs.count(); i++) { - bool is_valid = false; - if (OB_FAIL(check_link_expr_valid(exprs.at(i), is_valid))) { - LOG_WARN("failed to check link expr valid", KPC(exprs.at(i)), K(ret)); - } else if (!is_valid) { - has_invalid_expr = true; - } + } else if (OB_FAIL(has_invalid_link_expr(exprs, has_invalid_expr))) { + LOG_WARN("failed to check has invalid link expr", K(ret)); + } else if (has_invalid_expr) { + // do nothing + } else if (stmt.is_insert_stmt()) { + // get_relation_exprs can not get all exprs in values vector + if (OB_FAIL(has_invalid_link_expr(static_cast(stmt).get_values_vector(), has_invalid_expr))) { + LOG_WARN("failed to check has invalid link expr", K(ret)); + } + } + return ret; +} + +int ObTransformDBlink::has_invalid_link_expr(ObIArray &exprs, bool &has_invalid_expr) +{ + int ret = OB_SUCCESS; + has_invalid_expr = false; + for (int64_t i = 0; OB_SUCC(ret) && !has_invalid_expr && i < exprs.count(); i++) { + bool is_valid = false; + if (OB_FAIL(check_link_expr_valid(exprs.at(i), is_valid))) { + LOG_WARN("failed to check link expr valid", KPC(exprs.at(i)), K(ret)); + } else if (!is_valid) { + has_invalid_expr = true; } } return ret; diff --git a/src/sql/rewrite/ob_transform_dblink.h b/src/sql/rewrite/ob_transform_dblink.h index 26f09d374..a6306f502 100644 --- a/src/sql/rewrite/ob_transform_dblink.h +++ b/src/sql/rewrite/ob_transform_dblink.h @@ -175,6 +175,8 @@ private: int has_invalid_link_expr(ObDMLStmt &stmt, bool &has_invalid_expr); + int has_invalid_link_expr(ObIArray &exprs, bool &has_invalid_expr); + static int check_link_expr_valid(ObRawExpr *expr, bool &is_valid); DISALLOW_COPY_AND_ASSIGN(ObTransformDBlink);