1818package org .apache .shardingsphere .mcp .metadata .query ;
1919
2020import lombok .RequiredArgsConstructor ;
21+ import org .apache .shardingsphere .infra .exception .ShardingSpherePreconditions ;
2122import org .apache .shardingsphere .mcp .capability .database .MCPDatabaseCapability ;
2223import org .apache .shardingsphere .mcp .capability .database .MCPDatabaseCapabilityProvider ;
2324import org .apache .shardingsphere .mcp .metadata .model .MCPDatabaseMetadataCatalog ;
3637import java .util .LinkedList ;
3738import java .util .List ;
3839import java .util .Optional ;
39- import java .util .Set ;
4040import java .util .stream .Collectors ;
4141
4242/**
@@ -121,7 +121,7 @@ public Optional<MCPTableMetadata> queryTable(final String databaseName, final St
121121 if (!isSupportedMetadataObjectType (databaseName , MetadataObjectType .TABLE )) {
122122 return Optional .empty ();
123123 }
124- return findTable (databaseName , schemaName , tableName ).map (this :: createTableDetail );
124+ return findTable (databaseName , schemaName , tableName ).map (MCPTableMetadata :: createDetail );
125125 }
126126
127127 /**
@@ -150,7 +150,7 @@ public Optional<MCPViewMetadata> queryView(final String databaseName, final Stri
150150 if (!isSupportedMetadataObjectType (databaseName , MetadataObjectType .VIEW )) {
151151 return Optional .empty ();
152152 }
153- return findView (databaseName , schemaName , viewName ).map (this :: createViewDetail );
153+ return findView (databaseName , schemaName , viewName ).map (MCPViewMetadata :: createDetail );
154154 }
155155
156156 /**
@@ -168,6 +168,12 @@ public List<MCPColumnMetadata> queryTableColumns(final String databaseName, fina
168168 return findTable (databaseName , schemaName , tableName ).map (optional -> sortColumns (optional .getColumns ())).orElse (Collections .emptyList ());
169169 }
170170
171+ private List <MCPColumnMetadata > sortColumns (final Collection <MCPColumnMetadata > columns ) {
172+ List <MCPColumnMetadata > result = new LinkedList <>(columns );
173+ result .sort (Comparator .comparing (MCPColumnMetadata ::getColumn ));
174+ return result ;
175+ }
176+
171177 /**
172178 * Query table column.
173179 *
@@ -224,10 +230,17 @@ public Optional<MCPColumnMetadata> queryViewColumn(final String databaseName, fi
224230 * @return index metadata
225231 */
226232 public List <MCPIndexMetadata > queryIndexes (final String databaseName , final String schemaName , final String tableName ) {
227- checkIndexSupported (databaseName );
233+ ShardingSpherePreconditions .checkState (isSupportedMetadataObjectType (databaseName , MetadataObjectType .INDEX ),
234+ () -> new MCPUnsupportedException ("Index resources are not supported for the current database." ));
228235 return findTable (databaseName , schemaName , tableName ).map (optional -> sortIndexes (optional .getIndexes ())).orElse (Collections .emptyList ());
229236 }
230237
238+ private List <MCPIndexMetadata > sortIndexes (final Collection <MCPIndexMetadata > indexes ) {
239+ List <MCPIndexMetadata > result = new LinkedList <>(indexes );
240+ result .sort (Comparator .comparing (MCPIndexMetadata ::getIndex ));
241+ return result ;
242+ }
243+
231244 /**
232245 * Query index.
233246 *
@@ -238,7 +251,8 @@ public List<MCPIndexMetadata> queryIndexes(final String databaseName, final Stri
238251 * @return index metadata
239252 */
240253 public Optional <MCPIndexMetadata > queryIndex (final String databaseName , final String schemaName , final String tableName , final String indexName ) {
241- checkIndexSupported (databaseName );
254+ ShardingSpherePreconditions .checkState (isSupportedMetadataObjectType (databaseName , MetadataObjectType .INDEX ),
255+ () -> new MCPUnsupportedException ("Index resources are not supported for the current database." ));
242256 return findIndex (queryIndexes (databaseName , schemaName , tableName ), indexName );
243257 }
244258
@@ -247,10 +261,11 @@ public Optional<MCPIndexMetadata> queryIndex(final String databaseName, final St
247261 *
248262 * @param databaseName database name
249263 * @param objectType metadata object type
250- * @return whether supported or not
264+ * @return supported or not
251265 */
252266 public boolean isSupportedMetadataObjectType (final String databaseName , final MetadataObjectType objectType ) {
253- return getSupportedMetadataObjectTypes (databaseName ).contains (objectType );
267+ Optional <MCPDatabaseCapability > databaseCapability = new MCPDatabaseCapabilityProvider (metadataCatalog ).provide (databaseName );
268+ return databaseCapability .isPresent () && databaseCapability .get ().getSupportedMetadataObjectTypes ().contains (objectType );
254269 }
255270
256271 private Optional <MCPSchemaMetadata > findSchema (final String databaseName , final String schemaName ) {
@@ -309,36 +324,4 @@ private Optional<MCPIndexMetadata> findIndex(final Collection<MCPIndexMetadata>
309324 }
310325 return Optional .empty ();
311326 }
312-
313- private MCPTableMetadata createTableDetail (final MCPTableMetadata tableMetadata ) {
314- return new MCPTableMetadata (tableMetadata .getDatabase (), tableMetadata .getSchema (), tableMetadata .getTable (),
315- sortColumns (tableMetadata .getColumns ()), sortIndexes (tableMetadata .getIndexes ()));
316- }
317-
318- private MCPViewMetadata createViewDetail (final MCPViewMetadata viewMetadata ) {
319- return new MCPViewMetadata (viewMetadata .getDatabase (), viewMetadata .getSchema (), viewMetadata .getView (), sortColumns (viewMetadata .getColumns ()));
320- }
321-
322- private List <MCPColumnMetadata > sortColumns (final Collection <MCPColumnMetadata > columns ) {
323- List <MCPColumnMetadata > result = new LinkedList <>(columns );
324- result .sort (Comparator .comparing (MCPColumnMetadata ::getColumn ));
325- return result ;
326- }
327-
328- private List <MCPIndexMetadata > sortIndexes (final Collection <MCPIndexMetadata > indexes ) {
329- List <MCPIndexMetadata > result = new LinkedList <>(indexes );
330- result .sort (Comparator .comparing (MCPIndexMetadata ::getIndex ));
331- return result ;
332- }
333-
334- private void checkIndexSupported (final String databaseName ) {
335- if (!isSupportedMetadataObjectType (databaseName , MetadataObjectType .INDEX )) {
336- throw new MCPUnsupportedException ("Index resources are not supported for the current database." );
337- }
338- }
339-
340- private Set <MetadataObjectType > getSupportedMetadataObjectTypes (final String databaseName ) {
341- Optional <MCPDatabaseCapability > databaseCapability = new MCPDatabaseCapabilityProvider (metadataCatalog ).provide (databaseName );
342- return databaseCapability .isPresent () ? databaseCapability .get ().getSupportedMetadataObjectTypes () : Collections .emptySet ();
343- }
344327}
0 commit comments