[CP] fix shared expr issue in view merge/query push down

This commit is contained in:
obdev
2022-11-11 03:10:07 +00:00
committed by wangzelin.wzl
parent 618341bd5d
commit 143dd5e6d0
5 changed files with 54 additions and 0 deletions

View File

@ -486,6 +486,8 @@ int ObTransformViewMerge::check_basic_validity(ObDMLStmt *parent_stmt,
bool has_ref_assign_user_var = false;
bool force_merge = false;
bool force_no_merge = false;
bool is_select_expr_valid = false;
ObSEArray<ObRawExpr*, 8> select_exprs;
if (OB_ISNULL(parent_stmt) || OB_ISNULL(child_stmt)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret));
@ -515,6 +517,13 @@ int ObTransformViewMerge::check_basic_validity(ObDMLStmt *parent_stmt,
LOG_WARN("failed to check has rownum expr", K(ret));
} else if (has_rownum_expr) {
can_be = false;
} else if (OB_FAIL(child_stmt->get_select_exprs(select_exprs))) {
LOG_WARN("failed to get select exprs", K(ret));
} else if (OB_FAIL(ObTransformUtils::check_expr_valid_for_stmt_merge(select_exprs,
is_select_expr_valid))) {
LOG_WARN("failed to check select expr valid", K(ret));
} else if (!is_select_expr_valid) {
can_be = false;
} else if (0 == child_stmt->get_from_item_size()) {
//当 view 为 select ... from dual, 若上层非层次查询, 允许视图合并
can_be = parent_stmt->is_single_table_stmt()