This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 1bc7921 Remove databaseType parameter for GlobalRuleBuilder (#10010)
1bc7921 is described below
commit 1bc79218770c21d211ef04f3e0280df73a6cb657
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Apr 9 17:57:58 2021 +0800
Remove databaseType parameter for GlobalRuleBuilder (#10010)
* Refactor StoragePrivilegeMerger
* Refactor StoragePrivilegeMerger
* remove databaseType parameter for GlobalRuleBuilder
---
.../storage/impl/StoragePrivilegeMerger.java | 7 +++---
.../rule/builder/AuthorityRuleBuilder.java | 28 ++++++++++++++++++++--
.../infra/rule/builder/GlobalRuleBuilder.java | 4 +---
.../rule/builder/ShardingSphereRulesBuilder.java | 26 +-------------------
4 files changed, 31 insertions(+), 34 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/loader/storage/impl/StoragePrivilegeMerger.java
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/loader/storage/impl/StoragePrivilegeMerger.java
index 4f0a8c3..3ca8976 100644
---
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/loader/storage/impl/StoragePrivilegeMerger.java
+++
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/loader/storage/impl/StoragePrivilegeMerger.java
@@ -55,8 +55,7 @@ public final class StoragePrivilegeMerger {
return result;
}
- private static ShardingSpherePrivileges merge(final
Collection<ShardingSpherePrivileges> privileges, final String schemaName,
- final
Collection<ShardingSphereRule> rules) {
+ private static ShardingSpherePrivileges merge(final
Collection<ShardingSpherePrivileges> privileges, final String schemaName, final
Collection<ShardingSphereRule> rules) {
return privileges.isEmpty() ? new ShardingSpherePrivileges() :
getMergedPrivileges(privileges.iterator().next(), schemaName, rules);
}
@@ -69,7 +68,7 @@ public final class StoragePrivilegeMerger {
}
private static Map<String, SchemaPrivileges>
getMergedSchemaPrivileges(final ShardingSpherePrivileges privilege, final
String schemaName, final Collection<ShardingSphereRule> rules) {
- Map<String, SchemaPrivileges> result = new HashMap<>();
+ Map<String, SchemaPrivileges> result = new
HashMap<>(privilege.getDatabasePrivileges().getSpecificPrivileges().size(), 1);
for (Entry<String, SchemaPrivileges> entry :
privilege.getDatabasePrivileges().getSpecificPrivileges().entrySet()) {
if (!result.containsKey(schemaName)) {
SchemaPrivileges schemaPrivileges = new
SchemaPrivileges(schemaName);
@@ -82,7 +81,7 @@ public final class StoragePrivilegeMerger {
}
private static Map<String, TablePrivileges> getMergedTablePrivileges(final
SchemaPrivileges privilege, final Collection<ShardingSphereRule> rules) {
- Map<String, TablePrivileges> result = new HashMap<>();
+ Map<String, TablePrivileges> result = new
HashMap<>(privilege.getSpecificPrivileges().size(), 1);
for (Entry<String, TablePrivileges> entry :
privilege.getSpecificPrivileges().entrySet()) {
Optional<String> logicalTable = getLogicalTable(entry, rules);
if (logicalTable.isPresent() &&
!result.containsKey(logicalTable.get())) {
diff --git
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/builder/AuthorityRuleBuilder.java
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/builder/AuthorityRuleBuilder.java
index c3a6070..b136d26 100644
---
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/builder/AuthorityRuleBuilder.java
+++
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/builder/AuthorityRuleBuilder.java
@@ -17,14 +17,20 @@
package org.apache.shardingsphere.authority.rule.builder;
+import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
import org.apache.shardingsphere.authority.constant.AuthorityOrder;
import org.apache.shardingsphere.authority.rule.AuthorityRule;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.rule.builder.GlobalRuleBuilder;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
@@ -34,11 +40,29 @@ import java.util.Map;
public final class AuthorityRuleBuilder implements
GlobalRuleBuilder<AuthorityRule, AuthorityRuleConfiguration> {
@Override
- public AuthorityRule build(final Map<String, ShardingSphereMetaData>
mataDataMap, final DatabaseType databaseType,
- final AuthorityRuleConfiguration ruleConfig,
final Collection<ShardingSphereUser> users) {
+ public AuthorityRule build(final Map<String, ShardingSphereMetaData>
mataDataMap, final AuthorityRuleConfiguration ruleConfig, final
Collection<ShardingSphereUser> users) {
+ DatabaseType databaseType = mataDataMap.isEmpty() ? new
MySQLDatabaseType() :
getDatabaseType(mataDataMap.values().iterator().next().getResource().getDataSources());
return new AuthorityRule(ruleConfig, mataDataMap, databaseType, users);
}
+ private static DatabaseType getDatabaseType(final Map<String, DataSource>
dataSourceMap) {
+ DatabaseType result = null;
+ for (DataSource each : dataSourceMap.values()) {
+ DatabaseType databaseType = getDatabaseType(each);
+ Preconditions.checkState(null == result || result == databaseType,
String.format("Database type inconsistent with '%s' and '%s'", result,
databaseType));
+ result = databaseType;
+ }
+ return null == result ? DatabaseTypeRegistry.getDefaultDatabaseType()
: result;
+ }
+
+ private static DatabaseType getDatabaseType(final DataSource dataSource) {
+ try (Connection connection = dataSource.getConnection()) {
+ return
DatabaseTypeRegistry.getDatabaseTypeByURL(connection.getMetaData().getURL());
+ } catch (final SQLException ex) {
+ return null;
+ }
+ }
+
@Override
public int getOrder() {
return AuthorityOrder.ORDER;
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/GlobalRuleBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/GlobalRuleBuilder.java
index 9ea02ae..6fe891b 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/GlobalRuleBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/GlobalRuleBuilder.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.infra.rule.builder;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
@@ -39,10 +38,9 @@ public interface GlobalRuleBuilder<R extends GlobalRule, T
extends RuleConfigura
* Build global rule.
*
* @param mataDataMap mata data map
- * @param databaseType database type
* @param ruleConfig rule configuration
* @param users users
* @return global rule
*/
- R build(Map<String, ShardingSphereMetaData> mataDataMap, DatabaseType
databaseType, T ruleConfig, Collection<ShardingSphereUser> users);
+ R build(Map<String, ShardingSphereMetaData> mataDataMap, T ruleConfig,
Collection<ShardingSphereUser> users);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/ShardingSphereRulesBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/ShardingSphereRulesBuilder.java
index a5dfe4a..bc2470c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/ShardingSphereRulesBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/ShardingSphereRulesBuilder.java
@@ -17,13 +17,10 @@
package org.apache.shardingsphere.infra.rule.builder;
-import com.google.common.base.Preconditions;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -31,8 +28,6 @@ import
org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.infra.spi.ordered.OrderedSPIRegistry;
import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
@@ -80,27 +75,8 @@ public final class ShardingSphereRulesBuilder {
Map<RuleConfiguration, GlobalRuleBuilder> builders =
OrderedSPIRegistry.getRegisteredServices(globalRuleConfigurations,
GlobalRuleBuilder.class);
Collection<ShardingSphereRule> result = new LinkedList<>();
for (Entry<RuleConfiguration, GlobalRuleBuilder> entry :
builders.entrySet()) {
- DatabaseType databaseType = mataDataMap.isEmpty() ? new
MySQLDatabaseType() :
getDatabaseType(mataDataMap.values().iterator().next().getResource().getDataSources());
- result.add(entry.getValue().build(mataDataMap, databaseType,
entry.getKey(), users));
+ result.add(entry.getValue().build(mataDataMap, entry.getKey(),
users));
}
return result;
}
-
- private static DatabaseType getDatabaseType(final Map<String, DataSource>
dataSourceMap) {
- DatabaseType result = null;
- for (DataSource each : dataSourceMap.values()) {
- DatabaseType databaseType = getDatabaseType(each);
- Preconditions.checkState(null == result || result == databaseType,
String.format("Database type inconsistent with '%s' and '%s'", result,
databaseType));
- result = databaseType;
- }
- return null == result ? DatabaseTypeRegistry.getDefaultDatabaseType()
: result;
- }
-
- private static DatabaseType getDatabaseType(final DataSource dataSource) {
- try (Connection connection = dataSource.getConnection()) {
- return
DatabaseTypeRegistry.getDatabaseTypeByURL(connection.getMetaData().getURL());
- } catch (final SQLException ex) {
- return null;
- }
- }
}