Fix: replace 4377 bug

This commit is contained in:
obdev
2023-02-07 18:07:25 +08:00
committed by ob-robot
parent 81139d609e
commit 2555a03217
5 changed files with 1736 additions and 1719 deletions

View File

@ -731,7 +731,6 @@ int ObDmlCgService::generate_conflict_checker_ctdef(ObLogInsert &op,
ObConflictCheckerCtdef &conflict_checker_ctdef)
{
int ret = OB_SUCCESS;
ObSEArray<ObRawExpr*, 16> table_column_exprs;
ObSEArray<ObRawExpr *, 8> rowkey_exprs;
if (OB_FAIL(get_table_unique_key_exprs(op, index_dml_info, rowkey_exprs))) {
@ -745,9 +744,7 @@ int ObDmlCgService::generate_conflict_checker_ctdef(ObLogInsert &op,
} else if (OB_FAIL(cg_.generate_rt_exprs(rowkey_exprs,
conflict_checker_ctdef.data_table_rowkey_expr_))) {
LOG_WARN("fail to generate data_table rowkey_expr", K(ret), K(rowkey_exprs));
} else if (OB_FAIL(convert_old_row_exprs(index_dml_info.column_exprs_, table_column_exprs))) {
LOG_WARN("convert old row exprs failed", K(ret));
} else if (OB_FAIL(cg_.generate_rt_exprs(table_column_exprs,
} else if (OB_FAIL(cg_.generate_rt_exprs(index_dml_info.column_old_values_exprs_,
conflict_checker_ctdef.table_column_exprs_))) {
LOG_WARN("fail to generate table columns rt exprs ", K(ret));
} else {
@ -873,6 +870,24 @@ int ObDmlCgService::generate_constraint_infos(ObLogInsert &op,
return ret;
}
int ObDmlCgService::generate_access_exprs(const common::ObIArray<ObColumnRefRawExpr*> &columns,
common::ObIArray<ObRawExpr*> &access_exprs)
{
int ret = OB_SUCCESS;
for (int64_t i = 0; OB_SUCC(ret) && i < columns.count(); ++i) {
ObRawExpr *expr = columns.at(i);
if (expr->is_column_ref_expr() &&
static_cast<ObColumnRefRawExpr *>(expr)->is_virtual_generated_column()) {
// do nothing.
} else {
if (OB_FAIL(add_var_to_array_no_dup(access_exprs, expr))) {
LOG_WARN("failed to add param expr", K(ret));
}
}
}
return ret;
}
int ObDmlCgService::generate_scan_ctdef(ObLogInsert &op,
const IndexDMLInfo &index_dml_info,
ObDASScanCtDef &scan_ctdef)
@ -896,8 +911,8 @@ int ObDmlCgService::generate_scan_ctdef(ObLogInsert &op,
} else if (OB_FAIL(schema_guard->get_schema_guard()->get_schema_version(
TABLE_SCHEMA, tenant_id, ref_table_id, scan_ctdef.schema_version_))) {
LOG_WARN("fail to get schema version", K(ret), K(tenant_id), K(ref_table_id));
} else if (FALSE_IT(access_exprs.assign(index_dml_info.column_old_values_exprs_))) {
// do nothing
} else if (OB_FAIL(generate_access_exprs(index_dml_info.column_exprs_, access_exprs))) {
LOG_WARN("fail to generate access exprs ", K(ret));
} else if (OB_FAIL(cg_.generate_rt_exprs(access_exprs,
scan_ctdef.pd_expr_spec_.access_exprs_))) {
LOG_WARN("fail to generate rt exprs ", K(ret));
@ -910,6 +925,8 @@ int ObDmlCgService::generate_scan_ctdef(ObLogInsert &op,
if (OB_ISNULL(item)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid column item", K(i), K(item));
} else if (item->is_virtual_generated_column()) {
// do nothing.
} else if (OB_FAIL(get_column_ref_base_cid(op, item, base_cid))) {
LOG_WARN("get base column id failed", K(ret), K(item));
} else if (OB_FAIL(scan_ctdef.access_column_ids_.push_back(base_cid))) {
@ -923,7 +940,7 @@ int ObDmlCgService::generate_scan_ctdef(ObLogInsert &op,
if (OB_FAIL(scan_ctdef.table_param_.convert(*table_schema, scan_ctdef.access_column_ids_))) {
LOG_WARN("convert table param failed", K(ret));
} else if (OB_FAIL(cg_.generate_calc_exprs(dep_exprs,
access_exprs,
index_dml_info.column_old_values_exprs_,
scan_ctdef.pd_expr_spec_.calc_exprs_,
op.get_type(),
false))) {