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;
+    }
 }