@@ -1032,26 +1032,14 @@ public long truncateTable(long schemaId, @NonNull String tableName, long tableEn
10321032 }
10331033
10341034 // Generate new table ids.
1035- boolean autoInc = table .getTableDefinition ().getColumns ().stream ()
1036- .anyMatch (io .dingodb .sdk .service .entity .meta .ColumnDefinition ::isAutoIncrement );
10371035 checkRegionConsistent (table , false );
10381036 for (TableDefinitionWithId index : indexes ) {
10391037 checkRegionConsistent (index , true );
10401038 }
10411039
1042- long ts = TsoService .getDefault ().tso ();
1043- dropRegionByTable (MAPPER .idFrom (table .getTableId ()), jobId , ts , autoInc );
1044-
1045- for (TableDefinitionWithId index : indexes ) {
1046- dropRegionByTable (MAPPER .idFrom (index .getTableId ()), jobId , ts );
1047- }
1048-
1049- List <DingoCommonId > oldIds = new ArrayList <>();
1050- oldIds .add (table .getTableId ());
1051-
10521040 // Reset table id.
10531041 io .dingodb .sdk .service .entity .meta .TableDefinition tableDefinition = table .getTableDefinition ();
1054- tableDefinition . setSchemaState ( io . dingodb . sdk . service . entity . common . SchemaState . SCHEMA_DELETE_ONLY );
1042+
10551043 DingoCommonId tableId = DingoCommonId .builder ()
10561044 .entityType (EntityType .ENTITY_TYPE_TABLE )
10571045 .parentEntityId (schemaId )
@@ -1070,8 +1058,7 @@ public long truncateTable(long schemaId, @NonNull String tableName, long tableEn
10701058 .collect (Collectors .toList ());
10711059 TableIdWithPartIds newTableId =
10721060 TableIdWithPartIds .builder ().tableId (tableId ).partIds (tablePartIds ).build ();
1073- oldIds .forEach (id -> infoSchemaService .updateTable (id .getParentEntityId (), table ));
1074-
1061+ DingoCommonId originTableId = table .getTableId ();
10751062 resetTableId (newTableId , table );
10761063 table .getTableDefinition ().setSchemaState (io .dingodb .sdk .service .entity .common .SchemaState .SCHEMA_PUBLIC );
10771064
@@ -1113,86 +1100,102 @@ public long truncateTable(long schemaId, @NonNull String tableName, long tableEn
11131100 .build ()
11141101 );
11151102 }
1116- if (indexes .isEmpty ()) {
1117- return tableEntityId ;
1118- }
1119-
1120- // create index id
1121- List <DingoCommonId > indexIds = coordinatorService .createIds (
1122- tso (),
1123- CreateIdsRequest .builder ().idEpochType (IdEpochType .ID_NEXT_TABLE ).count (indexes .size ()).build ()
1124- ).getIds ()
1125- .stream ()
1126- .map (id -> DingoCommonId .builder ()
1127- .entityId (id )
1128- .entityType (EntityType .ENTITY_TYPE_INDEX )
1129- .parentEntityId (tableEntityId )
1130- .build ())
1131- .collect (Collectors .toList ());
1132-
1133- for (int i = 0 ; i < indexes .size (); i ++) {
1134- int finalI = i ;
1135- TableDefinitionWithId indexDefinitionWithId = indexes .get (i );
1136- List <DingoCommonId > indexPartIds = coordinatorService .createIds (
1137- tso (), CreateIdsRequest .builder ()
1138- .idEpochType (IdEpochType .ID_NEXT_TABLE )
1139- .count (indexDefinitionWithId .getTableDefinition ()
1140- .getTablePartition ().getPartitions ().size ())
1141- .build ()
1142- ).getIds ().stream ()
1103+ if (!indexes .isEmpty ()) {
1104+ // create index id
1105+ List <DingoCommonId > indexIds = coordinatorService .createIds (
1106+ tso (),
1107+ CreateIdsRequest .builder ().idEpochType (IdEpochType .ID_NEXT_TABLE ).count (indexes .size ()).build ()
1108+ ).getIds ()
1109+ .stream ()
11431110 .map (id -> DingoCommonId .builder ()
1144- .entityType (EntityType .ENTITY_TYPE_PART )
1145- .parentEntityId (indexIds .get (finalI ).getEntityId ())
11461111 .entityId (id )
1112+ .entityType (EntityType .ENTITY_TYPE_INDEX )
1113+ .parentEntityId (tableEntityId )
11471114 .build ())
11481115 .collect (Collectors .toList ());
1149- TableIdWithPartIds indexIdWithPartIds = TableIdWithPartIds .builder ()
1150- .tableId (indexIds .get (i ))
1151- .partIds (indexPartIds )
1152- .build ();
1153-
1154- resetTableId (indexIdWithPartIds , indexDefinitionWithId );
1155- infoSchemaService .createIndex (
1156- schemaId ,
1157- tableEntityId ,
1158- indexDefinitionWithId
1159- );
1160- }
1161- for (TableDefinitionWithId withId : indexes ) {
1162- io .dingodb .sdk .service .entity .meta .TableDefinition definition = withId .getTableDefinition ();
1163- for (Partition partition : definition .getTablePartition ().getPartitions ()) {
1164- IndexParameter indexParameter = definition .getIndexParameter ();
1165- if (indexParameter .getVectorIndexParameter () != null ) {
1166- indexParameter .setIndexType (IndexType .INDEX_TYPE_VECTOR );
1167- } else if (indexParameter .getDocumentIndexParameter () != null ) {
1168- indexParameter .setIndexType (IndexType .INDEX_TYPE_DOCUMENT );
1169- }
1170- CreateRegionRequest request = CreateRegionRequest .builder ()
1171- .regionName ("I_" + schemaId + "_" + definition .getName () + "_part_"
1172- + partition .getId ().getEntityId ())
1173- .regionType (definition .getIndexParameter ().getIndexType () == IndexType .INDEX_TYPE_SCALAR
1174- ? RegionType .STORE_REGION : RegionType .INDEX_REGION )
1175- .replicaNum (tableDefinition .getReplica ())
1176- .range (partition .getRange ())
1177- .rawEngine (RawEngine .RAW_ENG_ROCKSDB )
1178- .storeEngine (definition .getStoreEngine ())
1179- .schemaId (schemaId )
1180- .tableId (tableId .getEntityId ())
1181- .partId (partition .getId ().getEntityId ())
1182- .tenantId (withId .getTenantId ())
1183- .indexId (withId .getTableId ().getEntityId ())
1184- .indexParameter (indexParameter )
1116+ for (int i = 0 ; i < indexes .size (); i ++) {
1117+ int finalI = i ;
1118+ TableDefinitionWithId indexDefinitionWithId = indexes .get (i );
1119+ List <DingoCommonId > indexPartIds = coordinatorService .createIds (
1120+ tso (), CreateIdsRequest .builder ()
1121+ .idEpochType (IdEpochType .ID_NEXT_TABLE )
1122+ .count (indexDefinitionWithId .getTableDefinition ()
1123+ .getTablePartition ().getPartitions ().size ())
1124+ .build ()
1125+ ).getIds ().stream ()
1126+ .map (id -> DingoCommonId .builder ()
1127+ .entityType (EntityType .ENTITY_TYPE_PART )
1128+ .parentEntityId (indexIds .get (finalI ).getEntityId ())
1129+ .entityId (id )
1130+ .build ())
1131+ .collect (Collectors .toList ());
1132+ TableIdWithPartIds indexIdWithPartIds = TableIdWithPartIds .builder ()
1133+ .tableId (indexIds .get (i ))
1134+ .partIds (indexPartIds )
11851135 .build ();
1186- try {
1187- LogUtils .info (log , "create region, range:{}" , partition .getRange ());
1188- coordinatorService .createRegion (tso (), request );
1189- } catch (Exception e ) {
1190- LogUtils .error (log , "create region error,schemaId:{},regionId:{}" ,
1191- schemaId , partition .getRange (), e );
1192- throw e ;
1136+ resetTableId (indexIdWithPartIds , indexDefinitionWithId );
1137+ infoSchemaService .createIndex (
1138+ schemaId ,
1139+ tableEntityId ,
1140+ indexDefinitionWithId
1141+ );
1142+ }
1143+ for (TableDefinitionWithId withId : indexes ) {
1144+ io .dingodb .sdk .service .entity .meta .TableDefinition definition = withId .getTableDefinition ();
1145+ for (Partition partition : definition .getTablePartition ().getPartitions ()) {
1146+ IndexParameter indexParameter = definition .getIndexParameter ();
1147+ if (indexParameter .getVectorIndexParameter () != null ) {
1148+ indexParameter .setIndexType (IndexType .INDEX_TYPE_VECTOR );
1149+ } else if (indexParameter .getDocumentIndexParameter () != null ) {
1150+ indexParameter .setIndexType (IndexType .INDEX_TYPE_DOCUMENT );
1151+ }
1152+ CreateRegionRequest request = CreateRegionRequest .builder ()
1153+ .regionName ("I_" + schemaId + "_" + definition .getName () + "_part_"
1154+ + partition .getId ().getEntityId ())
1155+ .regionType (definition .getIndexParameter ().getIndexType () == IndexType .INDEX_TYPE_SCALAR
1156+ ? RegionType .STORE_REGION : RegionType .INDEX_REGION )
1157+ .replicaNum (tableDefinition .getReplica ())
1158+ .range (partition .getRange ())
1159+ .rawEngine (RawEngine .RAW_ENG_ROCKSDB )
1160+ .storeEngine (definition .getStoreEngine ())
1161+ .schemaId (schemaId )
1162+ .tableId (tableId .getEntityId ())
1163+ .partId (partition .getId ().getEntityId ())
1164+ .tenantId (withId .getTenantId ())
1165+ .indexId (withId .getTableId ().getEntityId ())
1166+ .indexParameter (indexParameter )
1167+ .build ();
1168+ try {
1169+ LogUtils .info (log , "create region, range:{}" , partition .getRange ());
1170+ coordinatorService .createRegion (tso (), request );
1171+ } catch (Exception e ) {
1172+ LogUtils .error (log , "create region error,schemaId:{},regionId:{}" ,
1173+ schemaId , partition .getRange (), e );
1174+ throw e ;
1175+ }
11931176 }
11941177 }
11951178 }
1179+
1180+ TableDefinitionWithId originTable = Optional .mapOrGet (
1181+ infoSchemaService .getTable (schemaId , originTableId .getEntityId ()), __ -> (TableDefinitionWithId ) __ , () -> null );
1182+
1183+ List <Object > originIndexList = infoSchemaService .listIndex (schemaId , originTable .getTableId ().getEntityId ());
1184+ boolean autoInc = originTable .getTableDefinition ().getColumns ().stream ()
1185+ .anyMatch (io .dingodb .sdk .service .entity .meta .ColumnDefinition ::isAutoIncrement );
1186+
1187+ long ts = TsoService .getDefault ().tso ();
1188+ dropRegionByTable (MAPPER .idFrom (originTableId ), jobId , ts , autoInc );
1189+
1190+ for (Object indexObj : originIndexList ) {
1191+ TableDefinitionWithId originIndex = (TableDefinitionWithId ) indexObj ;
1192+ dropRegionByTable (MAPPER .idFrom (originIndex .getTableId ()), jobId , ts );
1193+ }
1194+ originTable .getTableDefinition ()
1195+ .setSchemaState (io .dingodb .sdk .service .entity .common .SchemaState .SCHEMA_DELETE_ONLY );
1196+ List <DingoCommonId > oldIds = new ArrayList <>();
1197+ oldIds .add (originTableId );
1198+ oldIds .forEach (id -> infoSchemaService .updateTable (id .getParentEntityId (), originTable ));
11961199 return tableEntityId ;
11971200 }
11981201
0 commit comments