This is an automated email from the ASF dual-hosted git repository.

menghaoran 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 fdc4f43  Sync metadata for DDL (#7629)
fdc4f43 is described below

commit fdc4f435f6343a56ef5e2050a7c22ef02b9b5742
Author: kimmking <[email protected]>
AuthorDate: Sun Sep 27 18:52:01 2020 +0800

    Sync metadata for DDL (#7629)
---
 .../refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java  | 8 +++++++-
 .../refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java | 2 ++
 .../refresh/impl/DropTableStatementMetaDataRefreshStrategy.java   | 7 ++++++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
index dfb7c7c..7643ae6 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
 import 
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
 import 
org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
+import 
org.apache.shardingsphere.sql.parser.binder.metadata.table.TableMetaData;
 import 
org.apache.shardingsphere.sql.parser.binder.statement.ddl.AlterTableStatementContext;
 
 import javax.sql.DataSource;
@@ -39,7 +40,12 @@ public final class 
AlterTableStatementMetaDataRefreshStrategy implements MetaDat
         String tableName = 
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
         SchemaMetaData schemaMetaData = 
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData();
         if (null != schemaMetaData && schemaMetaData.containsTable(tableName)) 
{
-            callback.load(tableName).ifPresent(tableMetaData -> 
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().put(tableName, 
tableMetaData));
+            callback.load(tableName).ifPresent(tableMetaData -> 
alterMetaData(metaData, tableName, tableMetaData));
         }
     }
+    
+    private void alterMetaData(final ShardingSphereMetaData metaData, final 
String tableName, final TableMetaData tableMetaData) {
+        
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().put(tableName, 
tableMetaData);
+        metaData.getRuleSchemaMetaData().getSchemaMetaData().put(tableName, 
tableMetaData);
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
index c4cc2ec..ce487d8 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
@@ -44,8 +44,10 @@ public final class 
CreateTableStatementMetaDataRefreshStrategy implements MetaDa
         Optional<TableMetaData> tableMetaData = callback.load(tableName);
         if (tableMetaData.isPresent()) {
             
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().put(tableName, 
tableMetaData.get());
+            
metaData.getRuleSchemaMetaData().getSchemaMetaData().put(tableName, 
tableMetaData.get());
         } else {
             refreshUnconfiguredMetaData(metaData, dataSourceMap, tableName);
+            
metaData.getRuleSchemaMetaData().getSchemaMetaData().put(tableName, new 
TableMetaData());
         }
     }
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
index e22f2f0..1a4b370 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
@@ -34,6 +34,11 @@ public final class DropTableStatementMetaDataRefreshStrategy 
implements MetaData
     @Override
     public void refreshMetaData(final ShardingSphereMetaData metaData, final 
DatabaseType databaseType,
                                 final Map<String, DataSource> dataSourceMap, 
final DropTableStatementContext sqlStatementContext, final 
TableMetaDataLoaderCallback callback) {
-        sqlStatementContext.getSqlStatement().getTables().forEach(each -> 
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().remove(each.getTableName().getIdentifier().getValue()));
+        sqlStatementContext.getSqlStatement().getTables().forEach(each -> 
removeMetaData(metaData, each.getTableName().getIdentifier().getValue()));
+    }
+    
+    private void removeMetaData(final ShardingSphereMetaData metaData, final 
String tableName) {
+        
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().remove(tableName);
+        metaData.getRuleSchemaMetaData().getSchemaMetaData().remove(tableName);
     }
 }

Reply via email to