This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 99a53400f5f Optimize ShardingSphereDatabaseMetaData getActualSchema
and getActualCatalog logic (#29660)
99a53400f5f is described below
commit 99a53400f5fa0fea38e3adce6193005a6010a98a
Author: Chuxin Chen <[email protected]>
AuthorDate: Fri Jan 5 15:57:41 2024 +0800
Optimize ShardingSphereDatabaseMetaData getActualSchema and
getActualCatalog logic (#29660)
---
.../datasource/metadata/ShardingSphereDatabaseMetaData.java | 13 ++++++++++---
.../metadata/ShardingSphereDatabaseMetaDataTest.java | 5 +++++
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
index aa13f33ccd6..29f37c764f3 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
@@ -21,7 +21,6 @@ import com.google.common.base.Strings;
import org.apache.shardingsphere.driver.jdbc.adapter.AdaptedDatabaseMetaData;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import
org.apache.shardingsphere.infra.database.core.connector.ConnectionProperties;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
@@ -222,15 +221,23 @@ public final class ShardingSphereDatabaseMetaData extends
AdaptedDatabaseMetaDat
}
private String getActualCatalog(final String catalog) {
+ if (null == catalog) {
+ return null;
+ }
+ // TODO consider get actual catalog by logic catalog rather than
random physical datasource's catalog.
ConnectionProperties connectionProps = connection.getContextManager()
.getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getStorageUnits().get(getDataSourceName()).getConnectionProperties();
- return null == catalog ||
!catalog.contains(DefaultDatabase.LOGIC_NAME) ? catalog :
connectionProps.getCatalog();
+ return connectionProps.getCatalog();
}
private String getActualSchema(final String schema) {
+ if (null == schema) {
+ return null;
+ }
+ // TODO consider get actual schema by logic catalog rather than random
physical datasource's schema.
ConnectionProperties connectionProps = connection.getContextManager()
.getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getStorageUnits().get(getDataSourceName()).getConnectionProperties();
- return null == schema || !schema.contains(DefaultDatabase.LOGIC_NAME)
? schema : connectionProps.getSchema();
+ return
Optional.ofNullable(connectionProps.getSchema()).map(String::toUpperCase).orElse(null);
}
private String getDataSourceName() {
diff --git
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
index 48522a9d5be..30ebcad91a7 100644
---
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
+++
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
@@ -21,6 +21,7 @@ import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import
org.apache.shardingsphere.infra.database.core.connector.ConnectionProperties;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -95,6 +96,10 @@ class ShardingSphereDatabaseMetaDataTest {
when(metaDataContexts.getMetaData().getDatabase(shardingSphereConnection.getDatabaseName())).thenReturn(database);
ShardingRule shardingRule = mockShardingRule();
when(database.getRuleMetaData().getRules()).thenReturn(Collections.singleton(shardingRule));
+ ConnectionProperties connectionProperties =
mock(ConnectionProperties.class);
+ when(connectionProperties.getCatalog()).thenReturn("test");
+ when(connectionProperties.getSchema()).thenReturn("test");
+
when(database.getResourceMetaData().getStorageUnits().get(DATA_SOURCE_NAME).getConnectionProperties()).thenReturn(connectionProperties);
shardingSphereDatabaseMetaData = new
ShardingSphereDatabaseMetaData(shardingSphereConnection);
}