You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2021/11/10 12:07:44 UTC

[GitHub] [shardingsphere] sandynz commented on a change in pull request #13540: add isInSameDatabaseInstance method for H2DataSourceMetaData to suppo…

sandynz commented on a change in pull request #13540:
URL: https://github.com/apache/shardingsphere/pull/13540#discussion_r746522758



##########
File path: shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
##########
@@ -56,9 +60,15 @@ public H2DataSourceMetaData(final String url) {
         String hostNameFromMatcher = matcher.group("hostName");
         boolean setPort = null != portFromMatcher && !portFromMatcher.isEmpty();
         String name = null == nameFromMatcher ? fileNameFromMatcher : nameFromMatcher;
-        hostName = null == hostNameFromMatcher ? "" : hostNameFromMatcher;
+        hostName = null == hostNameFromMatcher ? DEFAULT_HOST_NAME : hostNameFromMatcher;
         port = setPort ? Integer.parseInt(portFromMatcher) : DEFAULT_PORT;
         catalog = null == catalogFromMatcher ? name : catalogFromMatcher;
         schema = null;
     }
+    
+    @Override
+    public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) {
+        return DEFAULT_HOST_NAME.equals(hostName) && DEFAULT_PORT == port ? Objects.equals(schema, dataSourceMetaData.getSchema())
+                : MemorizedDataSourceMetaData.super.isInSameDatabaseInstance(dataSourceMetaData);

Review comment:
       Is `MemorizedDataSourceMetaData` still needed?

##########
File path: shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
##########
@@ -59,12 +57,7 @@ public DataSourcesMetaData(final DatabaseType databaseType, final Map<String, Da
     }
     
     private boolean isExisted(final String dataSourceName, final Collection<String> existedDataSourceNames) {
-        return existedDataSourceNames.stream().anyMatch(each -> isInSameDatabaseInstance(dataSourceMetaDataMap.get(dataSourceName), dataSourceMetaDataMap.get(each)));
-    }
-    
-    private boolean isInSameDatabaseInstance(final DataSourceMetaData sample, final DataSourceMetaData target) {
-        return sample instanceof MemorizedDataSourceMetaData
-                ? Objects.equals(target.getSchema(), sample.getSchema()) : target.getHostName().equals(sample.getHostName()) && target.getPort() == sample.getPort();
+        return existedDataSourceNames.stream().anyMatch(each -> dataSourceMetaDataMap.get(dataSourceName).isInSameDatabaseInstance(dataSourceMetaDataMap.get(each)));

Review comment:
       `dataSourceMetaDataMap.get(dataSourceName)` could be extracted for execution only once.

##########
File path: shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
##########
@@ -56,9 +60,15 @@ public H2DataSourceMetaData(final String url) {
         String hostNameFromMatcher = matcher.group("hostName");
         boolean setPort = null != portFromMatcher && !portFromMatcher.isEmpty();
         String name = null == nameFromMatcher ? fileNameFromMatcher : nameFromMatcher;
-        hostName = null == hostNameFromMatcher ? "" : hostNameFromMatcher;
+        hostName = null == hostNameFromMatcher ? DEFAULT_HOST_NAME : hostNameFromMatcher;
         port = setPort ? Integer.parseInt(portFromMatcher) : DEFAULT_PORT;
         catalog = null == catalogFromMatcher ? name : catalogFromMatcher;
         schema = null;
     }
+    
+    @Override
+    public boolean isInSameDatabaseInstance(final DataSourceMetaData dataSourceMetaData) {
+        return DEFAULT_HOST_NAME.equals(hostName) && DEFAULT_PORT == port ? Objects.equals(schema, dataSourceMetaData.getSchema())

Review comment:
       If current H2 use memory or file mode, is it checked for `dataSourceMetaData`?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org