This is an automated email from the ASF dual-hosted git repository. zhangliang 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 8a72bb1dc07 Add DialectDefaultQueryPropertiesProvider to decuple ConnectionProperties.defaultQueryProperties (#36399) 8a72bb1dc07 is described below commit 8a72bb1dc07b86877e4e21d022d0deb8147d4ef6 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Aug 24 13:18:04 2025 +0800 Add DialectDefaultQueryPropertiesProvider to decuple ConnectionProperties.defaultQueryProperties (#36399) * Add DialectDefaultQueryPropertiesProvider to decuple ConnectionProperties.defaultQueryProperties * Add DialectDefaultQueryPropertiesProvider to decuple ConnectionProperties.defaultQueryProperties --- ... => DialectDefaultQueryPropertiesProvider.java} | 34 ++++++++-------------- .../core/jdbcurl/parser/ConnectionProperties.java | 6 ---- .../jdbcurl/judger/DatabaseInstanceJudgerTest.java | 14 +++++---- .../ClickHouseConnectionPropertiesParser.java | 4 +-- .../FirebirdConnectionPropertiesParser.java | 2 +- .../h2/jdbcurl/H2ConnectionPropertiesParser.java | 3 +- .../jdbcurl/HiveConnectionPropertiesParser.java | 2 +- .../jdbcurl/MySQLConnectionPropertiesParser.java | 25 ++-------------- ...va => MySQLDefaultQueryPropertiesProvider.java} | 19 +++--------- ...e.jdbcurl.DialectDefaultQueryPropertiesProvider | 18 ++++++++++++ .../OpenGaussConnectionPropertiesParser.java | 5 +--- .../jdbcurl/OracleConnectionPropertiesParser.java | 5 ++-- .../PostgreSQLConnectionPropertiesParser.java | 5 +--- .../jdbcurl/PrestoConnectionPropertiesParser.java | 5 +--- .../jdbcurl/SQL92ConnectionPropertiesParser.java | 3 +- .../SQLServerConnectionPropertiesParser.java | 3 +- .../pool/creator/DataSourcePoolReflection.java | 18 ++++++++---- .../MockedConnectionPropertiesParser.java | 4 ++- 18 files changed, 73 insertions(+), 102 deletions(-) diff --git a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/DialectDefaultQueryPropertiesProvider.java similarity index 58% copy from database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java copy to database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/DialectDefaultQueryPropertiesProvider.java index 69c66338eec..7c303ef077e 100644 --- a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java +++ b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/DialectDefaultQueryPropertiesProvider.java @@ -15,33 +15,23 @@ * limitations under the License. */ -package org.apache.shardingsphere.database.connector.core.jdbcurl.parser; +package org.apache.shardingsphere.database.connector.core.jdbcurl; -import lombok.Getter; -import lombok.RequiredArgsConstructor; +import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI; +import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI; import java.util.Properties; /** - * Connection properties. + * Dialect default query properties provider. */ -@RequiredArgsConstructor -@Getter -public final class ConnectionProperties { +@SingletonSPI +public interface DialectDefaultQueryPropertiesProvider extends DatabaseTypedSPI { - private final String hostname; - - private final int port; - - private final String catalog; - - private final String schema; - - private final Properties queryProperties; - - private final Properties defaultQueryProperties; - - public ConnectionProperties(final String hostname, final int port, final String catalog, final String schema) { - this(hostname, port, catalog, schema, new Properties(), new Properties()); - } + /** + * Get default query properties. + * + * @return default query properties + */ + Properties getDefaultQueryProperties(); } diff --git a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java index 69c66338eec..be803b5f14e 100644 --- a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java +++ b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/jdbcurl/parser/ConnectionProperties.java @@ -38,10 +38,4 @@ public final class ConnectionProperties { private final String schema; private final Properties queryProperties; - - private final Properties defaultQueryProperties; - - public ConnectionProperties(final String hostname, final int port, final String catalog, final String schema) { - this(hostname, port, catalog, schema, new Properties(), new Properties()); - } } diff --git a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java index 9581f2c7458..5b5e2971bf6 100644 --- a/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java +++ b/database/connector/core/src/test/java/org/apache/shardingsphere/database/connector/core/jdbcurl/judger/DatabaseInstanceJudgerTest.java @@ -20,6 +20,8 @@ package org.apache.shardingsphere.database.connector.core.jdbcurl.judger; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties; import org.junit.jupiter.api.Test; +import java.util.Properties; + import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -27,22 +29,22 @@ class DatabaseInstanceJudgerTest { @Test void assertIsInSameDatabaseInstance() { - ConnectionProperties connectionProps1 = new ConnectionProperties("127.0.0.1", 9999, "foo", "foo"); - ConnectionProperties connectionProps2 = new ConnectionProperties("127.0.0.1", 9999, "bar", "bar"); + ConnectionProperties connectionProps1 = new ConnectionProperties("127.0.0.1", 9999, "foo", "foo", new Properties()); + ConnectionProperties connectionProps2 = new ConnectionProperties("127.0.0.1", 9999, "bar", "bar", new Properties()); assertTrue(DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, connectionProps2)); } @Test void assertIsNotInSameDatabaseInstanceWithDifferentHostname() { - ConnectionProperties connectionProps1 = new ConnectionProperties("127.0.0.1", 9999, "foo", "foo"); - ConnectionProperties connectionProps2 = new ConnectionProperties("127.0.0.2", 9999, "foo", "foo"); + ConnectionProperties connectionProps1 = new ConnectionProperties("127.0.0.1", 9999, "foo", "foo", new Properties()); + ConnectionProperties connectionProps2 = new ConnectionProperties("127.0.0.2", 9999, "foo", "foo", new Properties()); assertFalse(DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, connectionProps2)); } @Test void assertIsNotInSameDatabaseInstanceWithDifferentPort() { - ConnectionProperties connectionProps1 = new ConnectionProperties("127.0.0.1", 9999, "foo", "foo"); - ConnectionProperties connectionProps2 = new ConnectionProperties("127.0.0.1", 8888, "foo", "foo"); + ConnectionProperties connectionProps1 = new ConnectionProperties("127.0.0.1", 9999, "foo", "foo", new Properties()); + ConnectionProperties connectionProps2 = new ConnectionProperties("127.0.0.1", 8888, "foo", "foo", new Properties()); assertFalse(DatabaseInstanceJudger.isInSameDatabaseInstance(connectionProps1, connectionProps2)); } } diff --git a/database/connector/dialect/clickhouse/src/main/java/org/apache/shardingsphere/database/connector/clickhouse/jdbcurl/ClickHouseConnectionPropertiesParser.java b/database/connector/dialect/clickhouse/src/main/java/org/apache/shardingsphere/database/connector/clickhouse/jdbcurl/ClickHouseConnectionPropertiesParser.java index 2c71901557f..1f3d39d722f 100644 --- a/database/connector/dialect/clickhouse/src/main/java/org/apache/shardingsphere/database/connector/clickhouse/jdbcurl/ClickHouseConnectionPropertiesParser.java +++ b/database/connector/dialect/clickhouse/src/main/java/org/apache/shardingsphere/database/connector/clickhouse/jdbcurl/ClickHouseConnectionPropertiesParser.java @@ -22,8 +22,6 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; -import java.util.Properties; - /** * Connection properties parser of ClickHouse. */ @@ -35,7 +33,7 @@ public final class ClickHouseConnectionPropertiesParser implements ConnectionPro public ConnectionProperties parse(final String url, final String username, final String catalog) { StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); return new ConnectionProperties( - standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties(), new Properties()); + standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties()); } @Override diff --git a/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/jdbcurl/FirebirdConnectionPropertiesParser.java b/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/jdbcurl/FirebirdConnectionPropertiesParser.java index 93330aaa600..95391c31b60 100644 --- a/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/jdbcurl/FirebirdConnectionPropertiesParser.java +++ b/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/jdbcurl/FirebirdConnectionPropertiesParser.java @@ -42,7 +42,7 @@ public final class FirebirdConnectionPropertiesParser implements ConnectionPrope String databaseName = attachObjectName.contains("?") ? attachObjectName.split("\\?")[0] : attachObjectName; Properties queryProps = new Properties(); queryProps.putAll(FBDriver.normalizeProperties(url, new Properties())); - return new ConnectionProperties(dbAttachInfo.getServerName(), dbAttachInfo.getPortNumber(), databaseName, null, queryProps, new Properties()); + return new ConnectionProperties(dbAttachInfo.getServerName(), dbAttachInfo.getPortNumber(), databaseName, null, queryProps); } @Override diff --git a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesParser.java b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesParser.java index 609ee9e83df..aeb8513add1 100644 --- a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesParser.java +++ b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/jdbcurl/H2ConnectionPropertiesParser.java @@ -25,7 +25,6 @@ import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions; import org.apache.shardingsphere.infra.util.props.PropertiesBuilder; import org.apache.shardingsphere.infra.util.props.PropertiesBuilder.Property; -import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -46,7 +45,7 @@ public final class H2ConnectionPropertiesParser implements ConnectionPropertiesP public ConnectionProperties parse(final String url, final String username, final String catalog) { Matcher matcher = URL_PATTERN.matcher(url); ShardingSpherePreconditions.checkState(matcher.find(), () -> new UnrecognizedDatabaseURLException(url, URL_PATTERN.pattern())); - return new ConnectionProperties(getHostname(matcher), getPort(matcher), getCatalog(matcher), null, PropertiesBuilder.build(new Property("model", getModel(matcher))), new Properties()); + return new ConnectionProperties(getHostname(matcher), getPort(matcher), getCatalog(matcher), null, PropertiesBuilder.build(new Property("model", getModel(matcher)))); } private String getHostname(final Matcher matcher) { diff --git a/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/jdbcurl/HiveConnectionPropertiesParser.java b/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/jdbcurl/HiveConnectionPropertiesParser.java index 4e320b7a0b8..680f2954621 100644 --- a/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/jdbcurl/HiveConnectionPropertiesParser.java +++ b/database/connector/dialect/hive/src/main/java/org/apache/shardingsphere/database/connector/hive/jdbcurl/HiveConnectionPropertiesParser.java @@ -46,7 +46,7 @@ public final class HiveConnectionPropertiesParser implements ConnectionPropertie queryProps.putAll(params.getSessionVars()); queryProps.putAll(params.getHiveConfs()); queryProps.putAll(params.getHiveVars()); - return new ConnectionProperties(params.getHost(), params.getPort(), params.getDbName(), null, queryProps, new Properties()); + return new ConnectionProperties(params.getHost(), params.getPort(), params.getDbName(), null, queryProps); } @Override diff --git a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java index 6c04a99e6eb..348a471cddf 100644 --- a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java +++ b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java @@ -22,8 +22,6 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; -import java.util.Properties; - /** * Connection properties parser of MySQL. */ @@ -34,27 +32,8 @@ public final class MySQLConnectionPropertiesParser implements ConnectionProperti @Override public ConnectionProperties parse(final String url, final String username, final String catalog) { StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); - return new ConnectionProperties(standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), - null == catalog ? standardJdbcUrl.getDatabase() : catalog, null, standardJdbcUrl.getQueryProperties(), buildDefaultQueryProperties()); - } - - private Properties buildDefaultQueryProperties() { - Properties result = new Properties(); - result.setProperty("useServerPrepStmts", Boolean.TRUE.toString()); - result.setProperty("cachePrepStmts", Boolean.TRUE.toString()); - result.setProperty("prepStmtCacheSize", "8192"); - result.setProperty("prepStmtCacheSqlLimit", "2048"); - result.setProperty("useLocalSessionState", Boolean.TRUE.toString()); - result.setProperty("rewriteBatchedStatements", Boolean.TRUE.toString()); - result.setProperty("cacheResultSetMetadata", Boolean.FALSE.toString()); - result.setProperty("cacheServerConfiguration", Boolean.TRUE.toString()); - result.setProperty("elideSetAutoCommits", Boolean.TRUE.toString()); - result.setProperty("maintainTimeStats", Boolean.FALSE.toString()); - result.setProperty("netTimeoutForStreamingResults", "0"); - result.setProperty("tinyInt1isBit", Boolean.FALSE.toString()); - result.setProperty("useSSL", Boolean.FALSE.toString()); - result.setProperty("zeroDateTimeBehavior", "round"); - return result; + return new ConnectionProperties( + standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), null == catalog ? standardJdbcUrl.getDatabase() : catalog, null, standardJdbcUrl.getQueryProperties()); } @Override diff --git a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLDefaultQueryPropertiesProvider.java similarity index 67% copy from database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java copy to database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLDefaultQueryPropertiesProvider.java index 6c04a99e6eb..78973b88fbf 100644 --- a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLConnectionPropertiesParser.java +++ b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/jdbcurl/MySQLDefaultQueryPropertiesProvider.java @@ -17,28 +17,17 @@ package org.apache.shardingsphere.database.connector.mysql.jdbcurl; -import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties; -import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionPropertiesParser; -import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; -import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; +import org.apache.shardingsphere.database.connector.core.jdbcurl.DialectDefaultQueryPropertiesProvider; import java.util.Properties; /** - * Connection properties parser of MySQL. + * Default query properties provider for MySQL. */ -public final class MySQLConnectionPropertiesParser implements ConnectionPropertiesParser { - - private static final int DEFAULT_PORT = 3306; +public final class MySQLDefaultQueryPropertiesProvider implements DialectDefaultQueryPropertiesProvider { @Override - public ConnectionProperties parse(final String url, final String username, final String catalog) { - StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); - return new ConnectionProperties(standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), - null == catalog ? standardJdbcUrl.getDatabase() : catalog, null, standardJdbcUrl.getQueryProperties(), buildDefaultQueryProperties()); - } - - private Properties buildDefaultQueryProperties() { + public Properties getDefaultQueryProperties() { Properties result = new Properties(); result.setProperty("useServerPrepStmts", Boolean.TRUE.toString()); result.setProperty("cachePrepStmts", Boolean.TRUE.toString()); diff --git a/database/connector/dialect/mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.database.connector.core.jdbcurl.DialectDefaultQueryPropertiesProvider b/database/connector/dialect/mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.database.connector.core.jdbcurl.DialectDefaultQueryPropertiesProvider new file mode 100644 index 00000000000..ae4b6ca7a07 --- /dev/null +++ b/database/connector/dialect/mysql/src/main/resources/META-INF/services/org.apache.shardingsphere.database.connector.core.jdbcurl.DialectDefaultQueryPropertiesProvider @@ -0,0 +1,18 @@ +# +# 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. +# + +org.apache.shardingsphere.database.connector.mysql.jdbcurl.MySQLDefaultQueryPropertiesProvider diff --git a/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/jdbcurl/OpenGaussConnectionPropertiesParser.java b/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/jdbcurl/OpenGaussConnectionPropertiesParser.java index 5ce6d098fef..986f109ccd7 100644 --- a/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/jdbcurl/OpenGaussConnectionPropertiesParser.java +++ b/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/jdbcurl/OpenGaussConnectionPropertiesParser.java @@ -22,8 +22,6 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; -import java.util.Properties; - /** * Connection properties parser of openGauss. */ @@ -34,8 +32,7 @@ public final class OpenGaussConnectionPropertiesParser implements ConnectionProp @Override public ConnectionProperties parse(final String url, final String username, final String catalog) { StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); - return new ConnectionProperties( - standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties(), new Properties()); + return new ConnectionProperties(standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties()); } @Override diff --git a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/jdbcurl/OracleConnectionPropertiesParser.java b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/jdbcurl/OracleConnectionPropertiesParser.java index 357d63ee58b..40b3e0f1131 100644 --- a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/jdbcurl/OracleConnectionPropertiesParser.java +++ b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/jdbcurl/OracleConnectionPropertiesParser.java @@ -24,6 +24,7 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import java.util.Arrays; import java.util.List; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -50,11 +51,11 @@ public final class OracleConnectionPropertiesParser implements ConnectionPropert } private ConnectionProperties getThinConnectionProperties(final String username, final Matcher matcher) { - return new ConnectionProperties(matcher.group(3), Strings.isNullOrEmpty(matcher.group(4)) ? DEFAULT_PORT : Integer.parseInt(matcher.group(4)), matcher.group(5), username); + return new ConnectionProperties(matcher.group(3), Strings.isNullOrEmpty(matcher.group(4)) ? DEFAULT_PORT : Integer.parseInt(matcher.group(4)), matcher.group(5), username, new Properties()); } private ConnectionProperties getStandardConnectionProperties(final String username, final Matcher matcher) { - return new ConnectionProperties(matcher.group(2), Strings.isNullOrEmpty(matcher.group(3)) ? DEFAULT_PORT : Integer.parseInt(matcher.group(3)), matcher.group(4), username); + return new ConnectionProperties(matcher.group(2), Strings.isNullOrEmpty(matcher.group(3)) ? DEFAULT_PORT : Integer.parseInt(matcher.group(3)), matcher.group(4), username, new Properties()); } @Override diff --git a/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/jdbcurl/PostgreSQLConnectionPropertiesParser.java b/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/jdbcurl/PostgreSQLConnectionPropertiesParser.java index d30be21a5b1..985415e9c2b 100644 --- a/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/jdbcurl/PostgreSQLConnectionPropertiesParser.java +++ b/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/jdbcurl/PostgreSQLConnectionPropertiesParser.java @@ -22,8 +22,6 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; -import java.util.Properties; - /** * Connection properties parser of PostgreSQL. */ @@ -34,8 +32,7 @@ public final class PostgreSQLConnectionPropertiesParser implements ConnectionPro @Override public ConnectionProperties parse(final String url, final String username, final String catalog) { StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); - return new ConnectionProperties( - standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties(), new Properties()); + return new ConnectionProperties(standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties()); } @Override diff --git a/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/jdbcurl/PrestoConnectionPropertiesParser.java b/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/jdbcurl/PrestoConnectionPropertiesParser.java index 8336ee34eb8..61b423f5a0c 100644 --- a/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/jdbcurl/PrestoConnectionPropertiesParser.java +++ b/database/connector/dialect/presto/src/main/java/org/apache/shardingsphere/database/connector/presto/jdbcurl/PrestoConnectionPropertiesParser.java @@ -22,8 +22,6 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; -import java.util.Properties; - /** * Connection properties parser of Presto. */ @@ -34,8 +32,7 @@ public final class PrestoConnectionPropertiesParser implements ConnectionPropert @Override public ConnectionProperties parse(final String url, final String username, final String catalog) { StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); - return new ConnectionProperties( - standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties(), new Properties()); + return new ConnectionProperties(standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(DEFAULT_PORT), standardJdbcUrl.getDatabase(), null, standardJdbcUrl.getQueryProperties()); } @Override diff --git a/database/connector/dialect/sql92/src/main/java/org/apache/shardingsphere/database/connector/sql92/jdbcurl/SQL92ConnectionPropertiesParser.java b/database/connector/dialect/sql92/src/main/java/org/apache/shardingsphere/database/connector/sql92/jdbcurl/SQL92ConnectionPropertiesParser.java index 42b18e8a8e2..675f0f2b27c 100644 --- a/database/connector/dialect/sql92/src/main/java/org/apache/shardingsphere/database/connector/sql92/jdbcurl/SQL92ConnectionPropertiesParser.java +++ b/database/connector/dialect/sql92/src/main/java/org/apache/shardingsphere/database/connector/sql92/jdbcurl/SQL92ConnectionPropertiesParser.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionPropertiesParser; import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,7 +39,7 @@ public final class SQL92ConnectionPropertiesParser implements ConnectionProperti public ConnectionProperties parse(final String url, final String username, final String catalog) { Matcher matcher = URL_PATTERN.matcher(url); ShardingSpherePreconditions.checkState(matcher.find(), () -> new UnrecognizedDatabaseURLException(url, URL_PATTERN.pattern())); - return new ConnectionProperties("", DEFAULT_PORT, "", null); + return new ConnectionProperties("", DEFAULT_PORT, "", null, new Properties()); } @Override diff --git a/database/connector/dialect/sqlserver/src/main/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/jdbcurl/SQLServerConnectionPropertiesParser.java b/database/connector/dialect/sqlserver/src/main/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/jdbcurl/SQLServerConnectionPropertiesParser.java index 9ffaa97e128..ab05209c92c 100644 --- a/database/connector/dialect/sqlserver/src/main/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/jdbcurl/SQLServerConnectionPropertiesParser.java +++ b/database/connector/dialect/sqlserver/src/main/java/org/apache/shardingsphere/database/connector/sql92/sqlserver/jdbcurl/SQLServerConnectionPropertiesParser.java @@ -23,6 +23,7 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionPropertiesParser; import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -39,7 +40,7 @@ public final class SQLServerConnectionPropertiesParser implements ConnectionProp public ConnectionProperties parse(final String url, final String username, final String catalog) { Matcher matcher = URL_PATTERN.matcher(url); ShardingSpherePreconditions.checkState(matcher.find(), () -> new UnrecognizedDatabaseURLException(url, URL_PATTERN.pattern())); - return new ConnectionProperties(matcher.group(2), Strings.isNullOrEmpty(matcher.group(3)) ? DEFAULT_PORT : Integer.parseInt(matcher.group(3)), matcher.group(5), null); + return new ConnectionProperties(matcher.group(2), Strings.isNullOrEmpty(matcher.group(3)) ? DEFAULT_PORT : Integer.parseInt(matcher.group(3)), matcher.group(5), null, new Properties()); } @Override diff --git a/infra/data-source-pool/core/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolReflection.java b/infra/data-source-pool/core/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolReflection.java index 0223d2b3305..9ae608439cb 100644 --- a/infra/data-source-pool/core/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolReflection.java +++ b/infra/data-source-pool/core/src/main/java/org/apache/shardingsphere/infra/datasource/pool/creator/DataSourcePoolReflection.java @@ -19,9 +19,11 @@ package org.apache.shardingsphere.infra.datasource.pool.creator; import com.google.common.base.CaseFormat; import lombok.SneakyThrows; +import org.apache.shardingsphere.database.connector.core.jdbcurl.DialectDefaultQueryPropertiesProvider; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionProperties; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.ConnectionPropertiesParser; import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader; +import org.apache.shardingsphere.database.connector.core.type.DatabaseType; import org.apache.shardingsphere.database.connector.core.type.DatabaseTypeFactory; import org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData; import org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaDataReflection; @@ -177,14 +179,18 @@ public final class DataSourcePoolReflection { if (!jdbcUrl.isPresent() || !jdbcConnectionProps.isPresent()) { return; } - ConnectionProperties connectionProps = DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, DatabaseTypeFactory.get(jdbcUrl.get())).parse(jdbcUrl.get(), null, null); + DatabaseType databaseType = DatabaseTypeFactory.get(jdbcUrl.get()); + ConnectionProperties connectionProps = DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, databaseType).parse(jdbcUrl.get(), null, null); Properties queryProps = connectionProps.getQueryProperties(); Properties jdbcProps = jdbcConnectionProps.get(); - for (Entry<Object, Object> entry : connectionProps.getDefaultQueryProperties().entrySet()) { - String defaultPropertyKey = entry.getKey().toString(); - String defaultPropertyValue = entry.getValue().toString(); - if (!containsDefaultProperty(defaultPropertyKey, jdbcProps, queryProps)) { - jdbcProps.setProperty(defaultPropertyKey, defaultPropertyValue); + Optional<DialectDefaultQueryPropertiesProvider> defaultQueryPropertiesProvider = DatabaseTypedSPILoader.findService(DialectDefaultQueryPropertiesProvider.class, databaseType); + if (defaultQueryPropertiesProvider.isPresent()) { + for (Entry<Object, Object> entry : defaultQueryPropertiesProvider.get().getDefaultQueryProperties().entrySet()) { + String defaultPropertyKey = entry.getKey().toString(); + String defaultPropertyValue = entry.getValue().toString(); + if (!containsDefaultProperty(defaultPropertyKey, jdbcProps, queryProps)) { + jdbcProps.setProperty(defaultPropertyKey, defaultPropertyValue); + } } } setField(metaData.getFieldMetaData().getJdbcUrlPropertiesFieldName(), jdbcProps); diff --git a/test/infra/fixture/database/src/main/java/org/apache/shardingsphere/test/infra/fixture/connector/MockedConnectionPropertiesParser.java b/test/infra/fixture/database/src/main/java/org/apache/shardingsphere/test/infra/fixture/connector/MockedConnectionPropertiesParser.java index 4bc2c6f07cf..b2d53136845 100644 --- a/test/infra/fixture/database/src/main/java/org/apache/shardingsphere/test/infra/fixture/connector/MockedConnectionPropertiesParser.java +++ b/test/infra/fixture/database/src/main/java/org/apache/shardingsphere/test/infra/fixture/connector/MockedConnectionPropertiesParser.java @@ -23,6 +23,8 @@ import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.Connecti import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrl; import org.apache.shardingsphere.database.connector.core.jdbcurl.parser.standard.StandardJdbcUrlParser; +import java.util.Properties; + /** * Mocked connection properties parser. */ @@ -32,7 +34,7 @@ public final class MockedConnectionPropertiesParser implements ConnectionPropert public ConnectionProperties parse(final String url, final String username, final String catalog) { StandardJdbcUrl standardJdbcUrl = new StandardJdbcUrlParser().parse(url); return new ConnectionProperties( - standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(), Strings.isNullOrEmpty(catalog) ? standardJdbcUrl.getDatabase() : catalog, standardJdbcUrl.getDatabase()); + standardJdbcUrl.getHostname(), standardJdbcUrl.getPort(), Strings.isNullOrEmpty(catalog) ? standardJdbcUrl.getDatabase() : catalog, standardJdbcUrl.getDatabase(), new Properties()); } @Override