This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 669d9a08241 Add DialectSchemaOption (#35186)
669d9a08241 is described below

commit 669d9a08241450aad0388dfa753a5010d8727674
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Apr 13 22:11:34 2025 +0800

    Add DialectSchemaOption (#35186)
    
    * Add DialectSchemaOption
    
    * Add DialectSchemaOption
    
    * Add DialectSchemaOption
    
    * Add DialectSchemaOption
    
    * Add DialectSchemaOption
---
 .../data/ShardingTableStatisticsCollector.java     |  2 +-
 .../dml/from/type/SimpleTableSegmentBinder.java    |  2 +-
 .../shardingsphere/infra/datanode/DataNode.java    |  6 +--
 .../schema/builder/SystemSchemaBuilder.java        |  2 +-
 .../database/schema/util/SystemSchemaUtils.java    |  6 +--
 .../builder/ShardingSphereStatisticsFactory.java   |  2 +-
 .../data/loader/MetaDataLoaderConnection.java      |  2 +-
 .../data/loader/type/SchemaMetaDataLoader.java     |  4 +-
 .../database/metadata/DialectDatabaseMetaData.java | 38 +++--------------
 .../option/scehma/DefaultSchemaOption.java}        | 39 ++++++++++--------
 .../option/scehma/DialectSchemaOption.java}        | 48 +++++++++++-----------
 .../database/core/type/DatabaseTypeRegistry.java   |  2 +-
 .../fixture/TrunkDialectDatabaseMetaData.java      | 10 ++---
 .../metadata/database/HiveDatabaseMetaData.java    | 10 ++---
 .../database/OpenGaussDatabaseMetaData.java        | 13 ++----
 .../database/OpenGaussDatabaseMetaDataTest.java    |  4 +-
 .../metadata/database/OracleDatabaseMetaData.java  | 19 ++-------
 .../database/option/OracleSchemaOption.java}       | 32 ++++++++-------
 .../database/OracleDatabaseMetaDataTest.java       |  4 +-
 .../database/PostgreSQLDatabaseMetaData.java       | 13 ++----
 .../database/PostgreSQLDatabaseMetaDataTest.java   |  4 +-
 .../metadata/database/PrestoDatabaseMetaData.java  | 10 ++---
 .../database/SQLServerDatabaseMetaData.java        | 10 ++---
 .../rql/resource/ShowLogicalTablesExecutor.java    |  2 +-
 .../generator/generic/RemoveTokenGenerator.java    |  2 +-
 .../jdbc/adapter/AbstractStatementAdapter.java     |  2 +-
 .../core/connection/ShardingSphereConnection.java  |  2 +-
 .../core/importer/ImporterConfiguration.java       |  2 +-
 .../StandardPipelineTableMetaDataLoader.java       |  2 +-
 .../datasource/PipelineJobDataSourcePreparer.java  |  4 +-
 .../segment/PipelineSQLSegmentBuilder.java         |  2 +-
 .../pipeline/cdc/handler/CDCBackendHandler.java    |  2 +-
 .../pipeline/cdc/util/CDCSchemaTableUtils.java     |  6 +--
 .../migration/MigrationJobExecutorCallback.java    |  2 +-
 .../scenario/migration/api/MigrationJobAPI.java    |  2 +-
 .../SingleRuleConfigurationDecorator.java          |  2 +-
 .../single/util/SingleTableLoadUtils.java          |  6 +--
 .../handler/update/LoadSingleTableExecutor.java    |  2 +-
 .../database/DropDatabaseBackendHandler.java       |  3 +-
 .../backend/handler/tcl/TCLBackendHandler.java     |  8 ++--
 .../SelectInformationSchemataExecutorTest.java     |  2 +-
 .../pipeline/cases/PipelineContainerComposer.java  |  2 +-
 .../test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java |  4 +-
 .../pipeline/core/util/PipelineContextUtils.java   |  2 +-
 44 files changed, 153 insertions(+), 190 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingTableStatisticsCollector.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingTableStatisticsCollector.java
index fa32a2ea4b0..f3715a72a20 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingTableStatisticsCollector.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingTableStatisticsCollector.java
@@ -55,7 +55,7 @@ public final class ShardingTableStatisticsCollector 
implements ShardingSphereTab
         DatabaseType protocolType = 
metaData.getAllDatabases().iterator().next().getProtocolType();
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData();
         currentId = 1;
