fix: adding constraint name duplicate check
This commit is contained in:
@ -15846,6 +15846,38 @@ int ObDDLSQLTransaction::register_tx_data(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ObDDLService::check_hidden_table_constraint_exist(
|
||||||
|
const ObTableSchema *hidden_table_schema,
|
||||||
|
const ObTableSchema *orig_table_schema,
|
||||||
|
ObSchemaGetterGuard &schema_guard)
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
for (ObTableSchema::const_constraint_iterator iter = hidden_table_schema->constraint_begin();
|
||||||
|
OB_SUCC(ret) && iter != hidden_table_schema->constraint_end(); ++iter) {
|
||||||
|
if (OB_ISNULL(*iter)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("iter is NULL", K(ret));
|
||||||
|
} else {
|
||||||
|
const ObString &cst_name = (*iter)->get_constraint_name();
|
||||||
|
bool is_check_constraint_name_exist = false;
|
||||||
|
const ObConstraint *cst = orig_table_schema->get_constraint(cst_name);
|
||||||
|
if (cst == nullptr) { // duplicate name which is not from orig table
|
||||||
|
if (OB_FAIL(check_constraint_name_is_exist(schema_guard,
|
||||||
|
*hidden_table_schema,
|
||||||
|
cst_name,
|
||||||
|
false,
|
||||||
|
is_check_constraint_name_exist))) {
|
||||||
|
LOG_WARN("fail to check constraint name is exist or not", K(ret), K(cst_name));
|
||||||
|
} else if (is_check_constraint_name_exist) {
|
||||||
|
ret = OB_ERR_CONSTRAINT_NAME_DUPLICATE;
|
||||||
|
LOG_WARN("check constraint name is duplicate", K(ret), K(cst_name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int ObDDLService::swap_orig_and_hidden_table_state(obrpc::ObAlterTableArg &alter_table_arg)
|
int ObDDLService::swap_orig_and_hidden_table_state(obrpc::ObAlterTableArg &alter_table_arg)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
@ -15898,6 +15930,10 @@ int ObDDLService::swap_orig_and_hidden_table_state(obrpc::ObAlterTableArg &alter
|
|||||||
} else if (OB_FAIL(rebuild_hidden_table_foreign_key_in_trans(alter_table_arg,
|
} else if (OB_FAIL(rebuild_hidden_table_foreign_key_in_trans(alter_table_arg,
|
||||||
*orig_table_schema, *hidden_table_schema, true/*rebuild_child_table_fk*/, schema_guard, trans, fk_cst_ids))) {
|
*orig_table_schema, *hidden_table_schema, true/*rebuild_child_table_fk*/, schema_guard, trans, fk_cst_ids))) {
|
||||||
LOG_WARN("failed to rebuild hidden table fk", K(ret));
|
LOG_WARN("failed to rebuild hidden table fk", K(ret));
|
||||||
|
} else if (OB_FAIL(check_hidden_table_constraint_exist(hidden_table_schema,
|
||||||
|
orig_table_schema,
|
||||||
|
schema_guard))) {
|
||||||
|
LOG_WARN("failed to check hidden table constraint existence", K(ret));
|
||||||
} else {
|
} else {
|
||||||
if (OB_SUCC(ret) && alter_table_arg.need_rebuild_trigger_) {
|
if (OB_SUCC(ret) && alter_table_arg.need_rebuild_trigger_) {
|
||||||
if (OB_FAIL(rebuild_triggers_on_hidden_table(*orig_table_schema,
|
if (OB_FAIL(rebuild_triggers_on_hidden_table(*orig_table_schema,
|
||||||
|
@ -497,6 +497,10 @@ public:
|
|||||||
const share::schema::ObTableSchema &hidden_table_schema,
|
const share::schema::ObTableSchema &hidden_table_schema,
|
||||||
const uint64_t session_id,
|
const uint64_t session_id,
|
||||||
ObDDLSQLTransaction &trans);
|
ObDDLSQLTransaction &trans);
|
||||||
|
int check_hidden_table_constraint_exist(
|
||||||
|
const ObTableSchema *hidden_table_schema,
|
||||||
|
const ObTableSchema *orig_table_schema,
|
||||||
|
ObSchemaGetterGuard &schema_guard);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is called by the storage layer in the three stage of offline ddl.
|
* This function is called by the storage layer in the three stage of offline ddl.
|
||||||
|
Reference in New Issue
Block a user