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

panjuan 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 28ec505b6a6 Add OptimizerContext.dropTable (#18688)
28ec505b6a6 is described below

commit 28ec505b6a610b64b0c3faeea19fd13d28a771c4
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 29 15:09:50 2022 +0800

    Add OptimizerContext.dropTable (#18688)
---
 .../optimizer/context/OptimizerContext.java        | 19 ++++++++++++---
 .../mode/manager/ContextManager.java               | 28 ++++++++++------------
 2 files changed, 29 insertions(+), 18 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
index e19abda5345..abd6309f279 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
@@ -77,11 +77,24 @@ public final class OptimizerContext {
      * 
      * @param databaseName database name
      * @param schemaName schema name
-     * @param changedTable changed table
+     * @param toBeChangedTable to be changed table
      */
-    public void alterTable(final String databaseName, final String schemaName, 
final ShardingSphereTable changedTable) {
+    public void alterTable(final String databaseName, final String schemaName, 
final ShardingSphereTable toBeChangedTable) {
         FederationDatabaseMetaData federationDatabaseMetaData = 
federationMetaData.getDatabases().get(databaseName);
-        federationDatabaseMetaData.putTable(schemaName, changedTable);
+        federationDatabaseMetaData.putTable(schemaName, toBeChangedTable);
+        plannerContexts.put(databaseName, 
OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
+    }
+    
+    /**
+     * Drop table.
+     * 
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param toBeDeletedTableName to be deleted table name
+     */
+    public void dropTable(final String databaseName, final String schemaName, 
final String toBeDeletedTableName) {
+        FederationDatabaseMetaData federationDatabaseMetaData = 
federationMetaData.getDatabases().get(databaseName);
+        federationDatabaseMetaData.removeTableMetadata(schemaName, 
toBeDeletedTableName);
         plannerContexts.put(databaseName, 
OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
     }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index fcc754decd1..a9127dd9116 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -146,21 +146,21 @@ public final class ContextManager implements 
AutoCloseable {
      *
      * @param databaseName database name
      * @param schemaName schema name
-     * @param changedTable changed table
-     * @param deletedTableName deleted table name
+     * @param beBoChangedTable to be changed table
+     * @param toBeDeletedTableName to be deleted table name
      */
-    public void alterSchema(final String databaseName, final String 
schemaName, final ShardingSphereTable changedTable, final String 
deletedTableName) {
+    public void alterSchema(final String databaseName, final String 
schemaName, final ShardingSphereTable beBoChangedTable, final String 
toBeDeletedTableName) {
         if 
(metaDataContexts.getMetaData().getDatabases().containsKey(databaseName)) {
-            Optional.ofNullable(changedTable).ifPresent(optional -> 
alterTableSchema(databaseName, schemaName, optional));
-            Optional.ofNullable(deletedTableName).ifPresent(optional -> 
deleteTable(databaseName, schemaName, optional));
+            Optional.ofNullable(beBoChangedTable).ifPresent(optional -> 
alterTable(databaseName, schemaName, optional));
+            Optional.ofNullable(toBeDeletedTableName).ifPresent(optional -> 
dropTable(databaseName, schemaName, optional));
         }
     }
     
-    private void alterTableSchema(final String databaseName, final String 
schemaName, final ShardingSphereTable changedTable) {
+    private void alterTable(final String databaseName, final String 
schemaName, final ShardingSphereTable beBoChangedTable) {
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabases().get(databaseName);
-        alterSingleTableDataNodes(databaseName, database, changedTable);
-        database.getSchemas().get(schemaName).put(changedTable.getName(), 
changedTable);
-        metaDataContexts.getOptimizerContext().alterTable(databaseName, 
schemaName, changedTable);
+        alterSingleTableDataNodes(databaseName, database, beBoChangedTable);
+        database.getSchemas().get(schemaName).put(beBoChangedTable.getName(), 
beBoChangedTable);
+        metaDataContexts.getOptimizerContext().alterTable(databaseName, 
schemaName, beBoChangedTable);
     }
     
     private void alterSingleTableDataNodes(final String databaseName, final 
ShardingSphereDatabase database, final ShardingSphereTable 
changedTableMetaData) {
@@ -174,12 +174,10 @@ public final class ContextManager implements 
AutoCloseable {
                 .filter(each -> !(each instanceof 
MutableDataNodeRule)).anyMatch(each -> each.getAllTables().contains(tableName));
     }
     
-    private void deleteTable(final String databaseName, final String 
schemaName, final String deletedTableName) {
-        if (null != 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().get(schemaName))
 {
-            
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().get(schemaName).remove(deletedTableName);
-            FederationDatabaseMetaData databaseMetaData = 
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().get(databaseName);
-            databaseMetaData.removeTableMetadata(schemaName, deletedTableName);
-            
metaDataContexts.getOptimizerContext().getPlannerContexts().put(databaseName, 
OptimizerPlannerContextFactory.create(databaseMetaData));
+    private void dropTable(final String databaseName, final String schemaName, 
final String toBeDeletedTableName) {
+        if 
(metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().containsKey(schemaName))
 {
+            
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().get(schemaName).remove(toBeDeletedTableName);
+            metaDataContexts.getOptimizerContext().dropTable(databaseName, 
schemaName, toBeDeletedTableName);
         }
     }
     

Reply via email to