-        if (dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+        if 
(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
             collectFromDatabase(metaData.getDatabase(databaseName), result);
         } else {
             for (ShardingSphereDatabase each : metaData.getAllDatabases()) {
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/from/type/SimpleTableSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/from/type/SimpleTableSegmentBinder.java
index 3ed922a95cd..09dfd4f9b74 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/from/type/SimpleTableSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/from/type/SimpleTableSegmentBinder.java
@@ -105,7 +105,7 @@ public final class SimpleTableSegmentBinder {
     
     private static IdentifierValue getDatabaseName(final SimpleTableSegment 
segment, final SQLStatementBinderContext binderContext) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(binderContext.getSqlStatement().getDatabaseType()).getDialectDatabaseMetaData();
-        Optional<OwnerSegment> owner = 
dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
segment.getOwner().flatMap(OwnerSegment::getOwner) : segment.getOwner();
+        Optional<OwnerSegment> owner = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? 
segment.getOwner().flatMap(OwnerSegment::getOwner) : segment.getOwner();
         IdentifierValue result = new IdentifierValue(owner.map(optional -> 
optional.getIdentifier().getValue()).orElse(binderContext.getCurrentDatabaseName()));
         ShardingSpherePreconditions.checkNotNull(result.getValue(), 
NoDatabaseSelectedException::new);
         
ShardingSpherePreconditions.checkState(binderContext.getMetaData().containsDatabase(result.getValue()),
 () -> new UnknownDatabaseException(result.getValue()));
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
index c6ec1f0f813..cf9342bf314 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
@@ -87,12 +87,12 @@ public final class DataNode {
     }
     
     private boolean isSchemaAvailable(final DatabaseType databaseType) {
-        return new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().isSchemaAvailable();
+        return new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption().isSchemaAvailable();
     }
     
     private String getSchemaName(final String databaseName, final DatabaseType 
databaseType, final boolean containsSchema, final List<String> segments) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        if (dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+        if 
(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
             return containsSchema ? segments.get(1) : ASTERISK;
         }
         return databaseName;
@@ -123,7 +123,7 @@ public final class DataNode {
      */
     public String format(final DatabaseType databaseType) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        return dialectDatabaseMetaData.getDefaultSchema().isPresent() && null 
!= schemaName
+        return 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() && 
null != schemaName
                 ? String.join(DELIMITER, dataSourceName, schemaName, tableName)
                 : String.join(DELIMITER, dataSourceName, tableName);
     }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
index bae85a4e5e3..ec9ce200bfb 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
@@ -72,7 +72,7 @@ public final class SystemSchemaBuilder {
     
     private static Collection<String> getSystemSchemas(final String 
originalDatabaseName, final DatabaseType databaseType, final SystemDatabase 
systemDatabase) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        String databaseName = 
dialectDatabaseMetaData.getDefaultSchema().isPresent() ? "postgres" : 
originalDatabaseName;
+        String databaseName = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? 
"postgres" : originalDatabaseName;
         return 
systemDatabase.getSystemDatabaseSchemaMap().getOrDefault(databaseName, 
Collections.emptyList());
     }
     
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
index cb84194e6b8..8cea6f723f3 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
@@ -55,7 +55,7 @@ public final class SystemSchemaUtils {
      */
     public static boolean containsSystemSchema(final DatabaseType 
databaseType, final Collection<String> schemaNames, final 
ShardingSphereDatabase database) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        if (database.isComplete() && 
!dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+        if (database.isComplete() && 
!dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
             return false;
         }
         SystemDatabase systemDatabase = new SystemDatabase(databaseType);
@@ -64,7 +64,7 @@ public final class SystemSchemaUtils {
                 return true;
             }
         }
-        return !dialectDatabaseMetaData.getDefaultSchema().isPresent() && 
systemDatabase.getSystemSchemas().contains(database.getName());
+        return 
!dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() && 
systemDatabase.getSystemSchemas().contains(database.getName());
     }
     
     /**
@@ -90,7 +90,7 @@ public final class SystemSchemaUtils {
      */
     public static boolean isSystemSchema(final ShardingSphereDatabase 
database) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
-        if (database.isComplete() && 
!dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+        if (database.isComplete() && 
!dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
             return false;
         }
         return new 
SystemDatabase(database.getProtocolType()).getSystemSchemas().contains(database.getName());
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
index 5496e9bb7cf..268e8c185fe 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsFactory.java
@@ -74,7 +74,7 @@ public final class ShardingSphereStatisticsFactory {
         DatabaseType protocolType = 
metaData.getAllDatabases().iterator().next().getProtocolType();
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData();
         // TODO can `protocolType instanceof SchemaSupportedDatabaseType ? 
"PostgreSQL" : protocolType.getType()` replace to trunk database type?
-        return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
+        return 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
     }
     
     private static void fillDefaultStatistics(final ShardingSphereMetaData 
metaData, final ShardingSphereStatistics statistics) {
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/MetaDataLoaderConnection.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/MetaDataLoaderConnection.java
index a72d23a3489..e944f99fc48 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/MetaDataLoaderConnection.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/MetaDataLoaderConnection.java
@@ -71,7 +71,7 @@ public final class MetaDataLoaderConnection implements 
Connection {
     
     @Override
     public String getSchema() {
-        return dialectDatabaseMetaData.getSchema(connection);
+        return dialectDatabaseMetaData.getSchemaOption().getSchema(connection);
     }
     
     @Override
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
index e0b08fae5fc..d8a9e0036cd 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/SchemaMetaDataLoader.java
@@ -73,7 +73,7 @@ public final class SchemaMetaDataLoader {
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
             Map<String, Collection<String>> result = new 
CaseInsensitiveMap<>(schemaNames.size(), 1F);
             for (String each : schemaNames) {
-                String schemaName = 
dialectDatabaseMetaData.getDefaultSchema().isPresent() ? each : databaseName;
+                String schemaName = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? each 
: databaseName;
                 result.put(schemaName, loadTableNames(connection, each, 
excludedTables));
             }
             return result;
@@ -90,7 +90,7 @@ public final class SchemaMetaDataLoader {
      */
     public static Collection<String> loadSchemaNames(final Connection 
connection, final DatabaseType databaseType) throws SQLException {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        if (!dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+        if 
(!dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
             return Collections.singletonList(connection.getSchema());
         }
         Collection<String> result = new LinkedList<>();
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
index a47f41c5385..42e26393897 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
@@ -22,14 +22,12 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.Quo
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DefaultDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.join.DialectJoinOrderOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption;
 import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Optional;
-
 /**
  * Dialect database meta data.
  */
@@ -61,36 +59,12 @@ public interface DialectDatabaseMetaData extends 
DatabaseTypedSPI {
     }
     
     /**
-     * Is schema feature available.
-     *
-     * @return true or false
-     */
-    default boolean isSchemaAvailable() {
-        return false;
-    }
-    
-    /**
-     * Get schema.
-     *
-     * @param connection connection
-     * @return schema
-     */
-    @SuppressWarnings("ReturnOfNull")
-    default String getSchema(final Connection connection) {
-        try {
-            return connection.getSchema();
-        } catch (final SQLException ignored) {
-            return null;
-        }
-    }
-    
-    /**
-     * Get default schema name.
+     * Get schema option.
      *
-     * @return default schema name
+     * @return schema option
      */
-    default Optional<String> getDefaultSchema() {
-        return Optional.empty();
+    default DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(false, null);
     }
     
     /**
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/scehma/DefaultSchemaOption.java
similarity index 58%
copy from 
infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
copy to 
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/scehma/DefaultSchemaOption.java
index 80615ffc9b9..9d2672f4b95 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/scehma/DefaultSchemaOption.java
@@ -15,33 +15,38 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.database.core.metadata.database.fixture;
+package 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma;
 
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.Optional;
 
-public final class TrunkDialectDatabaseMetaData implements 
DialectDatabaseMetaData {
+/**
+ * Default schema option.
+ */
+@RequiredArgsConstructor
+public final class DefaultSchemaOption implements DialectSchemaOption {
     
-    @Override
-    public QuoteCharacter getQuoteCharacter() {
-        return QuoteCharacter.NONE;
-    }
+    @Getter
+    private final boolean isSchemaAvailable;
     
-    @Override
-    public NullsOrderType getDefaultNullsOrderType() {
-        return NullsOrderType.LOW;
-    }
+    private final String defaultSchema;
     
     @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("test");
+    @SuppressWarnings("ReturnOfNull")
+    public String getSchema(final Connection connection) {
+        try {
+            return connection.getSchema();
+        } catch (final SQLException ignored) {
+            return null;
+        }
     }
     
     @Override
-    public String getDatabaseType() {
-        return "TRUNK";
+    public Optional<String> getDefaultSchema() {
+        return Optional.ofNullable(defaultSchema);
     }
 }
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/scehma/DialectSchemaOption.java
similarity index 53%
copy from 
infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
copy to 
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/scehma/DialectSchemaOption.java
index 80615ffc9b9..cc72ecfda7f 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/scehma/DialectSchemaOption.java
@@ -15,33 +15,35 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.database.core.metadata.database.fixture;
-
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+package 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma;
 
+import java.sql.Connection;
 import java.util.Optional;
 
-public final class TrunkDialectDatabaseMetaData implements 
DialectDatabaseMetaData {
-    
-    @Override
-    public QuoteCharacter getQuoteCharacter() {
-        return QuoteCharacter.NONE;
-    }
+/**
+ * Dialect schema option.
+ */
+public interface DialectSchemaOption {
     
-    @Override
-    public NullsOrderType getDefaultNullsOrderType() {
-        return NullsOrderType.LOW;
-    }
+    /**
+     * Is schema feature available.
+     *
+     * @return true or false
+     */
+    boolean isSchemaAvailable();
     
-    @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("test");
-    }
+    /**
+     * Get schema.
+     *
+     * @param connection connection
+     * @return schema
+     */
+    String getSchema(Connection connection);
     
-    @Override
-    public String getDatabaseType() {
-        return "TRUNK";
-    }
+    /**
+     * Get default schema name.
+     *
+     * @return default schema name
+     */
+    Optional<String> getDefaultSchema();
 }
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
index 87416a5fb0a..bae3aeacc90 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
@@ -64,6 +64,6 @@ public final class DatabaseTypeRegistry {
      * @return default schema name
      */
     public String getDefaultSchemaName(final String databaseName) {
-        return dialectDatabaseMetaData.getDefaultSchema().orElseGet(() -> null 
== databaseName ? null : databaseName.toLowerCase());
+        return 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().orElseGet(() -> 
null == databaseName ? null : databaseName.toLowerCase());
     }
 }
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
index 80615ffc9b9..447a683b254 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
@@ -17,11 +17,11 @@
 
 package 
org.apache.shardingsphere.infra.database.core.metadata.database.fixture;
 
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
-
-import java.util.Optional;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 
 public final class TrunkDialectDatabaseMetaData implements 
DialectDatabaseMetaData {
     
@@ -36,8 +36,8 @@ public final class TrunkDialectDatabaseMetaData implements 
DialectDatabaseMetaDa
     }
     
     @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("test");
+    public DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(false, "test");
     }
     
     @Override
diff --git 
a/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/database/HiveDatabaseMetaData.java
 
b/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/database/HiveDatabaseMetaData.java
index 931ba8e5e72..1a40559063c 100644
--- 
a/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/database/HiveDatabaseMetaData.java
+++ 
b/infra/database/type/hive/src/main/java/org/apache/shardingsphere/infra/database/hive/metadata/database/HiveDatabaseMetaData.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.infra.database.hive.metadata.database;
 
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
-
-import java.util.Optional;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 
 /**
  * Database meta data of Hive.
@@ -39,8 +39,8 @@ public final class HiveDatabaseMetaData implements 
DialectDatabaseMetaData {
     }
     
     @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("default");
+    public DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(false, "default");
     }
     
     @Override
diff --git 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
index aed075fe4d4..7c973ddb7e7 100644
--- 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
+++ 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
@@ -21,11 +21,11 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.Nul
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption;
 import 
org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussDataTypeOption;
 
-import java.util.Optional;
-
 /**
  * Database meta data of openGauss.
  */
@@ -47,13 +47,8 @@ public final class OpenGaussDatabaseMetaData implements 
DialectDatabaseMetaData
     }
     
     @Override
-    public boolean isSchemaAvailable() {
-        return true;
-    }
-    
-    @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("public");
+    public DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(true, "public");
     }
     
     @Override
diff --git 
a/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaDataTest.java
 
b/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaDataTest.java
index 8fecb8d44ab..f5e2bba5c00 100644
--- 
a/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaDataTest.java
+++ 
b/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaDataTest.java
@@ -41,11 +41,11 @@ class OpenGaussDatabaseMetaDataTest {
     
     @Test
     void assertIsSchemaAvailable() {
-        assertTrue(dialectDatabaseMetaData.isSchemaAvailable());
+        
assertTrue(dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable());
     }
     
     @Test
     void assertGetDefaultSchema() {
-        assertThat(dialectDatabaseMetaData.getDefaultSchema(), 
is(Optional.of("public")));
+        
assertThat(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema(), 
is(Optional.of("public")));
     }
 }
diff --git 
a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
 
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
index a61fcd94c67..4fdeae34913 100644
--- 
a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
+++ 
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
@@ -21,11 +21,9 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.Nul
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 import 
org.apache.shardingsphere.infra.database.oracle.metadata.database.option.OracleDataTypeOption;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Optional;
+import 
org.apache.shardingsphere.infra.database.oracle.metadata.database.option.OracleSchemaOption;
 
 /**
  * Database meta data of Oracle.
@@ -48,17 +46,8 @@ public final class OracleDatabaseMetaData implements 
DialectDatabaseMetaData {
     }
     
     @Override
-    public boolean isSchemaAvailable() {
-        return true;
-    }
-    
-    @Override
-    public String getSchema(final Connection connection) {
-        try {
-            return 
Optional.ofNullable(connection.getMetaData().getUserName()).map(String::toUpperCase).orElse(null);
-        } catch (final SQLException ignored) {
-            return null;
-        }
+    public DialectSchemaOption getSchemaOption() {
+        return new OracleSchemaOption();
     }
     
     @Override
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
 
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleSchemaOption.java
similarity index 59%
copy from 
infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
copy to 
infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleSchemaOption.java
index 80615ffc9b9..92e8ec6ee17 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/metadata/database/fixture/TrunkDialectDatabaseMetaData.java
+++ 
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleSchemaOption.java
@@ -15,33 +15,35 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.database.core.metadata.database.fixture;
+package 
org.apache.shardingsphere.infra.database.oracle.metadata.database.option;
 
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.Optional;
 
-public final class TrunkDialectDatabaseMetaData implements 
DialectDatabaseMetaData {
+/**
+ * Schema option for Oracle.
+ */
+public final class OracleSchemaOption implements DialectSchemaOption {
     
     @Override
-    public QuoteCharacter getQuoteCharacter() {
-        return QuoteCharacter.NONE;
+    public boolean isSchemaAvailable() {
+        return true;
     }
     
     @Override
-    public NullsOrderType getDefaultNullsOrderType() {
-        return NullsOrderType.LOW;
+    public String getSchema(final Connection connection) {
+        try {
+            return 
Optional.ofNullable(connection.getMetaData().getUserName()).map(String::toUpperCase).orElse(null);
+        } catch (final SQLException ignored) {
+            return null;
+        }
     }
     
     @Override
     public Optional<String> getDefaultSchema() {
-        return Optional.of("test");
-    }
-    
-    @Override
-    public String getDatabaseType() {
-        return "TRUNK";
+        return Optional.empty();
     }
 }
diff --git 
a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java
 
b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java
index cdee1003ceb..9b0c75e4850 100644
--- 
a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java
+++ 
b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java
@@ -47,14 +47,14 @@ class OracleDatabaseMetaDataTest {
     void assertGetSchema() throws SQLException {
         Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
         when(connection.getMetaData().getUserName()).thenReturn("scott");
-        assertThat(dialectDatabaseMetaData.getSchema(connection), is("SCOTT"));
+        
assertThat(dialectDatabaseMetaData.getSchemaOption().getSchema(connection), 
is("SCOTT"));
     }
     
     @Test
     void assertGetSchemaIfExceptionThrown() throws SQLException {
         Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
         
when(connection.getMetaData().getUserName()).thenThrow(SQLException.class);
-        assertNull(dialectDatabaseMetaData.getSchema(connection));
+        
assertNull(dialectDatabaseMetaData.getSchemaOption().getSchema(connection));
     }
     
     @Test
diff --git 
a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java
 
b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java
index db4f9545da5..06c4807e1ed 100644
--- 
a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java
+++ 
b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java
@@ -21,11 +21,11 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.Nul
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption;
 import 
org.apache.shardingsphere.infra.database.postgresql.metadata.database.option.PostgreSQLDataTypeOption;
 
-import java.util.Optional;
-
 /**
  * Database meta data of PostgreSQL.
  */
@@ -47,13 +47,8 @@ public final class PostgreSQLDatabaseMetaData implements 
DialectDatabaseMetaData
     }
     
     @Override
-    public boolean isSchemaAvailable() {
-        return true;
-    }
-    
-    @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("public");
+    public DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(true, "public");
     }
     
     @Override
diff --git 
a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java
 
b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java
index c364a9bc301..90df7ff0d5a 100644
--- 
a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java
+++ 
b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java
@@ -41,12 +41,12 @@ class PostgreSQLDatabaseMetaDataTest {
     
     @Test
     void assertIsSchemaAvailable() {
-        assertTrue(dialectDatabaseMetaData.isSchemaAvailable());
+        
assertTrue(dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable());
     }
     
     @Test
     void assertGetDefaultSchema() {
-        assertThat(dialectDatabaseMetaData.getDefaultSchema(), 
is(Optional.of("public")));
+        
assertThat(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema(), 
is(Optional.of("public")));
     }
     
     @Test
diff --git 
a/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java
 
b/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java
index 9b26b84f06f..20ddd9800d0 100644
--- 
a/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java
+++ 
b/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.infra.database.presto.metadata.database;
 
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
-
-import java.util.Optional;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 
 /**
  * Database meta data of Presto.
@@ -39,8 +39,8 @@ public final class PrestoDatabaseMetaData implements 
DialectDatabaseMetaData {
     }
     
     @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("default");
+    public DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(false, "default");
     }
     
     @Override
diff --git 
a/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
 
b/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
index 9eb95132f9e..d036ec042a3 100644
--- 
a/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
+++ 
b/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.infra.database.sqlserver.metadata.database;
 
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
-
-import java.util.Optional;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DefaultSchemaOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.scehma.DialectSchemaOption;
 
 /**
  * Database meta data of SQLServer.
@@ -39,8 +39,8 @@ public final class SQLServerDatabaseMetaData implements 
DialectDatabaseMetaData
     }
     
     @Override
-    public Optional<String> getDefaultSchema() {
-        return Optional.of("dbo");
+    public DialectSchemaOption getSchemaOption() {
+        return new DefaultSchemaOption(false, "dbo");
     }
     
     @Override
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowLogicalTablesExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowLogicalTablesExecutor.java
index 5b8a1467b5c..682cf358916 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowLogicalTablesExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowLogicalTablesExecutor.java
@@ -55,7 +55,7 @@ public final class ShowLogicalTablesExecutor implements 
DistSQLQueryExecutor<Sho
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final 
ShowLogicalTablesStatement sqlStatement, final ContextManager contextManager) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
-        String schemaName = 
dialectDatabaseMetaData.getDefaultSchema().orElse(database.getName());
+        String schemaName = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().orElse(database.getName());
         if (null == database.getSchema(schemaName)) {
             return Collections.emptyList();
         }
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/generic/RemoveTokenGenerator.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/generic/RemoveTokenGenerator.java
index 0c0a1ebd2b1..d0cde0b40c7 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/generic/RemoveTokenGenerator.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/generic/RemoveTokenGenerator.java
@@ -79,7 +79,7 @@ public final class RemoveTokenGenerator implements 
CollectionSQLTokenGenerator<S
             }
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
             OwnerSegment ownerSegment = each.getOwner().get();
-            if (dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+            if 
(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
                 ownerSegment.getOwner().ifPresent(optional -> result.add(new 
RemoveToken(optional.getStartIndex(), ownerSegment.getStartIndex() - 1)));
             } else {
                 result.add(new RemoveToken(ownerSegment.getStartIndex(), 
each.getTableName().getStartIndex() - 1));
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
index 03224fc26cb..59c0af0cc00 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
@@ -57,7 +57,7 @@ public abstract class AbstractStatementAdapter extends 
WrapperAdapter implements
         if 
(connection.getDatabaseConnectionManager().getConnectionContext().getTransactionContext().isInTransaction())
 {
             DatabaseType databaseType = 
metaData.getDatabase(connection.getCurrentDatabaseName()).getProtocolType();
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-            if (dialectDatabaseMetaData.getDefaultSchema().isPresent()) {
+            if 
(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
                 
connection.getDatabaseConnectionManager().getConnectionContext().getTransactionContext().setExceptionOccur(true);
             }
         }
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index c41917e7745..7d8431a6b8c 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -238,7 +238,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter {
     
     private boolean isSchemaSupportedDatabaseType() {
         DatabaseType databaseType = 
contextManager.getMetaDataContexts().getMetaData().getDatabase(currentDatabaseName).getProtocolType();
-        return new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getDefaultSchema().isPresent();
+        return new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption().getDefaultSchema().isPresent();
     }
     
     @SuppressWarnings("MagicConstant")
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/ImporterConfiguration.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/ImporterConfiguration.java
index 6df8bec8936..f1cfb2abe5e 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/ImporterConfiguration.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/importer/ImporterConfiguration.java
@@ -77,7 +77,7 @@ public final class ImporterConfiguration {
      */
     public Optional<String> findSchemaName(final String logicTableName) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(dataSourceConfig.getDatabaseType()).getDialectDatabaseMetaData();
-        return dialectDatabaseMetaData.isSchemaAvailable() ? 
Optional.of(tableAndSchemaNameMapper.getSchemaName(logicTableName)) : 
Optional.empty();
+        return dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable() ? 
Optional.of(tableAndSchemaNameMapper.getSchemaName(logicTableName)) : 
Optional.empty();
     }
     
     /**
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/StandardPipelineTableMetaDataLoader.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/StandardPipelineTableMetaDataLoader.java
index ff0333dce1d..2b2cccf2060 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/StandardPipelineTableMetaDataLoader.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/loader/StandardPipelineTableMetaDataLoader.java
@@ -74,7 +74,7 @@ public final class StandardPipelineTableMetaDataLoader 
implements PipelineTableM
     private void loadTableMetaData(final String schemaName, final String 
tableName) throws SQLException {
         try (Connection connection = dataSource.getConnection()) {
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(dataSource.getDatabaseType()).getDialectDatabaseMetaData();
-            tableMetaDataMap.putAll(loadTableMetaData(connection, 
dialectDatabaseMetaData.isSchemaAvailable() ? schemaName : null, tableName));
+            tableMetaDataMap.putAll(loadTableMetaData(connection, 
dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable() ? schemaName : 
null, tableName));
         }
     }
     
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java
index fd88018e4a0..b805de5f628 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java
@@ -70,10 +70,10 @@ public final class PipelineJobDataSourcePreparer {
     public void prepareTargetSchemas(final PrepareTargetSchemasParameter 
param) throws SQLException {
         DatabaseType targetDatabaseType = param.getTargetDatabaseType();
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(targetDatabaseType).getDialectDatabaseMetaData();
-        if (!dialectDatabaseMetaData.isSchemaAvailable()) {
+        if (!dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable()) {
             return;
         }
-        String defaultSchema = 
dialectDatabaseMetaData.getDefaultSchema().orElse(null);
+        String defaultSchema = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().orElse(null);
         PipelinePrepareSQLBuilder pipelineSQLBuilder = new 
PipelinePrepareSQLBuilder(targetDatabaseType);
         Collection<String> createdSchemaNames = new 
HashSet<>(param.getCreateTableConfigurations().size(), 1F);
         for (CreateTableConfiguration each : 
param.getCreateTableConfigurations()) {
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java
index 88a8f9239a7..bb58daa0cc5 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java
@@ -53,7 +53,7 @@ public final class PipelineSQLSegmentBuilder {
      */
     public String getQualifiedTableName(final String schemaName, final String 
tableName) {
         StringBuilder result = new StringBuilder();
-        if (dialectDatabaseMetaData.isSchemaAvailable() && 
!Strings.isNullOrEmpty(schemaName)) {
+        if (dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable() && 
!Strings.isNullOrEmpty(schemaName)) {
             result.append(getEscapedIdentifier(schemaName)).append('.');
         }
         result.append(getEscapedIdentifier(tableName));
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/handler/CDCBackendHandler.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/handler/CDCBackendHandler.java
index fde535b6fc5..632352bba5a 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/handler/CDCBackendHandler.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/handler/CDCBackendHandler.java
@@ -105,7 +105,7 @@ public final class CDCBackendHandler {
         Collection<String> tableNames;
         Set<String> schemaTableNames = new HashSet<>();
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
-        if (dialectDatabaseMetaData.isSchemaAvailable()) {
+        if (dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable()) {
             schemaTableNameMap = 
CDCSchemaTableUtils.parseTableExpressionWithSchema(database, 
requestBody.getSourceSchemaTableList());
             // TODO if different schema have same table names, table name may 
be overwritten, because the table name at sharding rule not contain schema.
             tableNames = 
schemaTableNameMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
index db1a3884be7..14f06dd4b2b 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
@@ -67,8 +67,8 @@ public final class CDCSchemaTableUtils {
                 result.putAll(parseTableExpressionWithAllTable(database, 
each));
             } else {
                 String schemaName = each.getSchema();
-                if (dialectDatabaseMetaData.getDefaultSchema().isPresent() && 
schemaName.isEmpty()) {
-                    schemaName = 
dialectDatabaseMetaData.getDefaultSchema().get();
+                if 
(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() && 
schemaName.isEmpty()) {
+                    schemaName = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().get();
                 }
                 
ShardingSpherePreconditions.checkNotNull(database.getSchema(schemaName).getTable(each.getTable()),
 () -> new TableNotFoundException(each.getTable()));
                 result.computeIfAbsent(schemaName, ignored -> new 
HashSet<>()).add(each.getTable());
@@ -101,7 +101,7 @@ public final class CDCSchemaTableUtils {
     private static Map<String, Set<String>> 
parseTableExpressionWithAllTable(final ShardingSphereDatabase database, final 
SchemaTable schemaTable) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
         String schemaName = schemaTable.getSchema().isEmpty()
-                ? dialectDatabaseMetaData.getDefaultSchema().orElseThrow(() -> 
new IllegalStateException("Default schema should exist."))
+                ? 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().orElseThrow(() -> 
new IllegalStateException("Default schema should exist."))
                 : schemaTable.getSchema();
         ShardingSphereSchema schema = database.getSchema(schemaName);
         ShardingSpherePreconditions.checkNotNull(schema, () -> new 
SchemaNotFoundException(schemaTable.getSchema()));
diff --git 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
index 38c173d2540..e20f916968f 100644
--- 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
+++ 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/MigrationJobExecutorCallback.java
@@ -80,7 +80,7 @@ public final class MigrationJobExecutorCallback implements 
DistributedPipelineJo
         DataNode dataNode = jobDataNodeEntry.getDataNodes().get(0);
         PipelineDataSourceConfiguration sourceDataSourceConfig = 
jobConfig.getSources().get(dataNode.getDataSourceName());
         String sourceSchemaName = 
mapper.getSchemaName(jobDataNodeEntry.getLogicTableName());
-        String targetSchemaName = new 
DatabaseTypeRegistry(jobConfig.getTargetDatabaseType()).getDialectDatabaseMetaData().isSchemaAvailable()
 ? sourceSchemaName : null;
+        String targetSchemaName = new 
DatabaseTypeRegistry(jobConfig.getTargetDatabaseType()).getDialectDatabaseMetaData().getSchemaOption().isSchemaAvailable()
 ? sourceSchemaName : null;
         return new CreateTableConfiguration(sourceDataSourceConfig, new 
QualifiedTable(sourceSchemaName, dataNode.getTableName()),
                 jobConfig.getTarget(), new QualifiedTable(targetSchemaName, 
jobDataNodeEntry.getLogicTableName()));
     }
diff --git 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
index 2d0fbbe4189..e9e6eb6446a 100644
--- 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
+++ 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/MigrationJobAPI.java
@@ -144,7 +144,7 @@ public final class MigrationJobAPI implements 
TransmissionJobAPI {
             StandardPipelineDataSourceConfiguration sourceDataSourceConfig = 
new StandardPipelineDataSourceConfiguration(sourceDataSourcePoolProps);
             configSources.put(dataSourceName, 
buildYamlPipelineDataSourceConfiguration(sourceDataSourceConfig.getType(), 
sourceDataSourceConfig.getParameter()));
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(sourceDataSourceConfig.getDatabaseType()).getDialectDatabaseMetaData();
-            if (null == each.getSource().getSchemaName() && 
dialectDatabaseMetaData.isSchemaAvailable()) {
+            if (null == each.getSource().getSchemaName() && 
dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable()) {
                 
each.getSource().setSchemaName(PipelineSchemaUtils.getDefaultSchema(sourceDataSourceConfig));
             }
             DatabaseType sourceDatabaseType = 
sourceDataSourceConfig.getDatabaseType();
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
index 908d51be858..a51064eba0f 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decorator/SingleRuleConfigurationDecorator.java
@@ -67,7 +67,7 @@ public final class SingleRuleConfigurationDecorator 
implements RuleConfiguration
         DatabaseType databaseType = dataSources.isEmpty() ? 
DatabaseTypeEngine.getDefaultStorageType() : 
DatabaseTypeEngine.getStorageType(dataSources.values().iterator().next());
         Collection<String> excludedTables = 
SingleTableLoadUtils.getExcludedTables(builtRules);
         Map<String, Collection<DataNode>> actualDataNodes = 
SingleTableDataNodeLoader.load(databaseName, aggregatedDataSources, 
excludedTables);
-        boolean isSchemaSupportedDatabaseType = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getDefaultSchema().isPresent();
+        boolean isSchemaSupportedDatabaseType = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption().getDefaultSchema().isPresent();
         if (splitTables.contains(SingleTableConstants.ALL_TABLES) || 
splitTables.contains(SingleTableConstants.ALL_SCHEMA_TABLES)) {
             return loadAllTables(isSchemaSupportedDatabaseType, 
actualDataNodes);
         }
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/util/SingleTableLoadUtils.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/util/SingleTableLoadUtils.java
index 1582b1c6cf2..f7178eb3739 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/util/SingleTableLoadUtils.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/util/SingleTableLoadUtils.java
@@ -118,7 +118,7 @@ public final class SingleTableLoadUtils {
      */
     public static String getAllTablesNodeStr(final DatabaseType databaseType) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
SingleTableConstants.ALL_SCHEMA_TABLES : SingleTableConstants.ALL_TABLES;
+        return 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? 
SingleTableConstants.ALL_SCHEMA_TABLES : SingleTableConstants.ALL_TABLES;
     }
     
     /**
@@ -131,7 +131,7 @@ public final class SingleTableLoadUtils {
      */
     public static String getAllTablesNodeStrFromDataSource(final DatabaseType 
databaseType, final String dataSourceName, final String schemaName) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        return dialectDatabaseMetaData.getDefaultSchema().isPresent()
+        return 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()
                 ? formatDataNode(dataSourceName, schemaName, 
SingleTableConstants.ASTERISK)
                 : formatDataNode(dataSourceName, 
SingleTableConstants.ASTERISK);
     }
@@ -147,7 +147,7 @@ public final class SingleTableLoadUtils {
      */
     public static String getDataNodeString(final DatabaseType databaseType, 
final String dataSourceName, final String schemaName, final String tableName) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
formatDataNode(dataSourceName, schemaName, tableName) : 
formatDataNode(dataSourceName, tableName);
+        return 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? 
formatDataNode(dataSourceName, schemaName, tableName) : 
formatDataNode(dataSourceName, tableName);
     }
     
     private static String formatDataNode(final String dataSourceName, final 
String tableName) {
diff --git 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
index c1e424963a7..116aa221b65 100644
--- 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
+++ 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableExecutor.java
@@ -87,7 +87,7 @@ public final class LoadSingleTableExecutor implements 
DatabaseRuleCreateExecutor
     private void checkShouldNotExistLogicTables(final LoadSingleTableStatement 
sqlStatement, final String defaultSchemaName) {
         Collection<SingleTableSegment> tableSegments = 
sqlStatement.getTables();
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
-        boolean isSchemaSupportedDatabaseType = 
dialectDatabaseMetaData.getDefaultSchema().isPresent();
+        boolean isSchemaSupportedDatabaseType = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent();
         ShardingSphereSchema schema = database.getSchema(defaultSchemaName);
         for (SingleTableSegment each : tableSegments) {
             checkTableNodeFormat(isSchemaSupportedDatabaseType, each);
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
index 0670e692990..71979feb4b8 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
@@ -75,6 +75,7 @@ public final class DropDatabaseBackendHandler implements 
ProxyBackendHandler {
     
     private void checkSupportedDropCurrentDatabase(final ConnectionSession 
connectionSession) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(connectionSession.getProtocolType()).getDialectDatabaseMetaData();
-        
ShardingSpherePreconditions.checkState(!dialectDatabaseMetaData.getDefaultSchema().isPresent(),
 () -> new UnsupportedOperationException("cannot drop the currently open 
database"));
+        
ShardingSpherePreconditions.checkState(!dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent(),
+                () -> new UnsupportedOperationException("cannot drop the 
currently open database"));
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandler.java
index 8388cb34023..5c3bf278f2a 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandler.java
@@ -101,7 +101,7 @@ public final class TCLBackendHandler implements 
ProxyBackendHandler {
         if (connectionSession.getTransactionStatus().isInTransaction()) {
             if 
(dialectDatabaseMetaData.getTransactionOption().isSupportAutoCommitInNestedTransaction())
 {
                 backendTransactionManager.commit();
-            } else if (dialectDatabaseMetaData.getDefaultSchema().isPresent()) 
{
+            } else if 
(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) {
                 throw new InTransactionException();
             }
         }
@@ -109,19 +109,19 @@ public final class TCLBackendHandler implements 
ProxyBackendHandler {
     }
     
     private void handleSavepoint() throws SQLException {
-        
ShardingSpherePreconditions.checkState(connectionSession.getTransactionStatus().isInTransaction()
 || !dialectDatabaseMetaData.getDefaultSchema().isPresent(),
+        
ShardingSpherePreconditions.checkState(connectionSession.getTransactionStatus().isInTransaction()
 || !dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent(),
                 () -> new SQLFeatureNotSupportedException("SAVEPOINT can only 
be used in transaction blocks"));
         backendTransactionManager.setSavepoint(((SavepointStatement) 
tclStatement).getSavepointName());
     }
     
     private void handleRollbackToSavepoint() throws SQLException {
-        
ShardingSpherePreconditions.checkState(connectionSession.getTransactionStatus().isInTransaction()
 || !dialectDatabaseMetaData.getDefaultSchema().isPresent(),
+        
ShardingSpherePreconditions.checkState(connectionSession.getTransactionStatus().isInTransaction()
 || !dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent(),
                 () -> new SQLFeatureNotSupportedException("ROLLBACK TO 
SAVEPOINT can only be used in transaction blocks"));
         backendTransactionManager.rollbackTo(((RollbackStatement) 
tclStatement).getSavepointName().get());
     }
     
     private void handleReleaseSavepoint() throws SQLException {
-        
ShardingSpherePreconditions.checkState(connectionSession.getTransactionStatus().isInTransaction()
 || !dialectDatabaseMetaData.getDefaultSchema().isPresent(),
+        
ShardingSpherePreconditions.checkState(connectionSession.getTransactionStatus().isInTransaction()
 || !dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent(),
                 () -> new SQLFeatureNotSupportedException("RELEASE SAVEPOINT 
can only be used in transaction blocks"));
         
backendTransactionManager.releaseSavepoint(((ReleaseSavepointStatement) 
tclStatement).getSavepointName());
     }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
index 1422b562800..04658f455c4 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
@@ -113,7 +113,7 @@ class SelectInformationSchemataExecutorTest {
         expectedResultSetMap.put("SCHEMA_NAME", "foo_ds");
         expectedResultSetMap.put("DEFAULT_COLLATION_NAME", "utf8mb4");
         try (MockedConstruction<DatabaseTypeRegistry> ignored = 
mockConstruction(DatabaseTypeRegistry.class, (mock, mockContext) -> {
-            DialectDatabaseMetaData dialectDatabaseMetaData = 
mock(DialectDatabaseMetaData.class);
+            DialectDatabaseMetaData dialectDatabaseMetaData = 
mock(DialectDatabaseMetaData.class, RETURNS_DEEP_STUBS);
             
when(dialectDatabaseMetaData.isInstanceConnectionAvailable()).thenReturn(true);
             
when(mock.getDialectDatabaseMetaData()).thenReturn(dialectDatabaseMetaData);
         })) {
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/PipelineContainerComposer.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/PipelineContainerComposer.java
index 7812f9a130a..e9b09a81395 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/PipelineContainerComposer.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/PipelineContainerComposer.java
@@ -312,7 +312,7 @@ public final class PipelineContainerComposer implements 
AutoCloseable {
      * @throws SQLException SQL exception
      */
     public void createSchema(final Connection connection, final int 
sleepSeconds) throws SQLException {
-        if (!new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().isSchemaAvailable())
 {
+        if (!new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption().isSchemaAvailable())
 {
             return;
         }
         connection.createStatement().execute(String.format("CREATE SCHEMA %s", 
SCHEMA_NAME));
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
index 7900d9e8f7b..0e024bec57a 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java
@@ -125,7 +125,7 @@ class CDCE2EIT {
             String jobId = containerComposer.queryForListWithLog("SHOW 
STREAMING LIST").get(0).get("id").toString();
             containerComposer.waitIncrementTaskFinished(String.format("SHOW 
STREAMING STATUS '%s'", jobId));
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(containerComposer.getDatabaseType()).getDialectDatabaseMetaData();
-            String tableName = dialectDatabaseMetaData.isSchemaAvailable() ? 
String.join(".", PipelineContainerComposer.SCHEMA_NAME, SOURCE_TABLE_NAME) : 
SOURCE_TABLE_NAME;
+            String tableName = 
dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable() ? 
String.join(".", PipelineContainerComposer.SCHEMA_NAME, SOURCE_TABLE_NAME) : 
SOURCE_TABLE_NAME;
             new E2EIncrementalTask(sourceDataSource, tableName, new 
SnowflakeKeyGenerateAlgorithm(), containerComposer.getDatabaseType(), 20).run();
             containerComposer.waitIncrementTaskFinished(String.format("SHOW 
STREAMING STATUS '%s'", jobId));
             for (int i = 1; i <= 4; i++) {
@@ -133,7 +133,7 @@ class CDCE2EIT {
                 containerComposer.proxyExecuteWithLog(String.format("INSERT 
INTO %s (order_id, user_id, status) VALUES (%d, %d, 'OK')", tableName, orderId, 
i), 0);
                 containerComposer.assertOrderRecordExist(targetDataSource, 
tableName, orderId);
             }
-            QualifiedTable orderQualifiedTable = 
dialectDatabaseMetaData.isSchemaAvailable()
+            QualifiedTable orderQualifiedTable = 
dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable()
                     ? new 
QualifiedTable(PipelineContainerComposer.SCHEMA_NAME, SOURCE_TABLE_NAME)
                     : new QualifiedTable(null, SOURCE_TABLE_NAME);
             assertDataMatched(sourceDataSource, targetDataSource, 
orderQualifiedTable);
diff --git 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
index f3e260fae70..be61a68260f 100644
--- 
a/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
+++ 
b/test/it/pipeline/src/test/java/org/apache/shardingsphere/test/it/data/pipeline/core/util/PipelineContextUtils.java
@@ -222,7 +222,7 @@ public final class PipelineContextUtils {
         for (JobDataNodeEntry each : 
jobConfig.getTablesFirstDataNodes().getEntries()) {
             String sourceSchemaName = 
tableAndSchemaNameMapper.getSchemaName(each.getLogicTableName());
             DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(jobConfig.getTargetDatabaseType()).getDialectDatabaseMetaData();
-            String targetSchemaName = 
dialectDatabaseMetaData.isSchemaAvailable() ? sourceSchemaName : null;
+            String targetSchemaName = 
dialectDatabaseMetaData.getSchemaOption().isSchemaAvailable() ? 
sourceSchemaName : null;
             DataNode dataNode = each.getDataNodes().get(0);
             PipelineDataSourceConfiguration sourceDataSourceConfig = 
jobConfig.getSources().get(dataNode.getDataSourceName());
             CreateTableConfiguration createTableConfig = new 
CreateTableConfiguration(sourceDataSourceConfig, new 
QualifiedTable(sourceSchemaName, dataNode.getTableName()),

Reply via email to