fix view pullup part exprs bug

This commit is contained in:
ChangerR 2022-12-28 13:08:15 +00:00 committed by ob-robot
parent c40dbae25e
commit 02fedb0783
4 changed files with 13 additions and 11 deletions

View File

@ -2172,7 +2172,7 @@ int ObDelUpdResolver::view_pullup_part_exprs()
if (OB_ISNULL(sel_stmt) || OB_ISNULL(t)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get select stmt for base table item failed", K(ret));
} else if (OB_FAIL(get_pullup_column_map(*stmt, *sel_stmt, t->ref_id_, view_columns, base_columns))) {
} else if (OB_FAIL(get_pullup_column_map(*stmt, *sel_stmt, table->table_id_, view_columns, base_columns))) {
// link.zt seems to have problem, base_tid is better to be refined as table_id
LOG_WARN("failed to get pullup column map", K(ret));
} else if (OB_FAIL(copier.add_replaced_expr(base_columns, view_columns))) {
@ -2304,7 +2304,8 @@ int ObDelUpdResolver::resolve_check_constraints(const TableItem* table_item,
return ret;
}
int ObDelUpdResolver::resolve_view_check_exprs(const TableItem* table_item,
int ObDelUpdResolver::resolve_view_check_exprs(uint64_t table_id,
const TableItem* table_item,
const bool cascaded,
common::ObIArray<ObRawExpr*> &check_exprs)
{
@ -2324,7 +2325,7 @@ int ObDelUpdResolver::resolve_view_check_exprs(const TableItem* table_item,
LOG_WARN("get unexpected null", K(ret), K(del_upd_stmt), K(select_stmt));
} else if (!cascaded && VIEW_CHECK_OPTION_NONE ==
(check_option = select_stmt->get_check_option())) {
if (OB_FAIL(resolve_view_check_exprs(table_item->view_base_item_, cascaded, check_exprs))) {
if (OB_FAIL(resolve_view_check_exprs(table_id, table_item->view_base_item_, cascaded, check_exprs))) {
LOG_WARN("resolve view check exprs failed", K(ret));
}
} else {
@ -2337,7 +2338,7 @@ int ObDelUpdResolver::resolve_view_check_exprs(const TableItem* table_item,
// may have problem when a table is used twice by the view.
if (OB_FAIL(get_pullup_column_map(*del_upd_stmt,
*select_stmt,
table_item->get_base_table_item().ref_id_,
table_id,
view_columns,
base_columns))) {
LOG_WARN("failed to get pullup column map", K(ret));
@ -2352,7 +2353,7 @@ int ObDelUpdResolver::resolve_view_check_exprs(const TableItem* table_item,
}
if (OB_SUCC(ret)) {
const bool new_cascaded = cascaded || VIEW_CHECK_OPTION_CASCADED == check_option;
if (OB_FAIL(resolve_view_check_exprs(table_item->view_base_item_, new_cascaded, check_exprs))) {
if (OB_FAIL(resolve_view_check_exprs(table_id, table_item->view_base_item_, new_cascaded, check_exprs))) {
LOG_WARN("resolve view check exprs failed", K(ret));
}
}
@ -2363,14 +2364,14 @@ int ObDelUpdResolver::resolve_view_check_exprs(const TableItem* table_item,
int ObDelUpdResolver::get_pullup_column_map(ObDMLStmt &stmt,
ObSelectStmt &sel_stmt,
uint64_t base_ref_id,
uint64_t table_id,
ObIArray<ObRawExpr *> &view_columns,
ObIArray<ObRawExpr *> &base_columns)
{
int ret = OB_SUCCESS;
for (int64_t i = 0; OB_SUCC(ret) && i < stmt.get_column_size(); ++i) {
ColumnItem &parent_column = stmt.get_column_items().at(i);
if (parent_column.base_tid_ == base_ref_id) {
if (parent_column.table_id_ == table_id) {
for (int64_t j = 0; OB_SUCC(ret) && j < sel_stmt.get_column_size(); ++j) {
ColumnItem &child_column = sel_stmt.get_column_items().at(j);
if (child_column.base_tid_ == parent_column.base_tid_ &&

View File

@ -151,12 +151,13 @@ protected:
ObIArray<ObRawExpr *> &value_list);
int resolve_check_constraints(const TableItem* table_item,
common::ObIArray<ObRawExpr*> &check_exprs);
int resolve_view_check_exprs(const TableItem* table_item,
int resolve_view_check_exprs(uint64_t table_id,
const TableItem* table_item,
const bool cascaded,
common::ObIArray<ObRawExpr*> &check_exprs);
int get_pullup_column_map(ObDMLStmt &stmt,
ObSelectStmt &sel_stmt,
uint64_t base_ref_id,
uint64_t table_id,
ObIArray<ObRawExpr *> &view_columns,
ObIArray<ObRawExpr *> &base_columns);

View File

@ -844,7 +844,7 @@ int ObInsertResolver::resolve_insert_constraint()
LOG_WARN("get unexpected null", K(ret));
} else {
ObInsertTableInfo &table_info = insert_stmt->get_insert_table_info();
if (OB_FAIL(resolve_view_check_exprs(table_item, false, table_info.view_check_exprs_))) {
if (OB_FAIL(resolve_view_check_exprs(table_item->table_id_, table_item, false, table_info.view_check_exprs_))) {
LOG_WARN("resolve view check exprs failed", K(ret));
} else if (OB_FAIL(resolve_check_constraints(table_item, table_info.check_constraint_exprs_))) {
LOG_WARN("failed to resolve check constraints", K(ret));

View File

@ -724,7 +724,7 @@ int ObUpdateResolver::resolve_update_constraints()
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(table_item), K(ret));
} else if (!update_stmt->has_instead_of_trigger() &&
OB_FAIL(resolve_view_check_exprs(table_item, false, table_info->view_check_exprs_))) {
OB_FAIL(resolve_view_check_exprs(table_item->table_id_, table_item, false, table_info->view_check_exprs_))) {
LOG_WARN("failed to resolve view check exprs", K(ret));
} else if (OB_FAIL(resolve_check_constraints(table_item, table_info->check_constraint_exprs_))) {
LOG_WARN("failed to resolve view check exprs", K(ret));