You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/02/26 05:07:25 UTC
[shardingsphere] branch master updated: Refactor interface
PrivilegeLoader (#9513)
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 0f7e429 Refactor interface PrivilegeLoader (#9513)
0f7e429 is described below
commit 0f7e42908c7e8acaf8611eceb3edd0ce91baf436
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Fri Feb 26 13:06:06 2021 +0800
Refactor interface PrivilegeLoader (#9513)
---
.../metadata/auth/builder/PrivilegeBuilder.java | 11 ++++++---
.../auth/builder/loader/PrivilegeLoader.java | 10 +++++++-
.../auth/builder/loader/PrivilegeLoaderEngine.java | 20 +++++++---------
.../MySQLPrivilegeLoader.java} | 28 ++++++++++++----------
.../execute/CalciteExecutionContextGenerator.java | 16 ++++++++-----
5 files changed, 52 insertions(+), 33 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
index 41821a4..e3f939d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
@@ -60,13 +60,18 @@ public final class PrivilegeBuilder {
*/
public static Map<ShardingSphereUser, ShardingSpherePrivilege> build(final Collection<ShardingSphereMetaData> metaDatas,
final Collection<ShardingSphereUser> users, final ConfigurationProperties props) {
- Optional<PrivilegeLoader> loader = PrivilegeLoaderEngine.getPrivilegeLoader();
- if (!loader.isPresent()) {
+ if (metaDatas.isEmpty()) {
return getDefaultShardingSpherePrivileges(users);
}
+ Optional<PrivilegeLoader> loader = PrivilegeLoaderEngine.getPrivilegeLoader(metaDatas.iterator().next().getResource().getDatabaseType());
+ return loader.map(privilegeLoader -> build(metaDatas, users, props, privilegeLoader)).orElseGet(() -> getDefaultShardingSpherePrivileges(users));
+ }
+
+ private static Map<ShardingSphereUser, ShardingSpherePrivilege> build(final Collection<ShardingSphereMetaData> metaDatas,
+ final Collection<ShardingSphereUser> users, final ConfigurationProperties props, final PrivilegeLoader loader) {
Map<ShardingSphereUser, ShardingSpherePrivilege> result = new LinkedHashMap<>();
for (ShardingSphereMetaData each : metaDatas) {
- result.putAll(build0(each, users, loader.get(), props));
+ result.putAll(build0(each, users, loader, props));
}
return result;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
index 0d652ba..a0d8cdc 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
@@ -17,8 +17,9 @@
package org.apache.shardingsphere.infra.metadata.auth.builder.loader;
-import org.apache.shardingsphere.infra.metadata.auth.model.user.ShardingSphereUser;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.auth.model.privilege.ShardingSpherePrivilege;
+import org.apache.shardingsphere.infra.metadata.auth.model.user.ShardingSphereUser;
import javax.sql.DataSource;
import java.util.Optional;
@@ -29,6 +30,13 @@ import java.util.Optional;
public interface PrivilegeLoader {
/**
+ * Get database type.
+ *
+ * @return database type
+ */
+ DatabaseType getDatabaseType();
+
+ /**
* Load.
*
* @param user user
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
index f73512a..2b6e9c2 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.infra.metadata.auth.builder.loader;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.metadata.auth.builder.loader.dialect.MySQLPrivilegeLoader;
-import java.util.Collection;
import java.util.Optional;
/**
@@ -30,20 +30,18 @@ import java.util.Optional;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class PrivilegeLoaderEngine {
- static {
- ShardingSphereServiceLoader.register(PrivilegeLoader.class);
- }
-
/**
* Get privilege loader.
*
+ * @param databaseType database type
* @return privilege loader
*/
- public static Optional<PrivilegeLoader> getPrivilegeLoader() {
- Collection<PrivilegeLoader> loaders = ShardingSphereServiceLoader.newServiceInstances(PrivilegeLoader.class);
- if (loaders.isEmpty()) {
- return Optional.empty();
+ public static Optional<PrivilegeLoader> getPrivilegeLoader(final DatabaseType databaseType) {
+ switch (databaseType.getName()) {
+ case "MySQL":
+ return Optional.of(new MySQLPrivilegeLoader());
+ default:
+ return Optional.empty();
}
- return Optional.of(loaders.iterator().next());
}
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java
similarity index 64%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java
index 0d652ba..2868be4 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/dialect/MySQLPrivilegeLoader.java
@@ -15,25 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.metadata.auth.builder.loader;
+package org.apache.shardingsphere.infra.metadata.auth.builder.loader.dialect;
-import org.apache.shardingsphere.infra.metadata.auth.model.user.ShardingSphereUser;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.metadata.auth.builder.loader.PrivilegeLoader;
import org.apache.shardingsphere.infra.metadata.auth.model.privilege.ShardingSpherePrivilege;
+import org.apache.shardingsphere.infra.metadata.auth.model.user.ShardingSphereUser;
import javax.sql.DataSource;
import java.util.Optional;
/**
- * Privilege loader.
+ * MySQL privilege loader.
*/
-public interface PrivilegeLoader {
+public final class MySQLPrivilegeLoader implements PrivilegeLoader {
+
+ @Override
+ public DatabaseType getDatabaseType() {
+ return new MySQLDatabaseType();
+ }
- /**
- * Load.
- *
- * @param user user
- * @param dataSource data source
- * @return sharding sphere privilege
- */
- Optional<ShardingSpherePrivilege> load(ShardingSphereUser user, DataSource dataSource);
+ @Override
+ public Optional<ShardingSpherePrivilege> load(final ShardingSphereUser user, final DataSource dataSource) {
+ return Optional.empty();
+ }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/schema/table/execute/CalciteExecutionContextGenerator.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/schema/table/execute/CalciteExecutionContextGenerator.java
index 2100bbe..e3b63be 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/schema/table/execute/CalciteExecutionContextGenerator.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/schema/table/execute/CalciteExecutionContextGenerator.java
@@ -55,16 +55,20 @@ public final class CalciteExecutionContextGenerator {
private Collection<ExecutionUnit> getExecutionUnits(final Collection<RouteUnit> routeUnits, final CalciteExecutionSQLGenerator filter) {
Collection<ExecutionUnit> result = new LinkedHashSet<>();
for (RouteUnit each: routeUnits) {
- for (RouteMapper mapper : each.getTableMappers()) {
- if (mapper.getLogicName().equals(table)) {
- result.add(new ExecutionUnit(each.getDataSourceMapper().getActualName(),
- new SQLUnit(filter.generate(mapper.getActualName()), Collections.emptyList(), Collections.singletonList(mapper))));
- }
- }
+ fillExecutionUnits(result, filter, each);
}
return result;
}
+ private void fillExecutionUnits(final Collection<ExecutionUnit> executionUnits, final CalciteExecutionSQLGenerator filter, final RouteUnit routeUnit) {
+ for (RouteMapper mapper : routeUnit.getTableMappers()) {
+ if (mapper.getLogicName().equals(table)) {
+ executionUnits.add(new ExecutionUnit(routeUnit.getDataSourceMapper().getActualName(),
+ new SQLUnit(filter.generate(mapper.getActualName()), Collections.emptyList(), Collections.singletonList(mapper))));
+ }
+ }
+ }
+
private RouteContext getRouteContext(final RouteContext routeContext) {
RouteContext result = new RouteContext();
result.getRouteUnits().addAll(getRouteUnits(routeContext));