Skip to content

Commit 2c6b650

Browse files
obdevfootka
authored andcommitted
[CP] [vector index] fix parellel dml error
Co-authored-by: footka <672528926@qq.com>
1 parent 9d3eb42 commit 2c6b650

4 files changed

Lines changed: 45 additions & 13 deletions

File tree

src/sql/code_generator/ob_tsc_cg_service.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,10 +1070,14 @@ int ObTscCgService::extract_das_access_exprs(const ObLogTableScan &op,
10701070
&& !static_cast<ObColumnRefRawExpr *>(expr)->is_vec_pq_cids_column()
10711071
&& !static_cast<ObColumnRefRawExpr *>(expr)->is_hybrid_embedded_vec_column()) {
10721072
// do nothing.
1073-
} else if (!cg_.opt_ctx_->is_online_ddl() && expr->is_column_ref_expr() && (static_cast<ObColumnRefRawExpr *>(expr)->is_vec_cid_column() || static_cast<ObColumnRefRawExpr *>(expr)->is_vec_pq_cids_column())) {
1073+
} else if (!cg_.opt_ctx_->is_online_ddl() &&
1074+
expr->is_column_ref_expr() &&
1075+
(static_cast<ObColumnRefRawExpr *>(expr)->is_vec_cid_column() ||
1076+
static_cast<ObColumnRefRawExpr *>(expr)->is_vec_pq_cids_column() ||
1077+
static_cast<ObColumnRefRawExpr *>(expr)->is_hybrid_embedded_vec_column())) {
10741078
share::schema::ObSchemaGetterGuard *schema_guard = cg_.opt_ctx_->get_schema_guard();
10751079
const ObTableSchema *table_schema = nullptr;
1076-
uint64_t rowkey_cid_tid = OB_INVALID_ID;
1080+
uint64_t rowkey_id_tid = OB_INVALID_ID;
10771081
if (OB_ISNULL(schema_guard)) {
10781082
ret = OB_ERR_UNEXPECTED;
10791083
LOG_WARN("get null schema guard", K(ret));
@@ -1084,17 +1088,26 @@ int ObTscCgService::extract_das_access_exprs(const ObLogTableScan &op,
10841088
if (OB_FAIL(add_var_to_array_no_dup(tmp_access_exprs, expr))) {
10851089
LOG_WARN("failed to add param expr", K(ret));
10861090
}
1087-
} else if (OB_FAIL(ObVectorIndexUtil::check_rowkey_cid_table_readable(schema_guard, *table_schema, static_cast<ObColumnRefRawExpr *>(expr)->get_column_id(), rowkey_cid_tid))) {
1091+
} else if (OB_FAIL(ObVectorIndexUtil::check_rowkey_cid_table_readable(schema_guard, *table_schema, static_cast<ObColumnRefRawExpr *>(expr)->get_column_id(), rowkey_id_tid))) {
10881092
LOG_WARN("failed to check_rowkey_cid_table_readable", K(ret));
1089-
} else if (OB_INVALID_ID == rowkey_cid_tid) {
1093+
} else if (static_cast<ObColumnRefRawExpr *>(expr)->is_hybrid_embedded_vec_column()
1094+
&& OB_FAIL(ObVectorIndexUtil::check_hybrid_embedded_vec_cid_table_readable(schema_guard, *table_schema, static_cast<ObColumnRefRawExpr *>(expr)->get_column_id(), rowkey_id_tid))) {
1095+
LOG_WARN("failed to check_embedded_vec_cid_readable", K(ret));
1096+
} else if (OB_INVALID_ID == rowkey_id_tid) {
10901097
} else {
10911098
const ObIArray<uint64_t> &domain_tids = op.get_rowkey_domain_tids();
10921099
bool need_add = false;
10931100
for (int i = 0; i < domain_tids.count() && !need_add; i++) {
1094-
if (rowkey_cid_tid == domain_tids.at(i)) {
1101+
if (rowkey_id_tid == domain_tids.at(i)) {
10951102
need_add = true;
10961103
}
10971104
}
1105+
if (op.is_vec_idx_scan() &&
1106+
scan_ctdef.ir_scan_type_ == OB_VEC_COM_AUX_SCAN &&
1107+
expr->is_column_ref_expr() &&
1108+
static_cast<ObColumnRefRawExpr *>(expr)->is_hybrid_embedded_vec_column()) {
1109+
need_add = true;
1110+
}
10981111
if (need_add && OB_FAIL(add_var_to_array_no_dup(tmp_access_exprs, expr))) {
10991112
LOG_WARN("failed to add param expr", K(ret));
11001113
}

src/sql/das/ob_das_dml_vec_iter.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -740,15 +740,19 @@ int ObEmbeddedVecDMLIterator::generate_embedded_vec_row(const ObChunkDatumStore:
740740
} else {
741741
obj_arr[vid_idx].set_int(vid);
742742
ObString embedded_vector;
743-
if (OB_FAIL(!is_old_row_ && ObVectorIndexUtil::get_vector_from_text_by_embedding(allocator_, chunk, vec_index_param, embedded_vector))) {
744-
LOG_WARN("failed to get vector from text by embedding", K(ret));
743+
if (is_old_row_) {
744+
obj_arr[embedded_vec_idx].set_null();
745745
} else {
746-
obj_arr[embedded_vec_idx].set_string(embedded_vector);
747-
if (OB_FAIL(rows_.push_back(row))) {
748-
LOG_WARN("fail to push back row", K(ret));
746+
if (OB_FAIL(ObVectorIndexUtil::get_vector_from_text_by_embedding(allocator_, chunk, vec_index_param, embedded_vector))) {
747+
LOG_WARN("failed to get vector from text by embedding", K(ret));
748+
} else {
749+
obj_arr[embedded_vec_idx].set_string(embedded_vector);
749750
}
750751
}
751752
}
753+
if (OB_SUCC(ret) && OB_FAIL(rows_.push_back(row))) {
754+
LOG_WARN("fail to push back row", K(ret));
755+
}
752756
}
753757
}
754758
}

src/sql/optimizer/ob_log_del_upd.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1537,7 +1537,7 @@ int ObLogDelUpd::replace_dml_info_exprs(
15371537
} else if (OB_NOT_NULL(table_schema)) {
15381538
uint64_t embedded_vec_tid = OB_INVALID_ID;
15391539
if (OB_FAIL(ObVectorIndexUtil::check_hybrid_embedded_vec_cid_table_readable(schema_guard, *table_schema, static_cast<ObColumnRefRawExpr *>(expr)->get_column_id(), embedded_vec_tid))) {
1540-
LOG_WARN("failed to check_rowkey_cid_table_readable", K(ret));
1540+
LOG_WARN("failed to check_hybrid_embedded_table_readable", K(ret));
15411541
} else if (OB_INVALID_ID == embedded_vec_tid) {
15421542
if (OB_FAIL(replace_expr_action(replacer, index_dml_info->column_old_values_exprs_.at(i)))) {
15431543
LOG_WARN("fail to replace expr", K(ret), K(i), K(index_dml_info->column_old_values_exprs_));

src/sql/resolver/dml/ob_dml_resolver.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9230,7 +9230,7 @@ int ObDMLResolver::resolve_generated_column_expr(const ObString &expr_str,
92309230
if (OB_FAIL(check_need_fill_embedded_vec_expr_param(*stmt, *column_schema, need_fill))) {
92319231
LOG_WARN("fail to check need fill embedded_vec expr param", K(ret), KPC(column_schema), KPC(ref_expr));
92329232
} else if (need_fill) {
9233-
if (OB_FAIL(fill_embedded_vec_expr_param(table_item.table_id_, table_item.ref_id_, basic_column_item->column_id_, table_schema, ref_expr, stmt))) {
9233+
if (OB_FAIL(fill_embedded_vec_expr_param(table_item.table_id_, table_item.ref_id_, column_schema->get_column_id(), table_schema, ref_expr, stmt))) {
92349234
LOG_WARN("fail to fill embedded vec expr param", K(ret), K(table_item), KP(table_schema), KP(ref_expr));
92359235
}
92369236
}
@@ -17385,7 +17385,7 @@ int ObDMLResolver::fill_embedded_vec_expr_param(
1738517385
param,
1738617386
param_filled))) {
1738717387
LOG_WARN("failed to get vector index param", K(ret));
17388-
} else if (table_schema->is_user_table() && OB_FAIL(ObVectorIndexUtil::check_hybrid_embedded_vec_table_readable(schema_checker_->get_schema_guard(), *table_schema, embedded_vec_tid, true))) {
17388+
} else if (table_schema->is_user_table() && OB_FAIL(ObVectorIndexUtil::check_hybrid_embedded_vec_cid_table_readable(schema_checker_->get_schema_guard(), *table_schema, column_id, embedded_vec_tid, true))) {
1738917389
LOG_WARN("not embedded vec expr", K(ret), "expr type", embedded_vec_expr->get_expr_type());
1739017390
} else if (OB_INVALID_ID == embedded_vec_tid) {
1739117391
// do nothing, skip the embedded vec column
@@ -18142,6 +18142,21 @@ int ObDMLResolver::check_domain_id_need_column_ref_expr(ObDMLStmt &stmt, ObSchem
1814218142
} else if (OB_INVALID_ID != rowkey_cid_tid) {
1814318143
need_column_ref_expr = true;
1814418144
}
18145+
} else if (col_schema->is_hybrid_embedded_vec_column()) {
18146+
uint64_t embedded_vec_tid = OB_INVALID_ID;
18147+
const share::schema::ObTableSchema *table = nullptr;
18148+
const ObSimpleTableSchemaV2 *index_schema = nullptr;
18149+
if (OB_FAIL(schema_checker_->get_table_schema(session_info_->get_effective_tenant_id(), col_schema->get_table_id(), table))) {
18150+
LOG_WARN("fail to get ddl table schema", K(ret));
18151+
} else if (OB_FAIL(ObVectorIndexUtil::check_hybrid_embedded_vec_cid_table_readable(
18152+
schema_guard,
18153+
*table,
18154+
col_schema->get_column_id(),
18155+
embedded_vec_tid))) {
18156+
LOG_WARN("fail to check hybrid vector embedding table", K(ret), KPC(table));
18157+
} else if (OB_INVALID_ID != embedded_vec_tid) {
18158+
need_column_ref_expr = true;
18159+
}
1814518160
} else {
1814618161
need_column_ref_expr = true;
1814718162
}

0 commit comments

Comments
 (0)