This is an automated email from the ASF dual-hosted git repository.
zhangyonglun 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 2127438 Add TableContainedRule check for table refresh (#8118)
2127438 is described below
commit 2127438efd984cf4b47faf5ecd72379698f137e1
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Nov 10 19:48:18 2020 +0800
Add TableContainedRule check for table refresh (#8118)
* Add TableContainedRule check for table refresh
* Add TableContainedRule check for table refresh
---
.../type/AlterTableStatementSchemaRefresher.java | 14 ++++++++++++++
.../type/CreateIndexStatementSchemaRefresher.java | 2 +-
.../type/CreateTableStatementSchemaRefresher.java | 18 +++++++++++++++++-
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterTableStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterTableStatementSchemaRefresher.java
index 72a3365..55678ff 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterTableStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/AlterTableStatementSchemaRefresher.java
@@ -21,6 +21,8 @@ import
org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
import
org.apache.shardingsphere.infra.metadata.schema.builder.TableMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.type.TableContainedRule;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
import java.sql.SQLException;
@@ -35,8 +37,20 @@ public final class AlterTableStatementSchemaRefresher
implements SchemaRefresher
public void refresh(final ShardingSphereSchema schema,
final Collection<String> routeDataSourceNames, final
AlterTableStatement sqlStatement, final SchemaBuilderMaterials materials)
throws SQLException {
String tableName =
sqlStatement.getTable().getTableName().getIdentifier().getValue();
+ if (!containsInTableContainedRule(tableName, materials)) {
+ return;
+ }
if (null != schema && schema.containsTable(tableName)) {
TableMetaDataBuilder.build(tableName,
materials).ifPresent(tableMetaData -> schema.put(tableName, tableMetaData));
}
}
+
+ private boolean containsInTableContainedRule(final String tableName, final
SchemaBuilderMaterials materials) {
+ for (ShardingSphereRule each : materials.getRules()) {
+ if (each instanceof TableContainedRule && ((TableContainedRule)
each).getTables().contains(tableName)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateIndexStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateIndexStatementSchemaRefresher.java
index 87b2ea2..d546342 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateIndexStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateIndexStatementSchemaRefresher.java
@@ -36,8 +36,8 @@ public final class CreateIndexStatementSchemaRefresher
implements SchemaRefreshe
if (null == sqlStatement.getIndex()) {
return;
}
- String indexName = sqlStatement.getIndex().getIdentifier().getValue();
String tableName =
sqlStatement.getTable().getTableName().getIdentifier().getValue();
+ String indexName = sqlStatement.getIndex().getIdentifier().getValue();
schema.get(tableName).getIndexes().put(indexName, new
IndexMetaData(indexName));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateTableStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateTableStatementSchemaRefresher.java
index bdf0130..63bb0ae 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateTableStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/refresher/type/CreateTableStatementSchemaRefresher.java
@@ -22,6 +22,8 @@ import
org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMate
import
org.apache.shardingsphere.infra.metadata.schema.builder.TableMetaDataBuilder;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import
org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.rule.type.TableContainedRule;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
import java.sql.SQLException;
@@ -36,8 +38,22 @@ public final class CreateTableStatementSchemaRefresher
implements SchemaRefreshe
public void refresh(final ShardingSphereSchema schema,
final Collection<String> routeDataSourceNames, final
CreateTableStatement sqlStatement, final SchemaBuilderMaterials materials)
throws SQLException {
String tableName =
sqlStatement.getTable().getTableName().getIdentifier().getValue();
- TableMetaData tableMetaData = TableMetaDataBuilder.build(tableName,
materials).orElse(new TableMetaData());
+ TableMetaData tableMetaData;
+ if (containsInTableContainedRule(tableName, materials)) {
+ tableMetaData = TableMetaDataBuilder.build(tableName,
materials).orElse(new TableMetaData());
+ } else {
+ tableMetaData = new TableMetaData();
+ }
schema.put(tableName, tableMetaData);
schema.get(tableName).getAddressingDataSources().addAll(routeDataSourceNames);
}
+
+ private boolean containsInTableContainedRule(final String tableName, final
SchemaBuilderMaterials materials) {
+ for (ShardingSphereRule each : materials.getRules()) {
+ if (each instanceof TableContainedRule && ((TableContainedRule)
each).getTables().contains(tableName)) {
+ return true;
+ }
+ }
+ return false;
+ }
}