diff --git a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java index 08d51d6bc9074..38e330b79c367 100644 --- a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java +++ b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java @@ -54,7 +54,7 @@ public Collection getRows(final ShardingSphereDatabase Optional singleRule = database.getRuleMetaData().findSingleRule(SingleRule.class); if (singleRule.isPresent()) { for (String each : singleRule.get().getLogicTableMapper().getTableNames()) { - actualDataNodes.remove(each); + actualDataNodes.remove(each.toLowerCase()); } } actualDataNodes.forEach((key, value) -> result.add(new LocalDataQueryResultRow(key, value.iterator().next().getDataSourceName()))); diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java index 3c82b114ab9ec..08c0ac5d978de 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java @@ -22,8 +22,11 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; +import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; +import org.apache.shardingsphere.infra.util.json.JsonUtils; import java.util.Arrays; import java.util.Collection; @@ -37,29 +40,31 @@ public final class ShowTableMetaDataExecutor implements DatabaseRequiredQueryabl @Override public Collection getColumnNames() { - return Arrays.asList("database_name", "table_name", "type", "name"); + return Arrays.asList("database_name", "table_name", "type", "name", "value"); } @Override public Collection getRows(final ShardingSphereDatabase database, final ShowTableMetaDataStatement sqlStatement) { String defaultSchema = new DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName()); ShardingSphereSchema schema = database.getSchema(defaultSchema); - return schema.getAllTableNames().stream().filter(each -> sqlStatement.getTableNames().contains(each)) - .map(each -> buildTableRows(database.getName(), schema, each)).flatMap(Collection::stream).collect(Collectors.toList()); + return sqlStatement.getTableNames().stream().filter(each -> schema.getAllTableNames().contains(each.toLowerCase())) + .map(each -> buildTableRows(database.getName(), schema, each.toLowerCase())).flatMap(Collection::stream).collect(Collectors.toList()); } private Collection buildTableRows(final String databaseName, final ShardingSphereSchema schema, final String tableName) { Collection result = new LinkedList<>(); - Collection columnRows = schema.getAllColumnNames(tableName).stream().map(each -> buildRow(databaseName, tableName, "COLUMN", each)).collect(Collectors.toList()); - Collection indexRows = schema.getTable(tableName).getIndexValues().stream().map(ShardingSphereIndex::getName) - .map(each -> buildRow(databaseName, tableName, "INDEX", each)).collect(Collectors.toList()); - result.addAll(columnRows); - result.addAll(indexRows); + ShardingSphereTable table = schema.getTable(tableName); + result.addAll(table.getColumnValues().stream().map(each -> buildColumnRow(databaseName, tableName, each)).collect(Collectors.toList())); + result.addAll(table.getIndexValues().stream().map(each -> buildIndexRow(databaseName, tableName, each)).collect(Collectors.toList())); return result; } - private LocalDataQueryResultRow buildRow(final String databaseName, final String tableName, final String type, final String name) { - return new LocalDataQueryResultRow(databaseName, tableName, type, name); + private LocalDataQueryResultRow buildColumnRow(final String databaseName, final String tableName, final ShardingSphereColumn column) { + return new LocalDataQueryResultRow(databaseName, tableName, "COLUMN", column.getName(), JsonUtils.toJsonString(column)); + } + + private LocalDataQueryResultRow buildIndexRow(final String databaseName, final String tableName, final ShardingSphereIndex index) { + return new LocalDataQueryResultRow(databaseName, tableName, "INDEX", index.getName(), JsonUtils.toJsonString(index)); } @Override diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java index 60ff4d6670882..1638f08f726f1 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java @@ -54,12 +54,13 @@ class ShowTableMetaDataExecutorTest { void assertGetColumnNames() { ShowTableMetaDataExecutor executor = new ShowTableMetaDataExecutor(); Collection columns = executor.getColumnNames(); - assertThat(columns.size(), is(4)); + assertThat(columns.size(), is(5)); Iterator iterator = columns.iterator(); assertThat(iterator.next(), is("database_name")); assertThat(iterator.next(), is("table_name")); assertThat(iterator.next(), is("type")); assertThat(iterator.next(), is("name")); + assertThat(iterator.next(), is("value")); } @Test @@ -73,11 +74,14 @@ void assertExecute() { assertThat(row.getCell(2), is("t_order")); assertThat(row.getCell(3), is("COLUMN")); assertThat(row.getCell(4), is("order_id")); + assertThat(row.getCell(5), + is("{\"name\":\"order_id\",\"dataType\":0,\"primaryKey\":false,\"generated\":false,\"caseSensitive\":false,\"visible\":true,\"unsigned\":false,\"nullable\":false}")); row = iterator.next(); assertThat(row.getCell(1), is("foo_db")); assertThat(row.getCell(2), is("t_order")); assertThat(row.getCell(3), is("INDEX")); assertThat(row.getCell(4), is("primary")); + assertThat(row.getCell(5), is("{\"name\":\"primary\",\"columns\":[],\"unique\":false}")); } private ShardingSphereDatabase mockDatabase() {