[CP] bugfix: create force view on set query even when resolve failed
This commit is contained in:
parent
7e0254fd00
commit
80741a994a
@ -291,8 +291,13 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree)
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get unexpected null", K(ret), K(view_table_resolver.get_select_stmt()));
|
||||
} else if (OB_ISNULL(select_stmt->get_real_stmt())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("failed to get real stmt", K(ret), K(*select_stmt));
|
||||
if (!resolve_succ) {
|
||||
//if set query resolve failed, child stmt is null
|
||||
//do not persist column schema
|
||||
} else {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("failed to get real stmt", K(ret), KPC(select_stmt));
|
||||
}
|
||||
} else if (OB_FAIL(check_view_columns(*select_stmt,
|
||||
view_columns_node,
|
||||
create_arg.error_info_,
|
||||
@ -318,6 +323,8 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree)
|
||||
table_schema,
|
||||
column_list))) {
|
||||
LOG_WARN("failed to add undefined column infos", K(ret));
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (OB_FAIL(collect_dependency_infos(params_.query_ctx_, create_arg))) {
|
||||
LOG_WARN("failed to collect dependency infos", K(ret));
|
||||
} else if (is_force_view && (!resolve_succ || add_undefined_columns)
|
||||
@ -369,7 +376,7 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree)
|
||||
// In mysql mode, only support create view as ... with check option in syntax.
|
||||
// In oracle mode, support create view v as (select * from (select * from t with check option))
|
||||
// so we have to check in oracle mode even if check_option of view_schema is NONE.
|
||||
if ((with_check_option || lib::is_oracle_mode())
|
||||
if ((with_check_option || lib::is_oracle_mode()) && !(select_stmt == NULL && !resolve_succ)
|
||||
&& OB_FAIL(ObResolverUtils::view_with_check_option_allowed(select_stmt,
|
||||
with_check_option))) {
|
||||
LOG_WARN("view with check option not allowed", K(ret));
|
||||
@ -441,6 +448,7 @@ int ObCreateViewResolver::resolve(const ParseNode &parse_tree)
|
||||
|
||||
// 权限添加需要拿到完整stmt信息,慎重调整本段代码位置
|
||||
if (OB_SUCC(ret) && !(is_sync_ddl_user && session_info_->is_inner())
|
||||
&& !(select_stmt == NULL && !resolve_succ)
|
||||
&& OB_FAIL(check_privilege_needed(*stmt, *select_stmt, is_force_view))) {
|
||||
LOG_WARN("fail to check privilege needed", K(ret));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user