diff --git a/src/sql/optimizer/ob_optimizer_util.cpp b/src/sql/optimizer/ob_optimizer_util.cpp index 46060f19ac..b7144c791c 100644 --- a/src/sql/optimizer/ob_optimizer_util.cpp +++ b/src/sql/optimizer/ob_optimizer_util.cpp @@ -5995,7 +5995,7 @@ int ObOptimizerUtil::gen_set_target_list(ObIAllocator *allocator, SelectItem &select_item = child_stmt->get_select_item(i); new_select_item.alias_name_ = select_item.alias_name_; new_select_item.expr_name_ = select_item.expr_name_; - new_select_item.is_real_alias_ = true; + new_select_item.is_real_alias_ = select_item.is_real_alias_ || select_item.expr_->is_column_ref_expr(); new_select_item.questions_pos_ = select_item.questions_pos_; new_select_item.params_idx_ = select_item.params_idx_; new_select_item.neg_param_idx_ = select_item.neg_param_idx_; @@ -6052,7 +6052,7 @@ int ObOptimizerUtil::gen_set_target_list(ObIAllocator *allocator, SelectItem &select_item = child_stmt->get_select_item(i); new_select_item.alias_name_ = select_item.alias_name_; new_select_item.expr_name_ = select_item.expr_name_; - new_select_item.is_real_alias_ = true; + new_select_item.is_real_alias_ = select_item.is_real_alias_ || select_item.expr_->is_column_ref_expr(); new_select_item.questions_pos_ = select_item.questions_pos_; new_select_item.params_idx_ = select_item.params_idx_; new_select_item.neg_param_idx_ = select_item.neg_param_idx_; diff --git a/src/sql/resolver/dml/ob_del_upd_resolver.cpp b/src/sql/resolver/dml/ob_del_upd_resolver.cpp index a66d747982..b1e4f4d74f 100644 --- a/src/sql/resolver/dml/ob_del_upd_resolver.cpp +++ b/src/sql/resolver/dml/ob_del_upd_resolver.cpp @@ -3979,7 +3979,7 @@ int ObDelUpdResolver::add_select_list_for_set_stmt(ObSelectStmt &select_stmt) res_type.reset(); new_select_item.alias_name_ = select_item.alias_name_; new_select_item.expr_name_ = select_item.expr_name_; - new_select_item.is_real_alias_ = true; + new_select_item.is_real_alias_ = select_item.is_real_alias_ || select_item.expr_->is_column_ref_expr(); res_type = select_item.expr_->get_result_type(); if (OB_FAIL(ObRawExprUtils::make_set_op_expr(*params_.expr_factory_, i, set_op_type, res_type, session_info_, new_select_item.expr_))) { diff --git a/src/sql/resolver/dml/ob_dml_resolver.cpp b/src/sql/resolver/dml/ob_dml_resolver.cpp index 64a45986f1..c57062fca7 100755 --- a/src/sql/resolver/dml/ob_dml_resolver.cpp +++ b/src/sql/resolver/dml/ob_dml_resolver.cpp @@ -14380,14 +14380,17 @@ int ObDMLResolver::resolve_cte_table( const ParseNode *table_node = &parse_tree; const ParseNode *alias_node = nullptr; const ParseNode *transpose_node = nullptr; + const ParseNode *part_node = nullptr; ObString alias_name; ObString old_cte_table_name; //TODO 存在同一张表有两个hint的情况,目前实现先忽略后面的hint if (T_ORG == parse_tree.type_) { table_node = parse_tree.children_[0]; + part_node = parse_tree.children_[2]; } else if (T_ALIAS == parse_tree.type_) { table_node = parse_tree.children_[0]; alias_node = parse_tree.children_[1]; + part_node = parse_tree.children_[3]; if (parse_tree.num_child_ >= 7) { transpose_node = parse_tree.children_[6]; } @@ -14405,6 +14408,9 @@ int ObDMLResolver::resolve_cte_table( LOG_WARN("param is null"); } else if (OB_ISNULL(node = CTE_table_item->node_)) { LOG_WARN("CTE table's parser node can not be NULL"); + } else if (is_oracle_mode() && OB_NOT_NULL(part_node)) { + ret = OB_ERR_PARTITION_EXTENDED_ON_VIEW; + LOG_WARN("partition extended only be used with tables and editioning views", K(ret)); } else if (OB_ISNULL(table_item = dml_stmt->create_table_item(*allocator_))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("create table item failed", K(ret)); diff --git a/src/sql/resolver/dml/ob_select_stmt.cpp b/src/sql/resolver/dml/ob_select_stmt.cpp index 283e22bc25..e999578597 100644 --- a/src/sql/resolver/dml/ob_select_stmt.cpp +++ b/src/sql/resolver/dml/ob_select_stmt.cpp @@ -344,7 +344,7 @@ int ObSelectStmt::create_select_list_for_set_stmt(ObRawExprFactory &expr_factory res_type.reset(); new_select_item.alias_name_ = child_select_item.alias_name_; new_select_item.expr_name_ = child_select_item.expr_name_; - new_select_item.is_real_alias_ = true; + new_select_item.is_real_alias_ = child_select_item.is_real_alias_ || child_select_item.expr_->is_column_ref_expr(); res_type = child_select_item.expr_->get_result_type(); if (OB_FAIL(ObRawExprUtils::make_set_op_expr(expr_factory, i, set_op_type, res_type, NULL, new_select_item.expr_))) {