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 351b72901af shardingsphere driver supports url prefix (#26789)
351b72901af is described below

commit 351b72901afef90f997db63c2a2257da0ce36856
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Jul 6 15:03:01 2023 +0800

    shardingsphere driver supports url prefix (#26789)
---
 .../apache/shardingsphere/driver/ShardingSphereDriver.java    |  6 ++++--
 .../driver/jdbc/core/driver/DriverDataSourceCache.java        | 11 ++++++-----
 .../jdbc/core/driver/ShardingSphereDriverURLManager.java      |  7 ++++---
 .../jdbc/core/driver/ShardingSphereDriverURLProvider.java     |  7 ++++---
 .../jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java   |  4 ++--
 .../driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java  |  4 ++--
 .../jdbc/core/driver/spi/ClasspathDriverURLProvider.java      |  4 ++--
 .../driver/jdbc/core/driver/DriverDataSourceCacheTest.java    | 10 ++++++----
 .../jdbc/core/driver/ShardingSphereDriverURLManagerTest.java  | 10 ++++++----
 9 files changed, 36 insertions(+), 27 deletions(-)

diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
index 0f147a28bb1..cc445e558da 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
@@ -32,6 +32,8 @@ import java.util.logging.Logger;
  */
 public final class ShardingSphereDriver implements Driver {
     
+    private static final String DRIVER_URL_PREFIX = "jdbc:shardingsphere:";
+    
     private static final int MAJOR_DRIVER_VERSION = 5;
     
     private static final int MINOR_DRIVER_VERSION = 1;
@@ -48,12 +50,12 @@ public final class ShardingSphereDriver implements Driver {
     
     @Override
     public Connection connect(final String url, final Properties info) throws 
SQLException {
-        return acceptsURL(url) ? dataSourceCache.get(url).getConnection() : 
null;
+        return acceptsURL(url) ? dataSourceCache.get(url, 
DRIVER_URL_PREFIX).getConnection() : null;
     }
     
     @Override
     public boolean acceptsURL(final String url) {
-        return null != url && url.startsWith("jdbc:shardingsphere:");
+        return null != url && url.startsWith(DRIVER_URL_PREFIX);
     }
     
     @Override
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
index a48bbceea9a..6bc221bda34 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
@@ -34,21 +34,22 @@ public final class DriverDataSourceCache {
     
     /**
      * Get data source.
-     * 
+     *
      * @param url URL
+     * @param urlPrefix url prefix
      * @return got data source
      */
-    public DataSource get(final String url) {
+    public DataSource get(final String url, final String urlPrefix) {
         if (dataSourceMap.containsKey(url)) {
             return dataSourceMap.get(url);
         }
-        return dataSourceMap.computeIfAbsent(url, this::createDataSource);
+        return dataSourceMap.computeIfAbsent(url, driverUrl -> 
createDataSource(driverUrl, urlPrefix));
     }
     
     @SuppressWarnings("unchecked")
-    private <T extends Throwable> DataSource createDataSource(final String 
url) throws T {
+    private <T extends Throwable> DataSource createDataSource(final String 
url, final String urlPrefix) throws T {
         try {
-            return 
YamlShardingSphereDataSourceFactory.createDataSource(ShardingSphereDriverURLManager.getContent(url));
+            return 
YamlShardingSphereDataSourceFactory.createDataSource(ShardingSphereDriverURLManager.getContent(url,
 urlPrefix));
         } catch (final IOException ex) {
             throw (T) new SQLException(ex);
         } catch (final SQLException ex) {
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
index 6f115813e3a..47120eba5ca 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
@@ -30,15 +30,16 @@ public final class ShardingSphereDriverURLManager {
     
     /**
      * Get config content from URL.
-     * 
+     *
      * @param url driver URL
+     * @param urlPrefix url prefix
      * @return configuration content
      * @throws DriverURLProviderNotFoundException driver URL provider not 
found exception
      */
-    public static byte[] getContent(final String url) {
+    public static byte[] getContent(final String url, final String urlPrefix) {
         for (ShardingSphereDriverURLProvider each : 
ShardingSphereServiceLoader.getServiceInstances(ShardingSphereDriverURLProvider.class))
 {
             if (each.accept(url)) {
-                return each.getContent(url);
+                return each.getContent(url, urlPrefix);
             }
         }
         throw new DriverURLProviderNotFoundException(url);
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
index 0a40a2ea1b7..6237b6cffb0 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
@@ -32,9 +32,10 @@ public interface ShardingSphereDriverURLProvider {
     
     /**
      * Get config content from url.
-     * 
-     * @param url the driver url 
+     *
+     * @param url the driver url
+     * @param urlPrefix url prefix
      * @return the config content
      */
-    byte[] getContent(String url);
+    byte[] getContent(String url, String urlPrefix);
 }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
index afe4d4a22f5..f5b5ca30c33 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
@@ -44,8 +44,8 @@ public final class AbsolutePathDriverURLProvider implements 
ShardingSphereDriver
     
     @Override
     @SneakyThrows(IOException.class)
-    public byte[] getContent(final String url) {
-        String configuredFile = url.substring("jdbc:shardingsphere:".length(), 
url.contains("?") ? url.indexOf('?') : url.length());
+    public byte[] getContent(final String url, final String urlPrefix) {
+        String configuredFile = url.substring(urlPrefix.length(), 
url.contains("?") ? url.indexOf('?') : url.length());
         String file = configuredFile.substring(PATH_TYPE.length());
         Preconditions.checkArgument(!file.isEmpty(), "Configuration file is 
required in ShardingSphere driver URL.");
         try (
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
index 888c3fa6cd8..751b618e74b 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
@@ -39,8 +39,8 @@ public final class ApolloDriverURLProvider implements 
ShardingSphereDriverURLPro
     }
     
     @Override
-    public byte[] getContent(final String url) {
-        String configPath = url.substring("jdbc:shardingsphere:".length(), 
url.contains("?") ? url.indexOf('?') : url.length());
+    public byte[] getContent(final String url, final String urlPrefix) {
+        String configPath = url.substring(urlPrefix.length(), 
url.contains("?") ? url.indexOf('?') : url.length());
         String namespace = configPath.substring(APOLLO_TYPE.length());
         Preconditions.checkArgument(!namespace.isEmpty(), "Apollo namespace is 
required in ShardingSphere driver URL.");
         ConfigFile configFile = ConfigService.getConfigFile(namespace, 
ConfigFileFormat.YAML);
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
index 68f6f6be0cd..c4a5fa56b6c 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
@@ -42,8 +42,8 @@ public final class ClasspathDriverURLProvider implements 
ShardingSphereDriverURL
     
     @Override
     @SneakyThrows(IOException.class)
-    public byte[] getContent(final String url) {
-        String configuredFile = url.substring("jdbc:shardingsphere:".length(), 
url.contains("?") ? url.indexOf('?') : url.length());
+    public byte[] getContent(final String url, final String urlPrefix) {
+        String configuredFile = url.substring(urlPrefix.length(), 
url.contains("?") ? url.indexOf('?') : url.length());
         String file = configuredFile.substring(CLASSPATH_TYPE.length());
         Preconditions.checkArgument(!file.isEmpty(), "Configuration file is 
required in ShardingSphere driver URL.");
         try (
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
index b002686e318..e976ebe0e2a 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
@@ -27,19 +27,21 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 class DriverDataSourceCacheTest {
     
+    private static final String DRIVER_URL_PREFIX = "jdbc:shardingsphere:";
+    
     @Test
     void assertGetNewDataSource() {
         DriverDataSourceCache dataSourceCache = new DriverDataSourceCache();
-        DataSource fooDataSource = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
-        DataSource barDataSource = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/bar-driver-fixture.yaml");
+        DataSource fooDataSource = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
 DRIVER_URL_PREFIX);
+        DataSource barDataSource = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/bar-driver-fixture.yaml",
 DRIVER_URL_PREFIX);
         assertThat(fooDataSource, not(barDataSource));
     }
     
     @Test
     void assertGetExistedDataSource() {
         DriverDataSourceCache dataSourceCache = new DriverDataSourceCache();
-        DataSource dataSource1 = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
-        DataSource dataSource2 = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
+        DataSource dataSource1 = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
 DRIVER_URL_PREFIX);
+        DataSource dataSource2 = 
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
 DRIVER_URL_PREFIX);
         assertThat(dataSource1, is(dataSource2));
     }
 }
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
index d07e5810357..b67572a7759 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
@@ -43,21 +43,23 @@ class ShardingSphereDriverURLManagerTest {
     
     private final int fooDriverConfigLength = 999;
     
+    private final String urlPrefix = "jdbc:shardingsphere:";
+    
     @Test
     void assertNewConstructorWithEmptyURL() {
-        assertThrows(DriverURLProviderNotFoundException.class, () -> 
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:"));
+        assertThrows(DriverURLProviderNotFoundException.class, () -> 
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:", urlPrefix));
     }
     
     @Test
     void assertToClasspathConfigurationFile() {
-        byte[] actual = 
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
+        byte[] actual = 
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
 urlPrefix);
         assertThat(actual.length, is(fooDriverConfigLength));
     }
     
     @Test
     void assertToAbsolutePathConfigurationFile() {
         String absolutePath = 
Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("config/driver/foo-driver-fixture.yaml")).getPath();
-        byte[] actual = 
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:absolutepath:" + 
absolutePath);
+        byte[] actual = 
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:absolutepath:" + 
absolutePath, urlPrefix);
         assertThat(actual.length, is(fooDriverConfigLength));
     }
     
@@ -67,7 +69,7 @@ class ShardingSphereDriverURLManagerTest {
         when(configFile.getContent()).thenReturn("config content");
         when(ConfigService.getConfigFile(anyString(), 
any(ConfigFileFormat.class))).thenReturn(configFile);
         String url = "jdbc:shardingsphere:apollo:namespace";
-        byte[] content = ShardingSphereDriverURLManager.getContent(url);
+        byte[] content = ShardingSphereDriverURLManager.getContent(url, 
urlPrefix);
         assertThat("config content".getBytes(StandardCharsets.UTF_8), 
is(content));
     }
 }

Reply via email to