Skip to content

Commit d9c119e

Browse files
committed
Refactor MetadataQueryService
1 parent 25a8725 commit d9c119e

File tree

3 files changed

+46
-39
lines changed

3 files changed

+46
-39
lines changed

mcp/core/src/main/java/org/apache/shardingsphere/mcp/metadata/model/MCPTableMetadata.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import lombok.RequiredArgsConstructor;
2222

2323
import java.util.Collections;
24+
import java.util.Comparator;
2425
import java.util.List;
26+
import java.util.stream.Collectors;
2527

2628
/**
2729
* MCP table metadata.
@@ -48,4 +50,15 @@ public final class MCPTableMetadata {
4850
public MCPTableMetadata createSummary() {
4951
return new MCPTableMetadata(database, schema, table, Collections.emptyList(), Collections.emptyList());
5052
}
53+
54+
/**
55+
* Create detail.
56+
*
57+
* @return table metadata detail
58+
*/
59+
public MCPTableMetadata createDetail() {
60+
return new MCPTableMetadata(database, schema, table,
61+
columns.stream().sorted(Comparator.comparing(MCPColumnMetadata::getColumn)).collect(Collectors.toList()),
62+
indexes.stream().sorted(Comparator.comparing(MCPIndexMetadata::getIndex)).collect(Collectors.toList()));
63+
}
5164
}

mcp/core/src/main/java/org/apache/shardingsphere/mcp/metadata/model/MCPViewMetadata.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import lombok.RequiredArgsConstructor;
2222

2323
import java.util.Collections;
24+
import java.util.Comparator;
2425
import java.util.List;
26+
import java.util.stream.Collectors;
2527

2628
/**
2729
* MCP view metadata.
@@ -46,4 +48,13 @@ public final class MCPViewMetadata {
4648
public MCPViewMetadata createSummary() {
4749
return new MCPViewMetadata(database, schema, view, Collections.emptyList());
4850
}
51+
52+
/**
53+
* Create detail.
54+
*
55+
* @return view metadata summary
56+
*/
57+
public MCPViewMetadata createDetail() {
58+
return new MCPViewMetadata(database, schema, view, columns.stream().sorted(Comparator.comparing(MCPColumnMetadata::getColumn)).collect(Collectors.toList()));
59+
}
4960
}

mcp/core/src/main/java/org/apache/shardingsphere/mcp/metadata/query/MetadataQueryService.java

Lines changed: 22 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.shardingsphere.mcp.metadata.query;
1919

2020
import lombok.RequiredArgsConstructor;
21+
import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
2122
import org.apache.shardingsphere.mcp.capability.database.MCPDatabaseCapability;
2223
import org.apache.shardingsphere.mcp.capability.database.MCPDatabaseCapabilityProvider;
2324
import org.apache.shardingsphere.mcp.metadata.model.MCPDatabaseMetadataCatalog;
@@ -36,7 +37,6 @@
3637
import java.util.LinkedList;
3738
import java.util.List;
3839
import java.util.Optional;
39-
import java.util.Set;
4040
import 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

Comments
 (0)