Skip to content

Commit 13e493b

Browse files
obdevfootka
authored andcommitted
fix: create LOB aux tables after hybrid vec index adds LOB columns
Co-authored-by: footka <672528926@qq.com>
1 parent 47690af commit 13e493b

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

src/rootserver/parallel_ddl/ob_create_table_helper.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,50 @@ int ObCreateTableHelper::generate_aux_table_schemas_()
748748
LOG_WARN("invalid table cnt", KR(ret), K(new_tables_.count()));
749749
} else if (OB_FAIL(inner_generate_aux_table_schema_(arg_))) {
750750
LOG_WARN("fail to inner generate aux table schema", KR(ret));
751+
} else if (OB_UNLIKELY(new_tables_.count() <= 0)) {
752+
ret = OB_ERR_UNEXPECTED;
753+
LOG_WARN("invalid table cnt after aux schema generation", KR(ret), K(new_tables_.count()));
754+
} else {
755+
ObTableSchema &data_table = new_tables_.at(0);
756+
// After index processing (e.g., hybrid vec index), the data table may have gained
757+
// LOB columns that were not present when has_lob_column was checked in
758+
// inner_generate_aux_table_schema_. Check again and create LOB aux tables if needed.
759+
if (!data_table.is_external_table()
760+
&& !data_table.has_lob_aux_table()
761+
&& data_table.has_lob_column(true)) {
762+
HEAP_VARS_2((ObTableSchema, lob_meta_schema), (ObTableSchema, lob_piece_schema)) {
763+
ObLobMetaBuilder lob_meta_builder(*ddl_service_);
764+
ObLobPieceBuilder lob_piece_builder(*ddl_service_);
765+
ObIDGenerator id_generator;
766+
uint64_t object_id = OB_INVALID_ID;
767+
if (OB_FAIL(gen_object_ids_(2, id_generator))) {
768+
LOG_WARN("fail to gen object ids for lob aux tables", KR(ret), K_(tenant_id));
769+
} else if (OB_FAIL(id_generator.next(object_id))) {
770+
LOG_WARN("fail to get next object_id", KR(ret));
771+
} else if (OB_FAIL(lob_meta_builder.generate_aux_lob_meta_schema(
772+
schema_service_->get_schema_service(), data_table, object_id,
773+
lob_meta_schema, true))) {
774+
LOG_WARN("generate lob meta table schema failed", KR(ret), K(data_table));
775+
} else if (OB_FAIL(id_generator.next(object_id))) {
776+
LOG_WARN("fail to get next object_id", KR(ret));
777+
} else if (OB_FAIL(lob_piece_builder.generate_aux_lob_piece_schema(
778+
schema_service_->get_schema_service(), data_table, object_id,
779+
lob_piece_schema, true))) {
780+
LOG_WARN("generate lob piece table schema failed", KR(ret), K(data_table));
781+
} else if (OB_FAIL(new_tables_.push_back(lob_meta_schema))) {
782+
LOG_WARN("push_back lob meta table failed", KR(ret));
783+
} else if (OB_FAIL(new_tables_.push_back(lob_piece_schema))) {
784+
LOG_WARN("push_back lob piece table failed", KR(ret));
785+
} else {
786+
data_table.set_aux_lob_meta_tid(lob_meta_schema.get_table_id());
787+
data_table.set_aux_lob_piece_tid(lob_piece_schema.get_table_id());
788+
LOG_INFO("create lob aux tables for hybrid vector index",
789+
K(data_table.get_table_name_str()),
790+
K(lob_meta_schema.get_table_id()),
791+
K(lob_piece_schema.get_table_id()));
792+
}
793+
}
794+
}
751795
}
752796
return ret;
753797
}

0 commit comments

Comments
 (0)