diff --git a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java index 855e01b92bad6..c6bf3513056f9 100644 --- a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java +++ b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/data/loader/OpenGaussMetaDataLoader.java @@ -26,8 +26,10 @@ import org.apache.shardingsphere.infra.database.core.metadata.data.model.IndexMetaData; 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.DialectDatabaseMetaData; import org.apache.shardingsphere.infra.database.core.metadata.database.datatype.DataTypeRegistry; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; +import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import java.sql.Connection; @@ -70,7 +72,10 @@ public final class OpenGaussMetaDataLoader implements DialectMetaDataLoader { @Override public Collection load(final MetaDataLoaderMaterial material) throws SQLException { try (Connection connection = material.getDataSource().getConnection()) { - Collection schemaNames = SchemaMetaDataLoader.loadSchemaNames(connection, TypedSPILoader.getService(DatabaseType.class, "openGauss")); + DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "openGauss"); + DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData(); + dialectDatabaseMetaData.getSchema(connection); + Collection schemaNames = SchemaMetaDataLoader.loadSchemaNames(connection, databaseType); Map> schemaIndexMetaDataMap = loadIndexMetaDataMap(connection, schemaNames); Map> schemaColumnMetaDataMap = loadColumnMetaDataMap(connection, material.getActualTableNames(), schemaNames); Collection result = new LinkedList<>(); 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 e58fdd42eb11d..99e0a0b4b02ff 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 @@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter; +import java.sql.Connection; import java.sql.Types; import java.util.Arrays; import java.util.HashSet; @@ -48,6 +49,8 @@ public final class OpenGaussDatabaseMetaData implements DialectDatabaseMetaData "UNIQUE", "USER", "USING", "VALUES", "VARCHAR", "VARCHAR2", "VARIADIC", "VERBOSE", "VERIFY", "WHEN", "WHERE", "WINDOW", "WITH", "XMLATTRIBUTES", "XMLCONCAT", "XMLELEMENT", "XMLEXISTS", "XMLFOREST", "XMLPARSE", "XMLPI", "XMLROOT", "XMLSERIALIZE")); + private String defaultSchema; + @Override public QuoteCharacter getQuoteCharacter() { return QuoteCharacter.QUOTE; @@ -85,7 +88,13 @@ public boolean isSchemaAvailable() { @Override public Optional getDefaultSchema() { - return Optional.of("public"); + return this.defaultSchema != null ? Optional.of(this.defaultSchema) : Optional.of("public"); + } + + @Override + public String getSchema(final Connection connection) { + this.defaultSchema = DialectDatabaseMetaData.super.getSchema(connection); + return this.defaultSchema; } @Override diff --git a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java index ec151ec8c9909..7200712a14239 100644 --- a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java +++ b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/data/loader/PostgreSQLMetaDataLoader.java @@ -27,9 +27,11 @@ import org.apache.shardingsphere.infra.database.core.metadata.data.model.IndexMetaData; 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.DialectDatabaseMetaData; import org.apache.shardingsphere.infra.database.core.metadata.database.datatype.DataTypeRegistry; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; +import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import java.sql.Connection; @@ -84,7 +86,10 @@ public final class PostgreSQLMetaDataLoader implements DialectMetaDataLoader { @Override public Collection load(final MetaDataLoaderMaterial material) throws SQLException { try (Connection connection = material.getDataSource().getConnection()) { - Collection schemaNames = SchemaMetaDataLoader.loadSchemaNames(connection, TypedSPILoader.getService(DatabaseType.class, "PostgreSQL")); + DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"); + DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData(); + dialectDatabaseMetaData.getSchema(connection); + Collection schemaNames = SchemaMetaDataLoader.loadSchemaNames(connection, databaseType); Map> schemaIndexMetaDataMap = loadIndexMetaDataMap(connection, schemaNames); Map> schemaColumnMetaDataMap = loadColumnMetaDataMap(connection, material.getActualTableNames(), schemaNames); Map> schemaConstraintMetaDataMap = loadConstraintMetaDataMap(connection, schemaNames); 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 9860762f681c0..f35fa02fae8cd 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 @@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter; +import java.sql.Connection; import java.sql.Types; import java.util.Arrays; import java.util.HashSet; @@ -45,6 +46,8 @@ public final class PostgreSQLDatabaseMetaData implements DialectDatabaseMetaData "TABLESAMPLE", "THEN", "TIME", "TIMESTAMP", "TO", "TRAILING", "TREAT", "TRIM", "TRUE", "UNION", "UNIQUE", "USER", "USING", "VALUES", "VARCHAR", "VARIADIC", "VERBOSE", "WHEN", "WHERE", "WINDOW", "WITH", "XMLATTRIBUTES", "XMLCONCAT", "XMLELEMENT", "XMLEXISTS", "XMLFOREST", "XMLNAMESPACES", "XMLPARSE", "XMLPI", "XMLROOT", "XMLSERIALIZE", "XMLTABLE")); + private String defaultSchema; + @Override public QuoteCharacter getQuoteCharacter() { return QuoteCharacter.QUOTE; @@ -82,7 +85,13 @@ public boolean isSchemaAvailable() { @Override public Optional getDefaultSchema() { - return Optional.of("public"); + return this.defaultSchema != null ? Optional.of(this.defaultSchema) : Optional.of("public"); + } + + @Override + public String getSchema(final Connection connection) { + this.defaultSchema = DialectDatabaseMetaData.super.getSchema(connection); + return this.defaultSchema; } @Override