[FEAT MERGE]:Merge foreign key feature to master

Co-authored-by: YangEfei <yangyifei96@outlook.com>
This commit is contained in:
obdev
2023-08-30 13:10:42 +00:00
committed by ob-robot
parent b4427e1a69
commit 044fadf593
59 changed files with 2587 additions and 223 deletions

View File

@ -300,6 +300,45 @@ int ObLogMerge::generate_rowid_expr_for_trigger()
return ret;
}
int ObLogMerge::generate_part_id_expr_for_foreign_key(ObIArray<ObRawExpr*> &all_exprs)
{
int ret = OB_SUCCESS;
const ObMergeStmt *merge_stmt = static_cast<const ObMergeStmt *>(get_stmt());
if (OB_ISNULL(merge_stmt)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("merge stmt is null", K(ret), K(merge_stmt));
} else if (merge_stmt->has_insert_clause()) {
for (int64_t i = 0; OB_SUCC(ret) && i < get_index_dml_infos().count(); ++i) {
IndexDMLInfo *ins_info = get_index_dml_infos().at(i);
if (OB_ISNULL(ins_info)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("dml info is null", K(ret), K(ins_info));
} else if (!ins_info->is_primary_index_) {
// do nothing
} else if (OB_FAIL(generate_fk_lookup_part_id_expr(*ins_info))) {
LOG_WARN("failed to generate lookup part expr for foreign key", K(ret));
} else if (OB_FAIL(convert_insert_new_fk_lookup_part_id_expr(all_exprs,*ins_info))) {
LOG_WARN("failed to convert lookup part expr for foreign key", K(ret));
}
}
}
for (int64_t i = 0; OB_SUCC(ret) && i < get_update_infos().count(); ++i) {
IndexDMLInfo *upd_info = get_update_infos().at(i);
if (OB_ISNULL(upd_info)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("update info is null", K(ret), K(upd_info));
} else if (!upd_info->is_primary_index_) {
// do nothing
} else if (OB_FAIL(generate_fk_lookup_part_id_expr(*upd_info))) {
LOG_WARN("failed to generate lookup part expr for foreign key", K(ret));
} else if (OB_FAIL(convert_update_new_fk_lookup_part_id_expr(all_exprs, *upd_info))) {
LOG_WARN("failed to convert lookup part expr for foreign key", K(ret));
}
}
return ret;
}
int ObLogMerge::generate_multi_part_partition_id_expr()
{
int ret = OB_SUCCESS;