@@ -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