From e6ac67123378e3cf7e58450f323049bb7d084309 Mon Sep 17 00:00:00 2001 From: akaError Date: Thu, 14 Mar 2024 11:45:04 +0000 Subject: [PATCH] fix mysqltest --- src/sql/optimizer/ob_optimizer_util.cpp | 16 ++++++++++------ .../ob_transform_predicate_move_around.cpp | 11 +++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/sql/optimizer/ob_optimizer_util.cpp b/src/sql/optimizer/ob_optimizer_util.cpp index 54bea0e5f..1957de997 100644 --- a/src/sql/optimizer/ob_optimizer_util.cpp +++ b/src/sql/optimizer/ob_optimizer_util.cpp @@ -4590,14 +4590,9 @@ int ObOptimizerUtil::check_push_down_expr(const ObRelIds &table_ids, { int ret = OB_SUCCESS; all_contain = true; - bool contain_op_row = false; - if (OB_FAIL(ObRawExprUtils::check_contain_op_row_expr(&or_qual, contain_op_row))) { - LOG_WARN("fail to check contain op row", K(ret)); - } else if (contain_op_row) { - all_contain = false; - } for (int64_t i = 0; OB_SUCC(ret) && all_contain && i < or_qual.get_param_count(); ++i) { ObRawExpr *cur_expr = or_qual.get_param_expr(i); + bool contain_op_row = false; if (OB_ISNULL(cur_expr)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("expr in or expr is null", K(ret)); @@ -4606,11 +4601,16 @@ int ObOptimizerUtil::check_push_down_expr(const ObRelIds &table_ids, ObOpRawExpr *and_expr = static_cast(cur_expr); for (int64_t j = 0; OB_SUCC(ret) && j < and_expr->get_param_count(); ++j) { ObRawExpr *cur_and_expr = and_expr->get_param_expr(j); + contain_op_row = false; if (OB_ISNULL(cur_and_expr)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("expr in and expr is null", K(ret)); } else if (cur_and_expr->has_flag(CNT_SUB_QUERY)) { //do nothing + } else if (OB_FAIL(ObRawExprUtils::check_contain_op_row_expr(cur_and_expr, contain_op_row))) { + LOG_WARN("fail to check contain op row", K(ret)); + } else if (contain_op_row) { + // do nothing } else if (!table_ids.is_superset(cur_and_expr->get_relation_ids())) { //do nothing } else if (cur_and_expr->get_relation_ids().is_empty() && @@ -4626,6 +4626,10 @@ int ObOptimizerUtil::check_push_down_expr(const ObRelIds &table_ids, } } else if (cur_expr->has_flag(CNT_SUB_QUERY)) { all_contain = false; + } else if (OB_FAIL(ObRawExprUtils::check_contain_op_row_expr(cur_expr, contain_op_row))) { + LOG_WARN("fail to check contain op row", K(ret)); + } else if (contain_op_row) { + all_contain = false; } else if (!table_ids.is_superset(cur_expr->get_relation_ids())) { all_contain = false; } else if (cur_expr->get_relation_ids().is_empty() && diff --git a/src/sql/rewrite/ob_transform_predicate_move_around.cpp b/src/sql/rewrite/ob_transform_predicate_move_around.cpp index 62a4f79d1..c2bb2f110 100644 --- a/src/sql/rewrite/ob_transform_predicate_move_around.cpp +++ b/src/sql/rewrite/ob_transform_predicate_move_around.cpp @@ -2457,12 +2457,6 @@ int ObTransformPredicateMoveAround::check_having_expr(ObSelectStmt &stmt, ObSEArray generalized_columns; ObSEArray param_preds; all_contain = true; - bool contain_op_row = false; - if (OB_FAIL(ObRawExprUtils::check_contain_op_row_expr(&or_qual, contain_op_row))) { - LOG_WARN("fail to check contain op row", K(ret)); - } else if (contain_op_row) { - all_contain = false; - } for (int64_t i = 0; OB_SUCC(ret) && all_contain && i < or_qual.get_param_count(); ++i) { ObRawExpr *cur_expr = or_qual.get_param_expr(i); generalized_columns.reuse(); @@ -2484,11 +2478,16 @@ int ObTransformPredicateMoveAround::check_having_expr(ObSelectStmt &stmt, for (int64_t j = 0; OB_SUCC(ret) && j < param_preds.count(); ++j) { ObRawExpr *cur_and_expr = param_preds.at(j); generalized_columns.reuse(); + bool contain_op_row = false; if (OB_ISNULL(cur_and_expr)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("expr in and expr is null", K(ret)); } else if (cur_and_expr->has_flag(CNT_SUB_QUERY)) { // do nothing + } else if (OB_FAIL(ObRawExprUtils::check_contain_op_row_expr(cur_and_expr, contain_op_row))) { + LOG_WARN("fail to check contain op row", K(ret)); + } else if (contain_op_row) { + // do nothing } else if (OB_FAIL(extract_generalized_column(cur_and_expr, generalized_columns))) { LOG_WARN("failed to extract generalized columns", K(ret)); } else if (!ObOptimizerUtil::subset_exprs(