This is an automated email from the ASF dual-hosted git repository.
jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new b2247623f0b Table metadata support collecting table type (#29953)
b2247623f0b is described below
commit b2247623f0b1af748af652889148808e84b41fe0
Author: ChenJiaHao <[email protected]>
AuthorDate: Fri Feb 2 10:45:48 2024 +0800
Table metadata support collecting table type (#29953)
* Table metadata support collecting table type
* Fix comments
* Refactor get table type from MySQL
---
.../schema/builder/GenericSchemaBuilder.java | 2 +-
.../schema/model/ShardingSphereSchema.java | 4 ++--
.../database/schema/model/ShardingSphereTable.java | 21 ++++++++++++----
.../reviser/table/TableMetaDataReviseEngine.java | 2 +-
.../yaml/schema/pojo/YamlShardingSphereTable.java | 3 +++
.../yaml/schema/swapper/YamlTableSwapper.java | 4 +++-
.../index/AlterIndexStatementSchemaRefresher.java | 2 +-
.../index/CreateIndexStatementSchemaRefresher.java | 2 +-
.../index/DropIndexStatementSchemaRefresher.java | 2 +-
.../data/loader/DialectMetaDataLoader.java | 15 ++++++++++++
.../core/metadata/data/model/TableMetaData.java | 11 +++++++++
.../enums/TableType.java} | 26 ++++----------------
.../metadata/data/loader/MySQLMetaDataLoader.java | 28 +++++++++++++++++++++-
.../schema/TableMetaDataPersistServiceTest.java | 2 +-
.../context/ConfigurationContextManager.java | 3 +--
.../handler/admin/executor/ShowTablesExecutor.java | 11 ++++-----
16 files changed, 94 insertions(+), 44 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index 856e1c69773..d6b94bb29ea 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -132,7 +132,7 @@ public final class GenericSchemaBuilder {
Collection<ShardingSphereColumn> columns =
convertToColumns(each.getColumns());
Collection<ShardingSphereIndex> indexes =
convertToIndexes(each.getIndexes());
Collection<ShardingSphereConstraint> constraints =
convertToConstraints(each.getConstraints());
- result.put(each.getName(), new ShardingSphereTable(each.getName(),
columns, indexes, constraints));
+ result.put(each.getName(), new ShardingSphereTable(each.getName(),
columns, indexes, constraints, each.getType()));
}
return result;
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
index 572dbb806e2..10bdac8ac12 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchema.java
@@ -69,7 +69,7 @@ public final class ShardingSphereSchema {
/**
* Get table meta data via table name.
- *
+ *
* @param tableName tableName table name
* @return table meta data
*/
@@ -89,7 +89,7 @@ public final class ShardingSphereSchema {
/**
* Add table.
- *
+ *
* @param tableName table name
* @param table table
*/
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
index 7647c346083..a7e37fdac86 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereTable.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.infra.metadata.database.schema.model;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
+import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
import java.util.ArrayList;
import java.util.Collection;
@@ -50,8 +51,10 @@ public final class ShardingSphereTable {
private final List<String> primaryKeyColumns = new ArrayList<>();
+ private final TableType type;
+
public ShardingSphereTable() {
- this("", Collections.emptyList(), Collections.emptyList(),
Collections.emptyList());
+ this("", Collections.emptyList(), Collections.emptyList(),
Collections.emptyList(), TableType.TABLE);
}
public ShardingSphereTable(final String name, final
Collection<ShardingSphereColumn> columns,
@@ -60,6 +63,16 @@ public final class ShardingSphereTable {
this.columns = createColumns(columns);
this.indexes = createIndexes(indexes);
this.constraints = createConstraints(constraints);
+ this.type = TableType.TABLE;
+ }
+
+ public ShardingSphereTable(final String name, final
Collection<ShardingSphereColumn> columns,
+ final Collection<ShardingSphereIndex> indexes,
final Collection<ShardingSphereConstraint> constraints, final TableType type) {
+ this.name = name;
+ this.columns = createColumns(columns);
+ this.indexes = createIndexes(indexes);
+ this.constraints = createConstraints(constraints);
+ this.type = type;
}
private Map<String, ShardingSphereColumn> createColumns(final
Collection<ShardingSphereColumn> columns) {
@@ -96,7 +109,7 @@ public final class ShardingSphereTable {
/**
* Put column meta data.
- *
+ *
* @param column column meta data
*/
public void putColumn(final ShardingSphereColumn column) {
@@ -134,7 +147,7 @@ public final class ShardingSphereTable {
/**
* Put index meta data.
- *
+ *
* @param index index meta data
*/
public void putIndex(final ShardingSphereIndex index) {
@@ -143,7 +156,7 @@ public final class ShardingSphereTable {
/**
* Remove index meta data via index name.
- *
+ *
* @param indexName index name
*/
public void removeIndex(final String indexName) {
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetaDataReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetaDataReviseEngine.java
index c493a5be197..f29c355b44b 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetaDataReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/table/TableMetaDataReviseEngine.java
@@ -56,6 +56,6 @@ public final class TableMetaDataReviseEngine<T extends
ShardingSphereRule> {
String revisedTableName = tableNameReviser.map(optional ->
optional.revise(originalMetaData.getName(),
rule)).orElse(originalMetaData.getName());
return new TableMetaData(revisedTableName, new
ColumnReviseEngine<>(rule, databaseType, dataSource,
reviseEntry).revise(originalMetaData.getName(), originalMetaData.getColumns()),
new IndexReviseEngine<>(rule,
reviseEntry).revise(originalMetaData.getName(), originalMetaData.getIndexes()),
- new ConstraintReviseEngine<>(rule,
reviseEntry).revise(originalMetaData.getName(),
originalMetaData.getConstraints()));
+ new ConstraintReviseEngine<>(rule,
reviseEntry).revise(originalMetaData.getName(),
originalMetaData.getConstraints()), originalMetaData.getType());
}
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/pojo/YamlShardingSphereTable.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/pojo/YamlShardingSphereTable.java
index 0d3c87d94f5..a7e81c8d87f 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/pojo/YamlShardingSphereTable.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/pojo/YamlShardingSphereTable.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.yaml.schema.pojo;
import lombok.Getter;
import lombok.Setter;
+import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
import org.apache.shardingsphere.infra.util.yaml.YamlConfiguration;
import java.util.Map;
@@ -37,4 +38,6 @@ public final class YamlShardingSphereTable implements
YamlConfiguration {
private Map<String, YamlShardingSphereIndex> indexes;
private Map<String, YamlShardingSphereConstraint> constraints;
+
+ private TableType type;
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/swapper/YamlTableSwapper.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/swapper/YamlTableSwapper.java
index c33cd661ffc..296dfc4849a 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/swapper/YamlTableSwapper.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/schema/swapper/YamlTableSwapper.java
@@ -45,12 +45,14 @@ public final class YamlTableSwapper implements
YamlConfigurationSwapper<YamlShar
result.setIndexes(swapYamlIndexes(table.getIndexValues()));
result.setConstraints(swapYamlConstraints(table.getConstraintValues()));
result.setName(table.getName());
+ result.setType(table.getType());
return result;
}
@Override
public ShardingSphereTable swapToObject(final YamlShardingSphereTable
yamlConfig) {
- return new ShardingSphereTable(yamlConfig.getName(),
swapColumns(yamlConfig.getColumns()), swapIndexes(yamlConfig.getIndexes()),
swapConstraints(yamlConfig.getConstraints()));
+ return new ShardingSphereTable(
+ yamlConfig.getName(), swapColumns(yamlConfig.getColumns()),
swapIndexes(yamlConfig.getIndexes()),
swapConstraints(yamlConfig.getConstraints()), yamlConfig.getType());
}
private Collection<ShardingSphereConstraint> swapConstraints(final
Map<String, YamlShardingSphereConstraint> constraints) {
diff --git
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/AlterIndexStatementSchemaRefresher.java
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/AlterIndexStatementSchemaRefresher.java
index 61a005dd202..f5f62431862 100644
---
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/AlterIndexStatementSchemaRefresher.java
+++
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/AlterIndexStatementSchemaRefresher.java
@@ -67,7 +67,7 @@ public final class AlterIndexStatementSchemaRefresher
implements MetaDataRefresh
}
private ShardingSphereTable newShardingSphereTable(final
ShardingSphereTable table) {
- ShardingSphereTable result = new ShardingSphereTable(table.getName(),
table.getColumnValues(), table.getIndexValues(), table.getConstraintValues());
+ ShardingSphereTable result = new ShardingSphereTable(table.getName(),
table.getColumnValues(), table.getIndexValues(), table.getConstraintValues(),
table.getType());
result.getColumnNames().addAll(table.getColumnNames());
result.getVisibleColumns().addAll(table.getVisibleColumns());
result.getPrimaryKeyColumns().addAll(table.getPrimaryKeyColumns());
diff --git
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/CreateIndexStatementSchemaRefresher.java
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/CreateIndexStatementSchemaRefresher.java
index 6f9d013af3b..4c720d88e1e 100644
---
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/CreateIndexStatementSchemaRefresher.java
+++
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/CreateIndexStatementSchemaRefresher.java
@@ -54,7 +54,7 @@ public final class CreateIndexStatementSchemaRefresher
implements MetaDataRefres
}
private ShardingSphereTable newShardingSphereTable(final
ShardingSphereTable table) {
- ShardingSphereTable result = new ShardingSphereTable(table.getName(),
table.getColumnValues(), table.getIndexValues(), table.getConstraintValues());
+ ShardingSphereTable result = new ShardingSphereTable(table.getName(),
table.getColumnValues(), table.getIndexValues(), table.getConstraintValues(),
table.getType());
result.getColumnNames().addAll(table.getColumnNames());
result.getVisibleColumns().addAll(table.getVisibleColumns());
result.getPrimaryKeyColumns().addAll(table.getPrimaryKeyColumns());
diff --git
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/DropIndexStatementSchemaRefresher.java
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/DropIndexStatementSchemaRefresher.java
index 0068d5fd0ba..8c91b428a93 100644
---
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/DropIndexStatementSchemaRefresher.java
+++
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/type/index/DropIndexStatementSchemaRefresher.java
@@ -67,7 +67,7 @@ public final class DropIndexStatementSchemaRefresher
implements MetaDataRefreshe
}
private ShardingSphereTable newShardingSphereTable(final
ShardingSphereTable table) {
- ShardingSphereTable result = new ShardingSphereTable(table.getName(),
table.getColumnValues(), table.getIndexValues(), table.getConstraintValues());
+ ShardingSphereTable result = new ShardingSphereTable(table.getName(),
table.getColumnValues(), table.getIndexValues(), table.getConstraintValues(),
table.getType());
result.getColumnNames().addAll(table.getColumnNames());
result.getVisibleColumns().addAll(table.getVisibleColumns());
result.getPrimaryKeyColumns().addAll(table.getPrimaryKeyColumns());
diff --git
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/DialectMetaDataLoader.java
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/DialectMetaDataLoader.java
index 7dcf98736c9..b9468548f61 100644
---
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/DialectMetaDataLoader.java
+++
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/DialectMetaDataLoader.java
@@ -17,7 +17,9 @@
package org.apache.shardingsphere.infra.database.core.metadata.data.loader;
+import com.google.common.base.Strings;
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
+import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI;
import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
@@ -38,4 +40,17 @@ public interface DialectMetaDataLoader extends
DatabaseTypedSPI {
* @throws SQLException SQL exception
*/
Collection<SchemaMetaData> load(MetaDataLoaderMaterial material) throws
SQLException;
+
+ /**
+ * get table type from string value.
+ *
+ * @param type table type string value
+ * @return table type
+ */
+ default TableType getTableType(final String type) {
+ if (Strings.isNullOrEmpty(type)) {
+ return TableType.TABLE;
+ }
+ return type.contains("VIEW") || type.contains("view") ? TableType.VIEW
: TableType.TABLE;
+ }
}
diff --git
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
index 7c53b381fba..dce19794d9b 100644
---
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
+++
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
@@ -21,6 +21,7 @@ import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
+import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
import java.util.Collection;
@@ -40,4 +41,14 @@ public final class TableMetaData {
private final Collection<IndexMetaData> indexes;
private final Collection<ConstraintMetaData> constraints;
+
+ private final TableType type;
+
+ public TableMetaData(final String name, final Collection<ColumnMetaData>
columns, final Collection<IndexMetaData> indexes, final
Collection<ConstraintMetaData> constraints) {
+ this.name = name;
+ this.type = TableType.TABLE;
+ this.columns = columns;
+ this.indexes = indexes;
+ this.constraints = constraints;
+ }
}
diff --git
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/enums/TableType.java
similarity index 63%
copy from
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
copy to
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/enums/TableType.java
index 7c53b381fba..cae83fff645 100644
---
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/model/TableMetaData.java
+++
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/enums/TableType.java
@@ -15,29 +15,11 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.database.core.metadata.data.model;
-
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.ToString;
-
-import java.util.Collection;
+package org.apache.shardingsphere.infra.database.core.metadata.database.enums;
/**
- * Table meta data.
+ * Table type.
*/
-@RequiredArgsConstructor
-@Getter
-@EqualsAndHashCode
-@ToString
-public final class TableMetaData {
-
- private final String name;
-
- private final Collection<ColumnMetaData> columns;
-
- private final Collection<IndexMetaData> indexes;
-
- private final Collection<ConstraintMetaData> constraints;
+public enum TableType {
+ TABLE, VIEW
}
diff --git
a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLMetaDataLoader.java
b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLMetaDataLoader.java
index c070f0bf213..3f9e0cff2f4 100644
---
a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLMetaDataLoader.java
+++
b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/data/loader/MySQLMetaDataLoader.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.database.core.metadata.data.model.IndexMe
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData;
import
org.apache.shardingsphere.infra.database.core.metadata.database.datatype.DataTypeLoader;
+import
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -62,21 +63,46 @@ public final class MySQLMetaDataLoader implements
DialectMetaDataLoader {
private static final String CONSTRAINT_META_DATA_SQL = "SELECT
CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME FROM
information_schema.KEY_COLUMN_USAGE "
+ "WHERE TABLE_NAME IN (%s) AND REFERENCED_TABLE_SCHEMA IS NOT
NULL";
+ private static final String VIEW_META_DATA_SQL = "SELECT TABLE_NAME FROM
information_schema.VIEWS WHERE TABLE_SCHEMA=? AND TABLE_SCHEMA IN (%s)";
+
@Override
public Collection<SchemaMetaData> load(final MetaDataLoaderMaterial
material) throws SQLException {
Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
Map<String, Collection<ColumnMetaData>> columnMetaDataMap =
loadColumnMetaDataMap(material.getDataSource(), material.getActualTableNames());
+ Collection<String> viewNames = loadViewNames(material.getDataSource(),
columnMetaDataMap.keySet());
Map<String, Collection<IndexMetaData>> indexMetaDataMap =
columnMetaDataMap.isEmpty() ? Collections.emptyMap() :
loadIndexMetaData(material.getDataSource(), columnMetaDataMap.keySet());
Map<String, Collection<ConstraintMetaData>> constraintMetaDataMap =
columnMetaDataMap.isEmpty() ? Collections.emptyMap() :
loadConstraintMetaDataMap(material.getDataSource(), columnMetaDataMap.keySet());
for (Entry<String, Collection<ColumnMetaData>> entry :
columnMetaDataMap.entrySet()) {
Collection<IndexMetaData> indexMetaDataList =
indexMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList());
Collection<ConstraintMetaData> constraintMetaDataList =
constraintMetaDataMap.getOrDefault(entry.getKey(), Collections.emptyList());
- tableMetaDataList.add(new TableMetaData(entry.getKey(),
entry.getValue(), indexMetaDataList, constraintMetaDataList));
+ tableMetaDataList.add(
+ new TableMetaData(entry.getKey(), entry.getValue(),
indexMetaDataList, constraintMetaDataList, viewNames.contains(entry.getKey()) ?
TableType.VIEW : TableType.TABLE));
}
return Collections.singletonList(new
SchemaMetaData(material.getDefaultSchemaName(), tableMetaDataList));
}
+ private Collection<String> loadViewNames(final DataSource dataSource,
final Collection<String> tableNames) throws SQLException {
+ Collection<String> result = new LinkedList<>();
+ try (
+ Connection connection = dataSource.getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(getViewMetaDataSQL(tableNames))) {
+ String databaseName = "".equals(connection.getCatalog()) ?
GlobalDataSourceRegistry.getInstance().getCachedDatabaseTables().get(tableNames.iterator().next())
: connection.getCatalog();
+ preparedStatement.setString(1, databaseName);
+ try (ResultSet resultSet = preparedStatement.executeQuery()) {
+ while (resultSet.next()) {
+ String tableName = resultSet.getString(1);
+ result.add(tableName);
+ }
+ }
+ }
+ return result;
+ }
+
+ private String getViewMetaDataSQL(final Collection<String> tableNames) {
+ return String.format(VIEW_META_DATA_SQL, tableNames.stream().map(each
-> String.format("'%s'", each)).collect(Collectors.joining(",")));
+ }
+
private Map<String, Collection<ConstraintMetaData>>
loadConstraintMetaDataMap(final DataSource dataSource, final Collection<String>
tables) throws SQLException {
Map<String, Collection<ConstraintMetaData>> result = new
LinkedHashMap<>();
try (
diff --git
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistServiceTest.java
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistServiceTest.java
index 401fe57cdfb..fd1c5d75ddf 100644
---
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistServiceTest.java
+++
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/schema/TableMetaDataPersistServiceTest.java
@@ -48,7 +48,7 @@ class TableMetaDataPersistServiceTest {
void assertPersist() {
ShardingSphereTable table = new ShardingSphereTable("foo_table",
Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
new TableMetaDataPersistService(repository).persist("foo_db",
"foo_schema", Collections.singletonMap("foo_table", table));
-
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables/foo_table",
"name: foo_table" + System.lineSeparator());
+
verify(repository).persist("/metadata/foo_db/schemas/foo_schema/tables/foo_table",
"name: foo_table" + System.lineSeparator() + "type: TABLE" +
System.lineSeparator());
}
@Test
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index be507c10ec7..84e98252063 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -396,8 +396,7 @@ public final class ConfigurationContextManager {
private Map<String, ShardingSphereSchema> newShardingSphereSchemas(final
ShardingSphereDatabase database) {
Map<String, ShardingSphereSchema> result = new
LinkedHashMap<>(database.getSchemas().size(), 1F);
- database.getSchemas().forEach((key, value) -> result.put(key, new
ShardingSphereSchema(value.getTables(),
-
metaDataContexts.get().getPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load(database.getName(),
key))));
+ database.getSchemas().forEach((key, value) -> result.put(key, new
ShardingSphereSchema(value.getTables(), value.getViews())));
return result;
}
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
index 00e33cf4f10..4b26f0b361f 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
@@ -87,22 +87,21 @@ public final class ShowTablesExecutor implements
DatabaseAdminQueryExecutor {
}
List<MemoryQueryResultDataRow> rows =
getAllTableNames(databaseName).stream().map(each -> {
List<Object> rowValues = new LinkedList<>();
- rowValues.add(each);
+ rowValues.add(each.getName());
if (showTablesStatement.isContainsFull()) {
- rowValues.add(TABLE_TYPE);
+ rowValues.add(each.getType());
}
return new MemoryQueryResultDataRow(rowValues);
}).collect(Collectors.toList());
return new RawMemoryQueryResult(queryResultMetaData, rows);
}
- private Collection<String> getAllTableNames(final String databaseName) {
- Collection<String> result = ProxyContext.getInstance()
-
.getDatabase(databaseName).getSchema(databaseName).getTables().values().stream().map(ShardingSphereTable::getName).collect(Collectors.toList());
+ private Collection<ShardingSphereTable> getAllTableNames(final String
databaseName) {
+ Collection<ShardingSphereTable> result =
ProxyContext.getInstance().getDatabase(databaseName).getSchema(databaseName).getTables().values();
if (!showTablesStatement.getFilter().isPresent()) {
return result;
}
Optional<String> pattern =
showTablesStatement.getFilter().get().getLike().map(optional ->
SQLUtils.convertLikePatternToRegex(optional.getPattern()));
- return pattern.isPresent() ? result.stream().filter(each ->
Pattern.compile(pattern.get(),
Pattern.CASE_INSENSITIVE).matcher(each).matches()).collect(Collectors.toList())
: result;
+ return pattern.isPresent() ? result.stream().filter(each ->
Pattern.compile(pattern.get(),
Pattern.CASE_INSENSITIVE).matcher(each.getName()).matches()).collect(Collectors.toList())
: result;
}
}