bugfix: INSERT/UPDATE an inline view containing more than one table

This commit is contained in:
obdev
2023-10-06 08:09:44 +00:00
committed by ob-robot
parent 966961be63
commit a8ed6a2c3e
2 changed files with 0 additions and 16 deletions

View File

@ -408,11 +408,6 @@ int ObInsertResolver::resolve_insert_field(const ParseNode &insert_into, TableIt
OB_ISNULL(ref_stmt = table_item->ref_query_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected error", K(table_item), K(ref_stmt), K(ret));
} else if (OB_UNLIKELY(ref_stmt->get_from_items().count() != 1)) {
//这里是为了兼容oracle的报错行为,对于直接向子查询插入数据时如果子查询中from项不为1项时,报错这种子查询是非法的,
//其他情形同update view类似判断,这里不再重复判断
ret = OB_ERR_ILLEGAL_VIEW_UPDATE;
LOG_WARN("not updatable", K(ret));
} else if (OB_FAIL(set_base_table_for_view(*table_item))) {
LOG_WARN("set base table for insert view failed", K(ret));
} else {/*do nothing*/}

View File

@ -441,19 +441,8 @@ int ObUpdateResolver::resolve_table_list(const ParseNode &parse_tree)
LOG_WARN("table node is null");
} else if (OB_FAIL(ObDMLResolver::resolve_table(*table_node, table_item))) {
LOG_WARN("failed to resolve table", K(ret));
//这里是为了兼容oracle的报错行为,对于直接向子查询更新数据时如果子查询中from项不为1项时,报错这种子查询是非法的,
//其他情形同update view类似判断,这里不再重复解决
} else if (OB_FAIL(resolve_foreign_key_constraint(table_item))) {
LOG_WARN("failed to resolve foreign key constraint", K(ret), K(table_item->ref_id_));
} else if (is_oracle_mode() && table_node->num_child_ == 2) {
if (OB_ISNULL(table_item) || (!table_item->is_generated_table() && !table_item->is_temp_table()) ||
OB_ISNULL(ref_stmt = table_item->ref_query_)) {
int ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected error", K(table_item), K(ref_stmt), K(ret));
} else if (OB_UNLIKELY(ref_stmt->get_from_items().count() != 1)) {
ret = OB_ERR_ILLEGAL_VIEW_UPDATE;
LOG_WARN("not updatable", K(ret));
} else {/*do nothing*/}
} else {/*do nothing*/}
if (OB_SUCC(ret)) {
if (OB_FAIL(column_namespace_checker_.add_reference_table(table_item))) {