[to #52028497]forbid execute load data if table has enabled insert/update trigger

This commit is contained in:
seuwebber
2023-09-09 13:46:08 +00:00
committed by ob-robot
parent 4a904949c2
commit d685d027ab
2 changed files with 39 additions and 1 deletions

View File

@ -246,6 +246,8 @@ int ObLoadDataResolver::resolve(const ParseNode &parse_tree)
ret = OB_NOT_SUPPORTED;
LOG_WARN("load data to the view is not supported", K(ret));
LOG_USER_ERROR(OB_NOT_SUPPORTED, "load data to the view is");
} else if (OB_FAIL(check_trigger_constraint(tschema))) {
LOG_WARN("check trigger constraint failed", K(ret), KPC(tschema));
} else {
load_args.table_id_ = tschema->get_table_id();
load_args.table_name_ = table_name;
@ -1342,5 +1344,41 @@ int ObLoadDataResolver::resolve_char_node(const ParseNode &node, int32_t &single
return ret;
}
int ObLoadDataResolver::check_trigger_constraint(const ObTableSchema *table_schema)
{
int ret = OB_SUCCESS;
if (OB_ISNULL(table_schema)
|| OB_ISNULL(schema_checker_)
|| OB_ISNULL(session_info_)
|| OB_ISNULL(schema_checker_->get_schema_guard())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("object is null", K(ret), K(table_schema), K(schema_checker_),
K(session_info_), K(schema_checker_->get_schema_guard()));
} else {
uint64_t tenant_id = session_info_->get_effective_tenant_id();
for (int64_t i = 0; OB_SUCC(ret) && i < table_schema->get_trigger_list().count(); i++) {
const ObTriggerInfo *trg_info = NULL;
share::schema::ObSchemaGetterGuard *schema_guard = schema_checker_->get_schema_guard();
if (OB_FAIL(schema_guard->get_trigger_info(tenant_id, table_schema->get_trigger_list().at(i), trg_info))) {
LOG_WARN("get trigger info failed", K(ret), K(tenant_id), K(table_schema->get_trigger_list().at(i)));
} else if (OB_ISNULL(trg_info)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("trigger info is null", K(ret), K(tenant_id), K(table_schema->get_trigger_list().at(i)));
} else if (trg_info->is_enable()
&& (trg_info->has_insert_event() || trg_info->has_update_event())) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("not support load data if table has insert or update trigger", K(ret), KPC(trg_info));
if (lib::is_oracle_mode()) {
LOG_USER_ERROR(OB_NOT_SUPPORTED, "if table has enabled insert or update trigger, load data");
} else {
LOG_USER_ERROR(OB_NOT_SUPPORTED, "if table has insert or update trigger, load data");
}
}
}
}
return ret;
}
} // sql
} // oceanbase