This is an automated email from the ASF dual-hosted git repository.
yx9o 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 b97beebf607 Use DDL_STATEMENT_CLASSES to instead of
IGNORED_SQL_STATEMENT_CLASSES for MetaDataRefreshEngine (#32426)
b97beebf607 is described below
commit b97beebf607578114e87a05afe79ddc84c9fcea6
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Aug 8 14:09:24 2024 +0800
Use DDL_STATEMENT_CLASSES to instead of IGNORED_SQL_STATEMENT_CLASSES for
MetaDataRefreshEngine (#32426)
---
.../metadata/refresher/MetaDataRefreshEngine.java | 29 ++++++++++++++++------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/MetaDataRefreshEngine.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/MetaDataRefreshEngine.java
index aaf884789ae..a98b52b05b8 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/MetaDataRefreshEngine.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/MetaDataRefreshEngine.java
@@ -27,12 +27,25 @@ import
org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterIndexStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterSchemaStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterTableStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterViewStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateIndexStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateSchemaStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateViewStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DDLStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropIndexStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropSchemaStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropViewStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameTableStatement;
import java.sql.SQLException;
+import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
@@ -41,7 +54,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public final class MetaDataRefreshEngine {
- private static final Collection<Class<? extends SQLStatement>>
IGNORED_SQL_STATEMENT_CLASSES = Collections.newSetFromMap(new
ConcurrentHashMap<>());
+ private static final Collection<Class<? extends DDLStatement>>
DDL_STATEMENT_CLASSES = Arrays.asList(CreateTableStatement.class,
AlterTableStatement.class, DropTableStatement.class,
+ CreateViewStatement.class, AlterViewStatement.class,
DropViewStatement.class, CreateIndexStatement.class, AlterIndexStatement.class,
DropIndexStatement.class, CreateSchemaStatement.class,
+ AlterSchemaStatement.class, DropSchemaStatement.class,
RenameTableStatement.class);
private final MetaDataManagerPersistService metaDataManagerPersistService;
@@ -58,11 +73,11 @@ public final class MetaDataRefreshEngine {
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public void refresh(final SQLStatementContext sqlStatementContext, final
Collection<RouteUnit> routeUnits) throws SQLException {
- Class<? extends SQLStatement> sqlStatementClass =
sqlStatementContext.getSqlStatement().getClass();
- if (IGNORED_SQL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
+ Class sqlStatementClass =
sqlStatementContext.getSqlStatement().getClass().getSuperclass();
+ if (!DDL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
return;
}
- Optional<MetaDataRefresher> schemaRefresher =
TypedSPILoader.findService(MetaDataRefresher.class,
sqlStatementClass.getSuperclass());
+ Optional<MetaDataRefresher> schemaRefresher =
TypedSPILoader.findService(MetaDataRefresher.class, sqlStatementClass);
if (schemaRefresher.isPresent()) {
String schemaName = null;
if (sqlStatementContext instanceof TableAvailable) {
@@ -72,9 +87,7 @@ public final class MetaDataRefreshEngine {
Collection<String> logicDataSourceNames =
routeUnits.stream().map(each ->
each.getDataSourceMapper().getLogicName()).collect(Collectors.toList());
schemaRefresher.get().refresh(metaDataManagerPersistService,
database,
logicDataSourceNames, schemaName,
sqlStatementContext.getDatabaseType(), sqlStatementContext.getSqlStatement(),
props);
- return;
}
- IGNORED_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
}
/**