support replace into for materialized view log

This commit is contained in:
leftgeek
2024-04-12 09:15:44 +00:00
committed by ob-robot
parent 8136efa66b
commit d84ebfb7c0
2 changed files with 12 additions and 2 deletions

View File

@ -210,6 +210,15 @@ int ObDASInsertOp::insert_row_with_fetch()
const ObDASInsCtDef *index_ins_ctdef = static_cast<const ObDASInsCtDef*>(related_ctdefs_.at(i)); const ObDASInsCtDef *index_ins_ctdef = static_cast<const ObDASInsCtDef*>(related_ctdefs_.at(i));
ObDASInsRtDef *index_ins_rtdef = static_cast<ObDASInsRtDef*>(related_rtdefs_.at(i)); ObDASInsRtDef *index_ins_rtdef = static_cast<ObDASInsRtDef*>(related_rtdefs_.at(i));
ObTabletID index_tablet_id = related_tablet_ids_.at(i); ObTabletID index_tablet_id = related_tablet_ids_.at(i);
ObDASMLogDMLIterator mlog_iter(index_tablet_id, dml_param, &dml_iter, DAS_OP_TABLE_INSERT);
ObNewRowIterator *new_iter = nullptr;
if (index_ins_ctdef->table_param_.get_data_table().is_mlog_table()
&& !index_ins_ctdef->is_access_mlog_as_master_table_) {
new_iter = &mlog_iter;
} else {
new_iter = &dml_iter;
}
if (OB_FAIL(dml_iter.rewind(index_ins_ctdef))) { if (OB_FAIL(dml_iter.rewind(index_ins_ctdef))) {
LOG_WARN("rewind dml iter failed", K(ret)); LOG_WARN("rewind dml iter failed", K(ret));
} else if (OB_FAIL(ObDMLService::init_dml_param(*index_ins_ctdef, } else if (OB_FAIL(ObDMLService::init_dml_param(*index_ins_ctdef,
@ -230,7 +239,7 @@ int ObDASInsertOp::insert_row_with_fetch()
duplicated_column_ids = &(index_ins_ctdef->column_ids_); duplicated_column_ids = &(index_ins_ctdef->column_ids_);
} }
while (OB_SUCC(ret) && OB_SUCC(dml_iter.get_next_row(insert_row))) { while (OB_SUCC(ret) && OB_SUCC(new_iter->get_next_row(insert_row))) {
ObNewRowIterator *duplicated_rows = NULL; ObNewRowIterator *duplicated_rows = NULL;
if (OB_ISNULL(insert_row)) { if (OB_ISNULL(insert_row)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;

View File

@ -2887,7 +2887,8 @@ int ObLSTabletService::insert_row(
} else { } else {
tbl_row.flag_.set_flag(ObDmlFlag::DF_INSERT); tbl_row.flag_.set_flag(ObDmlFlag::DF_INSERT);
tbl_row.row_val_ = row; tbl_row.row_val_ = row;
if (OB_FAIL(get_conflict_rows(tablet_handle, if (!dml_param.table_param_->get_data_table().is_mlog_table()
&& OB_FAIL(get_conflict_rows(tablet_handle,
run_ctx, run_ctx,
flag, flag,
duplicated_column_ids, duplicated_column_ids,