bugfix: INSERT/UPDATE an inline view containing more than one table
This commit is contained in:
@ -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*/}
|
||||
|
@ -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))) {
|
||||
|
Reference in New Issue
Block a user