From f844e90c8eb80f8f90e2ed0073e4acf01824fdc3 Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 22 Jul 2022 10:47:13 +0800 Subject: [PATCH] [CP] fix rollup const expr bug --- src/sql/optimizer/ob_log_group_by.cpp | 19 +++++++++++++++++++ src/sql/optimizer/ob_log_group_by.h | 1 + 2 files changed, 20 insertions(+) diff --git a/src/sql/optimizer/ob_log_group_by.cpp b/src/sql/optimizer/ob_log_group_by.cpp index 18cb6fdb22..a41452df67 100644 --- a/src/sql/optimizer/ob_log_group_by.cpp +++ b/src/sql/optimizer/ob_log_group_by.cpp @@ -1152,6 +1152,25 @@ int ObLogGroupBy::generate_link_sql_pre(GenLinkStmtContext& link_ctx) return ret; } +int ObLogGroupBy::compute_const_exprs() +{ + int ret = OB_SUCCESS; + ObLogicalOperator *child = NULL; + if (OB_ISNULL(my_plan_) || OB_UNLIKELY(get_num_of_child() < 0)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("operator is invalid", K(ret), K(get_num_of_child()), K(my_plan_)); + } else if (OB_ISNULL(child = get_child(0))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("child is null", K(ret), K(child)); + } else if (!has_rollup() && OB_FAIL(append(get_output_const_exprs(), child->get_output_const_exprs()))) { + LOG_WARN("failed to append exprs", K(ret)); + } else if (OB_FAIL(ObOptimizerUtil::compute_const_exprs(get_filter_exprs(), get_output_const_exprs()))) { + LOG_WARN("failed to compute const conditionexprs", K(ret)); + } else { /*do nothing*/ + } + return ret; +} + int ObLogGroupBy::compute_fd_item_set() { int ret = OB_SUCCESS; diff --git a/src/sql/optimizer/ob_log_group_by.h b/src/sql/optimizer/ob_log_group_by.h index 0e8098a252..9b21e35b4f 100644 --- a/src/sql/optimizer/ob_log_group_by.h +++ b/src/sql/optimizer/ob_log_group_by.h @@ -108,6 +108,7 @@ public: } virtual int generate_link_sql_pre(GenLinkStmtContext& link_ctx) override; + virtual int compute_const_exprs() override; virtual int compute_fd_item_set() override; virtual int compute_op_ordering() override; double get_distinct_card() const