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 6ec24c3212c Add SchemaRefreshUtils (#34453)
6ec24c3212c is described below
commit 6ec24c3212cec62f5588ac765829495779cc6312
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jan 23 22:29:28 2025 +0800
Add SchemaRefreshUtils (#34453)
* Add SchemaRefreshUtils
* Add SchemaRefreshUtils
---
.../refresher/metadata/MetaDataRefreshEngine.java | 9 ++-----
.../FederationMetaDataRefreshEngine.java | 10 ++------
.../SchemaRefreshUtils.java} | 30 ++++++++--------------
3 files changed, 14 insertions(+), 35 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/MetaDataRefreshEngine.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/MetaDataRefreshEngine.java
index 831963ac202..6e69265d5c6 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/MetaDataRefreshEngine.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/MetaDataRefreshEngine.java
@@ -22,11 +22,11 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.SchemaRefreshUtils;
import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
import java.sql.SQLException;
@@ -73,14 +73,9 @@ public final class MetaDataRefreshEngine {
return;
}
Collection<String> logicDataSourceNames = routeUnits.stream().map(each
-> each.getDataSourceMapper().getLogicName()).collect(Collectors.toList());
- String schemaName = sqlStatementContext instanceof TableAvailable ?
getSchemaName(sqlStatementContext) : null;
+ String schemaName = sqlStatementContext instanceof TableAvailable ?
SchemaRefreshUtils.getSchemaName(database, sqlStatementContext) : null;
DatabaseType databaseType = routeUnits.stream().map(each ->
database.getResourceMetaData().getStorageUnits().get(each.getDataSourceMapper().getActualName()))
.filter(Objects::nonNull).findFirst().map(StorageUnit::getStorageType).orElseGet(sqlStatementContext::getDatabaseType);
metaDataRefresher.get().refresh(metaDataManagerPersistService,
database, logicDataSourceNames, schemaName, databaseType,
sqlStatementContext.getSqlStatement(), props);
}
-
- private String getSchemaName(final SQLStatementContext
sqlStatementContext) {
- return ((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName()
- .orElseGet(() -> new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())).toLowerCase();
- }
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
index 6a5a189b29b..8c31fd00233 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
@@ -19,10 +19,9 @@ package
org.apache.shardingsphere.mode.metadata.refresher.metadata.federation;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.SchemaRefreshUtils;
import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
/**
@@ -44,11 +43,6 @@ public final class FederationMetaDataRefreshEngine {
public void refresh(final SQLStatementContext sqlStatementContext) {
Class<?> sqlStatementClass =
sqlStatementContext.getSqlStatement().getClass().getSuperclass();
TypedSPILoader.findService(FederationMetaDataRefresher.class,
sqlStatementClass).ifPresent(
- optional -> optional.refresh(metaDataManagerPersistService,
database, getSchemaName(sqlStatementContext),
sqlStatementContext.getSqlStatement()));
- }
-
- private String getSchemaName(final SQLStatementContext
sqlStatementContext) {
- return ((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName()
- .orElseGet(() -> new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())).toLowerCase();
+ optional -> optional.refresh(metaDataManagerPersistService,
database, SchemaRefreshUtils.getSchemaName(database, sqlStatementContext),
sqlStatementContext.getSqlStatement()));
}
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/SchemaRefreshUtils.java
similarity index 58%
copy from
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
copy to
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/SchemaRefreshUtils.java
index 6a5a189b29b..fe8414dd037 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/federation/FederationMetaDataRefreshEngine.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/SchemaRefreshUtils.java
@@ -15,39 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.metadata.refresher.metadata.federation;
+package org.apache.shardingsphere.mode.metadata.refresher.metadata.util;
-import lombok.RequiredArgsConstructor;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
/**
- * Federation meta data refresh engine.
+ * Schema refresh utils.
*/
-@RequiredArgsConstructor
-public final class FederationMetaDataRefreshEngine {
-
- private final MetaDataManagerPersistService metaDataManagerPersistService;
-
- private final ShardingSphereDatabase database;
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SchemaRefreshUtils {
/**
- * Refresh federation meta data.
+ * Get schema name.
*
+ * @param database database
* @param sqlStatementContext SQL statement context
+ * @return schema name
*/
- @SuppressWarnings("unchecked")
- public void refresh(final SQLStatementContext sqlStatementContext) {
- Class<?> sqlStatementClass =
sqlStatementContext.getSqlStatement().getClass().getSuperclass();
- TypedSPILoader.findService(FederationMetaDataRefresher.class,
sqlStatementClass).ifPresent(
- optional -> optional.refresh(metaDataManagerPersistService,
database, getSchemaName(sqlStatementContext),
sqlStatementContext.getSqlStatement()));
- }
-
- private String getSchemaName(final SQLStatementContext
sqlStatementContext) {
+ public static String getSchemaName(final ShardingSphereDatabase database,
final SQLStatementContext sqlStatementContext) {
return ((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName()
.orElseGet(() -> new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())).toLowerCase();
}