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