From ca1574a1acd8b9df46c0aa130af0c22b672f130d Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 30 Nov 2022 14:35:45 +0000 Subject: [PATCH] fix transform shared subquery bug --- src/sql/rewrite/ob_transform_utils.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/sql/rewrite/ob_transform_utils.cpp b/src/sql/rewrite/ob_transform_utils.cpp index 317287703d..4b2fbfe8f1 100644 --- a/src/sql/rewrite/ob_transform_utils.cpp +++ b/src/sql/rewrite/ob_transform_utils.cpp @@ -6920,9 +6920,11 @@ int ObTransformUtils::construct_simple_view(ObDMLStmt *stmt, } } - // rebuild relation id info + // rebuild subquery list and relation id info if (OB_SUCC(ret)) { - if (OB_FAIL(simple_stmt->rebuild_tables_hash())) { + if (OB_FAIL(simple_stmt->adjust_subquery_list())) { + LOG_WARN("failed to adjust subquery list", K(ret)); + } else if (OB_FAIL(simple_stmt->rebuild_tables_hash())) { LOG_WARN("failed to rebuild table hash", K(ret)); } else if (OB_FAIL(simple_stmt->update_column_item_rel_id())) { LOG_WARN("failed to update column item by id", K(ret)); @@ -6945,6 +6947,9 @@ int ObTransformUtils::generate_select_list(ObTransformerCtx *ctx, OB_ISNULL(view_stmt = table->ref_query_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("params have null", K(ret), K(stmt), K(table)); + } else if (OB_FAIL(ObOptimizerUtil::remove_item(stmt->get_subquery_exprs(), + view_stmt->get_subquery_exprs()))) { + LOG_WARN("failed to remove item", K(ret)); } else if (OB_FAIL(extract_shared_exprs(stmt, view_stmt, shared_exprs))) { LOG_WARN("failed to extract shared expr", K(ret)); } else if (OB_FAIL(remove_const_exprs(shared_exprs, shared_exprs))) { @@ -6964,8 +6969,6 @@ int ObTransformUtils::generate_select_list(ObTransformerCtx *ctx, if (OB_SUCC(ret)) { if (OB_FAIL(stmt->adjust_subquery_list())) { LOG_WARN("failed to adjust subquery list", K(ret)); - } else if (OB_FAIL(view_stmt->adjust_subquery_list())) { - LOG_WARN("failed to adjust subquery list", K(ret)); } else if (OB_FAIL(adjust_pseudo_column_like_exprs(*stmt))) { LOG_WARN("failed to adjust pseudo column like exprs", K(ret)); } else if (OB_FAIL(adjust_pseudo_column_like_exprs(*view_stmt))) {