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 2020/11/10 11:52:48 UTC
[shardingsphere] branch master updated: Add TableContainedRule
check for table refresh (#8118)
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 <te...@163.com>
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;
+ }
}