From e2af84d11e32fa377bf6b2fcfc02b5ab77f4d82c Mon Sep 17 00:00:00 2001 From: yinyj17 Date: Fri, 14 Jul 2023 03:23:57 +0000 Subject: [PATCH] fix vpd constraint bug --- src/sql/ob_sql.cpp | 3 ++- src/sql/ob_sql_utils.h | 10 +++++++--- src/sql/rewrite/ob_transform_utils.cpp | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 2bd984b338..59ddfae6d2 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -4999,7 +4999,8 @@ int ObSql::create_expr_constraints(ObQueryCtx &query_ctx, ObExecContext &exec_ct LOG_WARN("unexpect null", K(ret), K(j)); } else if (OB_FAIL(hidden_column_item.expr_->extract_info())) { LOG_WARN("failed to extract expr info", K(ret)); - } else if (OB_UNLIKELY(!ObOptEstUtils::is_calculable_expr(*hidden_column_item.expr_, dummy_count))) { + } else if (!expr_constraints.at(j).ignore_const_check_ && + OB_UNLIKELY(!ObOptEstUtils::is_calculable_expr(*hidden_column_item.expr_, dummy_count))) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpect calculable expr", K(ret), KPC(hidden_column_item.expr_)); } else if (OB_FAIL(pre_calc_exprs.push_back(hidden_column_item))) { diff --git a/src/sql/ob_sql_utils.h b/src/sql/ob_sql_utils.h index e872ecb189..9ad5d82f12 100644 --- a/src/sql/ob_sql_utils.h +++ b/src/sql/ob_sql_utils.h @@ -1027,15 +1027,19 @@ struct ObExprConstraint { ObExprConstraint() : pre_calc_expr_(NULL), - expect_result_(PRE_CALC_RESULT_NONE) {} + expect_result_(PRE_CALC_RESULT_NONE), + ignore_const_check_(false) {} ObExprConstraint(ObRawExpr *expr, PreCalcExprExpectResult expect_result) : pre_calc_expr_(expr), - expect_result_(expect_result) {} + expect_result_(expect_result), + ignore_const_check_(false) {} bool operator==(const ObExprConstraint &rhs) const; ObRawExpr *pre_calc_expr_; PreCalcExprExpectResult expect_result_; + bool ignore_const_check_; TO_STRING_KV(KP_(pre_calc_expr), - K_(expect_result)); + K_(expect_result), + K_(ignore_const_check)); }; struct ObPreCalcExprConstraint : public common::ObDLinkBase diff --git a/src/sql/rewrite/ob_transform_utils.cpp b/src/sql/rewrite/ob_transform_utils.cpp index a063cbc493..28758cabb2 100644 --- a/src/sql/rewrite/ob_transform_utils.cpp +++ b/src/sql/rewrite/ob_transform_utils.cpp @@ -10340,6 +10340,7 @@ int ObTransformUtils::add_param_bool_constraint(ObTransformerCtx *ctx, } if (OB_SUCC(ret) && !existed) { ObExprConstraint cons(bool_expr, expect_result); + cons.ignore_const_check_ = ignore_const_check; if (OB_FAIL(ctx->expr_constraints_.push_back(cons))) { LOG_WARN("failed to push back pre calc constraints", K(ret)); }