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

zhonghongsheng 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 da49563  Add isInSameDatabaseInstance method for H2DataSourceMetaData 
to support jdbc url contains ssl/tcp/file (#13540)
da49563 is described below

commit da4956301e23bb7d30dce136dcbd360b822a5436
Author: lichengxin813 <[email protected]>
AuthorDate: Thu Nov 11 13:43:06 2021 +0800

    Add isInSameDatabaseInstance method for H2DataSourceMetaData to support 
jdbc url contains ssl/tcp/file (#13540)
    
    * add isInSameDatabaseInstance method for H2DataSourceMetaData to support 
ssl/tcp url
    
    * delete MemorizedDataSourceMetaData
    
    * extract dataSourceMetaDataMap.get(dataSourceName)
---
 .../database/metadata/DataSourceMetaData.java      | 10 +++++++++
 .../metadata/MemorizedDataSourceMetaData.java      | 24 ----------------------
 .../metadata/dialect/H2DataSourceMetaData.java     | 15 +++++++++++---
 .../metadata/resource/DataSourcesMetaData.java     | 10 ++-------
 4 files changed, 24 insertions(+), 35 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
index 1493b7d..a12073b 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/DataSourceMetaData.java
@@ -49,4 +49,14 @@ public interface DataSourceMetaData {
      * @return schema
      */
     String getSchema();
+    
+    /**
+     * Judge whether two of data sources are in the same database instance.
+     *
+     * @param dataSourceMetaData data source meta data
+     * @return data sources are in the same database instance or not
+     */
+    default boolean isInSameDatabaseInstance(final DataSourceMetaData 
dataSourceMetaData) {
+        return getHostName().equals(dataSourceMetaData.getHostName()) && 
getPort() == dataSourceMetaData.getPort();
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/MemorizedDataSourceMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/MemorizedDataSourceMetaData.java
deleted file mode 100644
index 02c61c3..0000000
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/MemorizedDataSourceMetaData.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.database.metadata;
-
-/**
- * Memorized data source meta data.
- */
-public interface MemorizedDataSourceMetaData extends DataSourceMetaData {
-}
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
index 68bd907..c048e66 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/database/metadata/dialect/H2DataSourceMetaData.java
@@ -18,9 +18,10 @@
 package org.apache.shardingsphere.infra.database.metadata.dialect;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.infra.database.metadata.MemorizedDataSourceMetaData;
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
 import 
org.apache.shardingsphere.infra.database.metadata.UnrecognizedDatabaseURLException;
 
+import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -28,10 +29,12 @@ import java.util.regex.Pattern;
  * Data source meta data for H2.
  */
 @Getter
-public final class H2DataSourceMetaData implements MemorizedDataSourceMetaData 
{
+public final class H2DataSourceMetaData implements DataSourceMetaData {
     
     private static final int DEFAULT_PORT = -1;
     
+    private static final String DEFAULT_HOST_NAME = "";
+    
     private final String hostName;
     
     private final int port;
@@ -56,9 +59,15 @@ public final class H2DataSourceMetaData implements 
MemorizedDataSourceMetaData {
         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())
+                : 
DataSourceMetaData.super.isInSameDatabaseInstance(dataSourceMetaData);
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
index 3decf4d..1defcea 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/resource/DataSourcesMetaData.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.infra.metadata.resource;
 
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import 
org.apache.shardingsphere.infra.database.metadata.MemorizedDataSourceMetaData;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.config.DatabaseAccessConfiguration;
 
@@ -27,7 +26,6 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -59,12 +57,8 @@ public final class DataSourcesMetaData {
     }
     
     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();
+        DataSourceMetaData dataSourceMetaData = 
dataSourceMetaDataMap.get(dataSourceName);
+        return existedDataSourceNames.stream().anyMatch(each -> 
dataSourceMetaData.isInSameDatabaseInstance(dataSourceMetaDataMap.get(each)));
     }
     
     /**

Reply via email to