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;
     }
 }

Reply via email to