You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/04/26 05:50:59 UTC
[shardingsphere] branch master updated: Add drop schema refresher and adjust param name. (#17112)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 e88d3c193d5 Add drop schema refresher and adjust param name. (#17112)
e88d3c193d5 is described below
commit e88d3c193d57def16246c36a9856da2e2a32f258
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Tue Apr 26 13:50:42 2022 +0800
Add drop schema refresher and adjust param name. (#17112)
* Add drop schema refresher and adjust param name.
* update config
* update file
---
.../metadata/schema/event/AddSchemaEvent.java | 7 +---
.../{AddSchemaEvent.java => DropSchemaEvent.java} | 15 ++++----
.../context/refresher/MetaDataRefreshEngine.java | 6 +--
.../infra/context/refresher/MetaDataRefresher.java | 4 +-
.../type/AlterIndexStatementSchemaRefresher.java | 8 ++--
.../type/AlterTableStatementSchemaRefresher.java | 44 +++++++++++-----------
.../type/AlterViewStatementSchemaRefresher.java | 40 ++++++++++----------
.../type/CreateIndexStatementSchemaRefresher.java | 8 ++--
.../type/CreateSchemaStatementSchemaRefresher.java | 6 +--
.../type/CreateTableStatementSchemaRefresher.java | 22 +++++------
.../type/CreateViewStatementSchemaRefresher.java | 20 +++++-----
.../type/DropIndexStatementSchemaRefresher.java | 8 ++--
...ava => DropSchemaStatementSchemaRefresher.java} | 29 +++++---------
.../type/DropTableStatementSchemaRefresher.java | 8 ++--
.../type/DropViewStatementSchemaRefresher.java | 8 ++--
.../type/RenameTableStatementSchemaRefresher.java | 34 ++++++++---------
...phere.infra.context.refresher.MetaDataRefresher | 1 +
.../refresher/MetaDataRefreshEngineTest.java | 2 +-
.../metadata/FederationDatabaseMetaData.java | 25 ++----------
.../persist/node/DatabaseMetaDataNode.java | 15 +++++++-
.../service/SchemaMetaDataPersistService.java | 2 +-
.../SchemaMetaDataRegistrySubscriber.java | 11 ++++++
.../SchemaMetaDataRegistrySubscriberTest.java | 9 +++++
.../resources/conf/config-readwrite-splitting.yaml | 4 +-
24 files changed, 168 insertions(+), 168 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
index 620be8712bb..786bb4a4f20 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
@@ -18,19 +18,16 @@
package org.apache.shardingsphere.infra.metadata.schema.event;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
/**
* Add schema event.
*/
+@RequiredArgsConstructor
@Getter
public final class AddSchemaEvent {
private final String databaseName;
private final String schemaName;
-
- public AddSchemaEvent(final String databaseName, final String schemaName) {
- this.databaseName = databaseName;
- this.schemaName = schemaName;
- }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/DropSchemaEvent.java
similarity index 78%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/DropSchemaEvent.java
index 620be8712bb..36e97a4456f 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/DropSchemaEvent.java
@@ -18,19 +18,18 @@
package org.apache.shardingsphere.infra.metadata.schema.event;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.Collection;
/**
- * Add schema event.
+ * Drop schema event.
*/
+@RequiredArgsConstructor
@Getter
-public final class AddSchemaEvent {
+public final class DropSchemaEvent {
private final String databaseName;
- private final String schemaName;
-
- public AddSchemaEvent(final String databaseName, final String schemaName) {
- this.databaseName = databaseName;
- this.schemaName = schemaName;
- }
+ private final Collection<String> schemaNames;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
index 021b8d64f2d..dd365cbe13b 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
@@ -51,7 +51,7 @@ public final class MetaDataRefreshEngine {
private static final Set<Class<? extends SQLStatement>> IGNORABLE_SQL_STATEMENT_CLASSES = Collections.newSetFromMap(new ConcurrentHashMap<>());
- private final ShardingSphereMetaData schemaMetaData;
+ private final ShardingSphereMetaData metaData;
private final FederationDatabaseMetaData federationMetaData;
@@ -74,8 +74,8 @@ public final class MetaDataRefreshEngine {
}
Optional<MetaDataRefresher> schemaRefresher = TypedSPIRegistry.findRegisteredService(MetaDataRefresher.class, sqlStatementClass.getSuperclass().getName());
if (schemaRefresher.isPresent()) {
- String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElse(getSchemaName(sqlStatementContext.getDatabaseType(), schemaMetaData.getDatabaseName()));
- schemaRefresher.get().refresh(schemaMetaData, federationMetaData, optimizerPlanners, logicDataSourceNamesSupplier.get(), schemaName, sqlStatementContext.getSqlStatement(), props);
+ String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElse(getSchemaName(sqlStatementContext.getDatabaseType(), metaData.getDatabaseName()));
+ schemaRefresher.get().refresh(metaData, federationMetaData, optimizerPlanners, logicDataSourceNamesSupplier.get(), schemaName, sqlStatementContext.getSqlStatement(), props);
} else {
IGNORABLE_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java
index f0466690e17..91e60587fbc 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefresher.java
@@ -38,7 +38,7 @@ public interface MetaDataRefresher<T extends SQLStatement> extends StatelessType
/**
* Refresh ShardingSphere schema.
*
- * @param schemaMetaData schema meta data
+ * @param metaData meta data
* @param database federation database meta data
* @param optimizerPlanners optimizer planners
* @param logicDataSourceNames route data source names
@@ -47,6 +47,6 @@ public interface MetaDataRefresher<T extends SQLStatement> extends StatelessType
* @param props configuration properties
* @throws SQLException SQL exception
*/
- void refresh(ShardingSphereMetaData schemaMetaData, FederationDatabaseMetaData database, Map<String, OptimizerPlannerContext> optimizerPlanners,
+ void refresh(ShardingSphereMetaData metaData, FederationDatabaseMetaData database, Map<String, OptimizerPlannerContext> optimizerPlanners,
Collection<String> logicDataSourceNames, String schemaName, T sqlStatement, ConfigurationProperties props) throws SQLException;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java
index cb7bd9ff354..3d59bb54a79 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterIndexStatementSchemaRefresher.java
@@ -45,21 +45,21 @@ public final class AlterIndexStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = AlterIndexStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final AlterIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
Optional<IndexSegment> renameIndex = AlterIndexStatementHandler.getRenameIndexSegment(sqlStatement);
if (!sqlStatement.getIndex().isPresent() || !renameIndex.isPresent()) {
return;
}
String indexName = sqlStatement.getIndex().get().getIdentifier().getValue();
- Optional<String> logicTableName = findLogicTableName(schemaMetaData.getSchemaByName(schemaName), indexName);
+ Optional<String> logicTableName = findLogicTableName(metaData.getSchemaByName(schemaName), indexName);
if (logicTableName.isPresent()) {
- TableMetaData tableMetaData = schemaMetaData.getSchemaByName(schemaName).get(logicTableName.get());
+ TableMetaData tableMetaData = metaData.getSchemaByName(schemaName).get(logicTableName.get());
Preconditions.checkNotNull(tableMetaData, "Can not get the table '%s' metadata!", logicTableName.get());
tableMetaData.getIndexes().remove(indexName);
String renameIndexName = renameIndex.get().getIdentifier().getValue();
tableMetaData.getIndexes().put(renameIndexName, new IndexMetaData(renameIndexName));
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
event.getAlteredTables().add(tableMetaData);
ShardingSphereEventBus.getInstance().post(event);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
index 9446da4e9b6..4dfac93efcf 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
@@ -47,49 +47,49 @@ public final class AlterTableStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = AlterTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final AlterTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
if (sqlStatement.getRenameTable().isPresent()) {
String renameTable = sqlStatement.getRenameTable().get().getTableName().getIdentifier().getValue();
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameTable, props);
- removeTableMetaData(schemaMetaData, database, optimizerPlanners, tableName);
- event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(renameTable));
+ putTableMetaData(metaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameTable, props);
+ removeTableMetaData(metaData, database, optimizerPlanners, schemaName, tableName);
+ event.getAlteredTables().add(metaData.getDefaultSchema().get(renameTable));
event.getDroppedTables().add(tableName);
} else {
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, tableName, props);
- event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(tableName));
+ putTableMetaData(metaData, database, optimizerPlanners, logicDataSourceNames, schemaName, tableName, props);
+ event.getAlteredTables().add(metaData.getDefaultSchema().get(tableName));
}
ShardingSphereEventBus.getInstance().post(event);
}
- private void removeTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database,
- final Map<String, OptimizerPlannerContext> optimizerPlanners, final String tableName) {
- schemaMetaData.getDefaultSchema().remove(tableName);
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.remove(tableName));
- database.remove(tableName);
+ private void removeTableMetaData(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database,
+ final Map<String, OptimizerPlannerContext> optimizerPlanners, final String schemaName, final String tableName) {
+ metaData.getSchemaByName(schemaName).remove(tableName);
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.remove(tableName));
+ database.remove(schemaName, tableName);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
}
- private void putTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ private void putTableMetaData(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final String tableName, final ConfigurationProperties props) throws SQLException {
- if (!containsInDataNodeContainedRule(tableName, schemaMetaData)) {
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(tableName, logicDataSourceNames.iterator().next()));
+ if (!containsInDataNodeContainedRule(tableName, metaData)) {
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(tableName, logicDataSourceNames.iterator().next()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
- Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
+ metaData.getResource().getDatabaseType(), metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), props, schemaName);
+ Map<String, SchemaMetaData> metaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
+ Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(metaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
actualTableMetaData.ifPresent(tableMetaData -> {
- schemaMetaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
- database.put(tableMetaData);
+ metaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
+ database.put(schemaName, tableMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
});
}
- private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData schemaMetaData) {
- return schemaMetaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
+ private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData metaData) {
+ return metaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
index 9ee88c3b318..be7e2fda98d 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
@@ -49,50 +49,50 @@ public final class AlterViewStatementSchemaRefresher implements MetaDataRefreshe
private static final String TYPE = AlterViewStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final AlterViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String viewName = sqlStatement.getView().getTableName().getIdentifier().getValue();
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
Optional<SimpleTableSegment> renameView = AlterViewStatementHandler.getRenameView(sqlStatement);
if (renameView.isPresent()) {
String renameViewName = renameView.get().getTableName().getIdentifier().getValue();
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameViewName, props);
- removeTableMetaData(schemaMetaData, database, optimizerPlanners, schemaName, viewName);
- event.getAlteredTables().add(schemaMetaData.getSchemaByName(schemaName).get(renameViewName));
+ putTableMetaData(metaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameViewName, props);
+ removeTableMetaData(metaData, database, optimizerPlanners, schemaName, viewName);
+ event.getAlteredTables().add(metaData.getSchemaByName(schemaName).get(renameViewName));
event.getDroppedTables().add(viewName);
} else {
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, viewName, props);
- event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(viewName));
+ putTableMetaData(metaData, database, optimizerPlanners, logicDataSourceNames, schemaName, viewName, props);
+ event.getAlteredTables().add(metaData.getDefaultSchema().get(viewName));
}
ShardingSphereEventBus.getInstance().post(event);
}
- private void removeTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database,
+ private void removeTableMetaData(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database,
final Map<String, OptimizerPlannerContext> optimizerPlanners, final String schemaName, final String viewName) {
- schemaMetaData.getSchemaByName(schemaName).remove(viewName);
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.remove(viewName));
- database.remove(viewName);
+ metaData.getSchemaByName(schemaName).remove(viewName);
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.remove(viewName));
+ database.remove(schemaName, viewName);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
}
- private void putTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ private void putTableMetaData(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final String viewName, final ConfigurationProperties props) throws SQLException {
- if (!containsInDataNodeContainedRule(viewName, schemaMetaData)) {
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(viewName, logicDataSourceNames.iterator().next()));
+ if (!containsInDataNodeContainedRule(viewName, metaData)) {
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(viewName, logicDataSourceNames.iterator().next()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
- Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(viewName), materials);
- Optional<TableMetaData> actualViewMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
+ metaData.getResource().getDatabaseType(), metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), props, schemaName);
+ Map<String, SchemaMetaData> metaDataMap = TableMetaDataBuilder.load(Collections.singletonList(viewName), materials);
+ Optional<TableMetaData> actualViewMetaData = Optional.ofNullable(metaDataMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
actualViewMetaData.ifPresent(viewMetaData -> {
- schemaMetaData.getSchemaByName(schemaName).put(viewName, viewMetaData);
+ metaData.getSchemaByName(schemaName).put(viewName, viewMetaData);
database.put(schemaName, viewMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
});
}
- private boolean containsInDataNodeContainedRule(final String viewName, final ShardingSphereMetaData schemaMetaData) {
- return schemaMetaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(viewName));
+ private boolean containsInDataNodeContainedRule(final String viewName, final ShardingSphereMetaData metaData) {
+ return metaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(viewName));
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java
index 810b099e0bc..9085c4f6139 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateIndexStatementSchemaRefresher.java
@@ -41,16 +41,16 @@ public final class CreateIndexStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = CreateIndexStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final CreateIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String indexName = null != sqlStatement.getIndex() ? sqlStatement.getIndex().getIdentifier().getValue() : IndexMetaDataUtil.getGeneratedLogicIndexName(sqlStatement.getColumns());
if (Strings.isNullOrEmpty(indexName)) {
return;
}
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
- schemaMetaData.getSchemaByName(schemaName).get(tableName).getIndexes().put(indexName, new IndexMetaData(indexName));
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
- event.getAlteredTables().add(schemaMetaData.getSchemaByName(schemaName).get(tableName));
+ metaData.getSchemaByName(schemaName).get(tableName).getIndexes().put(indexName, new IndexMetaData(indexName));
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
+ event.getAlteredTables().add(metaData.getSchemaByName(schemaName).get(tableName));
ShardingSphereEventBus.getInstance().post(event);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
index 415961127dc..7d1502c7b5b 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
@@ -43,16 +43,16 @@ public final class CreateSchemaStatementSchemaRefresher implements MetaDataRefre
private static final String TYPE = CreateSchemaStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final CreateSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
Optional<String> schema = sqlStatement.getSchemaName().isPresent() ? sqlStatement.getSchemaName() : CreateSchemaStatementHandler.getUsername(sqlStatement);
if (!schema.isPresent()) {
return;
}
- schemaMetaData.getSchemas().put(schema.get(), new ShardingSphereSchema());
+ metaData.getSchemas().put(schema.get(), new ShardingSphereSchema());
database.put(schema.get(), new TableMetaData());
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
- AddSchemaEvent event = new AddSchemaEvent(schemaMetaData.getDatabaseName(), schema.get());
+ AddSchemaEvent event = new AddSchemaEvent(metaData.getDatabaseName(), schema.get());
ShardingSphereEventBus.getInstance().post(event);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
index d7b0037e3e7..6e67b77ea7e 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
@@ -47,28 +47,28 @@ public final class CreateTableStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = CreateTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final CreateTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
- if (!containsInDataNodeContainedRule(tableName, schemaMetaData)) {
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(tableName, logicDataSourceNames.iterator().next()));
+ if (!containsInDataNodeContainedRule(tableName, metaData)) {
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(tableName, logicDataSourceNames.iterator().next()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
- Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
+ metaData.getResource().getDatabaseType(), metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), props, schemaName);
+ Map<String, SchemaMetaData> metaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
+ Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(metaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
actualTableMetaData.ifPresent(tableMetaData -> {
- schemaMetaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
- database.put(tableMetaData);
+ metaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
+ database.put(schemaName, tableMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
event.getAlteredTables().add(tableMetaData);
ShardingSphereEventBus.getInstance().post(event);
});
}
- private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData schemaMetaData) {
- return schemaMetaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
+ private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData metaData) {
+ return metaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
index b73d0133524..69b73039733 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
@@ -47,29 +47,29 @@ public final class CreateViewStatementSchemaRefresher implements MetaDataRefresh
private static final String TYPE = CreateViewStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final CreateViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String viewName = sqlStatement.getView().getTableName().getIdentifier().getValue();
- if (!containsInDataNodeContainedRule(viewName, schemaMetaData)) {
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(viewName, logicDataSourceNames.iterator().next()));
+ if (!containsInDataNodeContainedRule(viewName, metaData)) {
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(viewName, logicDataSourceNames.iterator().next()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
- Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(viewName), materials);
- Optional<TableMetaData> actualViewMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
+ metaData.getResource().getDatabaseType(), metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), props, schemaName);
+ Map<String, SchemaMetaData> metaDataMap = TableMetaDataBuilder.load(Collections.singletonList(viewName), materials);
+ Optional<TableMetaData> actualViewMetaData = Optional.ofNullable(metaDataMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
actualViewMetaData.ifPresent(viewMetaData -> {
- schemaMetaData.getSchemaByName(schemaName).put(viewName, viewMetaData);
+ metaData.getSchemaByName(schemaName).put(viewName, viewMetaData);
database.put(schemaName, viewMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
// TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
event.getAlteredTables().add(viewMetaData);
ShardingSphereEventBus.getInstance().post(event);
});
}
- private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData schemaMetaData) {
- return schemaMetaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
+ private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData metaData) {
+ return metaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java
index 997563ccfd6..3b0862c972c 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropIndexStatementSchemaRefresher.java
@@ -45,15 +45,15 @@ public final class DropIndexStatementSchemaRefresher implements MetaDataRefreshe
private static final String TYPE = DropIndexStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final DropIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- String logicTableName = getLogicTableName(schemaMetaData.getSchemaByName(schemaName), sqlStatement).orElse("");
- TableMetaData tableMetaData = schemaMetaData.getSchemaByName(schemaName).get(logicTableName);
+ String logicTableName = getLogicTableName(metaData.getSchemaByName(schemaName), sqlStatement).orElse("");
+ TableMetaData tableMetaData = metaData.getSchemaByName(schemaName).get(logicTableName);
if (null != tableMetaData) {
for (String each : getIndexNames(sqlStatement)) {
tableMetaData.getIndexes().remove(each);
}
- post(schemaMetaData.getDatabaseName(), schemaName, tableMetaData);
+ post(metaData.getDatabaseName(), schemaName, tableMetaData);
}
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
similarity index 54%
copy from shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
copy to shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
index d9bf3089e81..d8cd577b23a 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
@@ -24,37 +24,28 @@ import org.apache.shardingsphere.infra.federation.optimizer.context.planner.Opti
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.metadata.schema.event.SchemaAlteredEvent;
-import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
+import org.apache.shardingsphere.infra.metadata.schema.event.DropSchemaEvent;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropSchemaStatement;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
/**
- * Schema refresher for drop table statement.
+ * Schema refresher for drop schema statement.
*/
-public final class DropTableStatementSchemaRefresher implements MetaDataRefresher<DropTableStatement> {
+public final class DropSchemaStatementSchemaRefresher implements MetaDataRefresher<DropSchemaStatement> {
- private static final String TYPE = DropTableStatement.class.getName();
+ private static final String TYPE = DropSchemaStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String schemaName, final DropTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
- sqlStatement.getTables().forEach(each -> {
- schemaMetaData.getSchemaByName(schemaName).remove(each.getTableName().getIdentifier().getValue());
- database.remove(schemaName, each.getTableName().getIdentifier().getValue());
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ sqlStatement.getSchemaNames().forEach(each -> {
+ database.remove(each);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
- event.getDroppedTables().add(each.getTableName().getIdentifier().getValue());
});
- Collection<MutableDataNodeRule> rules = schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
- for (SimpleTableSegment each : sqlStatement.getTables()) {
- rules.forEach(rule -> rule.remove(each.getTableName().getIdentifier().getValue()));
- }
- ShardingSphereEventBus.getInstance().post(event);
+ ShardingSphereEventBus.getInstance().post(new DropSchemaEvent(metaData.getDatabaseName(), sqlStatement.getSchemaNames()));
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
index d9bf3089e81..fdc32d9a96b 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropTableStatementSchemaRefresher.java
@@ -41,16 +41,16 @@ public final class DropTableStatementSchemaRefresher implements MetaDataRefreshe
private static final String TYPE = DropTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final DropTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
sqlStatement.getTables().forEach(each -> {
- schemaMetaData.getSchemaByName(schemaName).remove(each.getTableName().getIdentifier().getValue());
+ metaData.getSchemaByName(schemaName).remove(each.getTableName().getIdentifier().getValue());
database.remove(schemaName, each.getTableName().getIdentifier().getValue());
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
event.getDroppedTables().add(each.getTableName().getIdentifier().getValue());
});
- Collection<MutableDataNodeRule> rules = schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
+ Collection<MutableDataNodeRule> rules = metaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
for (SimpleTableSegment each : sqlStatement.getTables()) {
rules.forEach(rule -> rule.remove(each.getTableName().getIdentifier().getValue()));
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java
index 4915ea7e574..74ed6fef010 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropViewStatementSchemaRefresher.java
@@ -40,14 +40,14 @@ public final class DropViewStatementSchemaRefresher implements MetaDataRefresher
private static final String TYPE = DropViewStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final DropViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
sqlStatement.getViews().forEach(each -> {
- schemaMetaData.getSchemaByName(schemaName).remove(each.getTableName().getIdentifier().getValue());
+ metaData.getSchemaByName(schemaName).remove(each.getTableName().getIdentifier().getValue());
event.getDroppedTables().add(each.getTableName().getIdentifier().getValue());
});
- Collection<MutableDataNodeRule> rules = schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
+ Collection<MutableDataNodeRule> rules = metaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
for (SimpleTableSegment each : sqlStatement.getViews()) {
rules.forEach(rule -> rule.remove(each.getTableName().getIdentifier().getValue()));
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
index 445dfdab896..d660fa410b5 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
@@ -48,46 +48,46 @@ public final class RenameTableStatementSchemaRefresher implements MetaDataRefres
private static final String TYPE = RenameTableStatement.class.getName();
@Override
- public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final RenameTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(metaData.getDatabaseName(), schemaName);
for (RenameTableDefinitionSegment each : sqlStatement.getRenameTables()) {
String tableName = each.getTable().getTableName().getIdentifier().getValue();
String renameTable = each.getRenameTable().getTableName().getIdentifier().getValue();
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameTable, props);
- removeTableMetaData(schemaMetaData, database, optimizerPlanners, schemaName, tableName);
- event.getAlteredTables().add(schemaMetaData.getSchemaByName(schemaName).get(renameTable));
+ putTableMetaData(metaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameTable, props);
+ removeTableMetaData(metaData, database, optimizerPlanners, schemaName, tableName);
+ event.getAlteredTables().add(metaData.getSchemaByName(schemaName).get(renameTable));
event.getDroppedTables().add(tableName);
}
ShardingSphereEventBus.getInstance().post(event);
}
- private void removeTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database,
+ private void removeTableMetaData(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database,
final Map<String, OptimizerPlannerContext> optimizerPlanners, final String schemaName, final String tableName) {
- schemaMetaData.getSchemaByName(schemaName).remove(tableName);
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.remove(tableName));
+ metaData.getSchemaByName(schemaName).remove(tableName);
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.remove(tableName));
database.remove(schemaName, tableName);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
}
- private void putTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
+ private void putTableMetaData(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
final Collection<String> logicDataSourceNames, final String schemaName, final String tableName, final ConfigurationProperties props) throws SQLException {
- if (!containsInDataNodeContainedRule(tableName, schemaMetaData)) {
- schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(tableName, logicDataSourceNames.iterator().next()));
+ if (!containsInDataNodeContainedRule(tableName, metaData)) {
+ metaData.getRuleMetaData().findRules(MutableDataNodeRule.class).forEach(each -> each.put(tableName, logicDataSourceNames.iterator().next()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
- Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
+ metaData.getResource().getDatabaseType(), metaData.getResource().getDataSources(), metaData.getRuleMetaData().getRules(), props, schemaName);
+ Map<String, SchemaMetaData> metaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
+ Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(metaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
actualTableMetaData.ifPresent(tableMetaData -> {
- schemaMetaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
+ metaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
database.put(schemaName, tableMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
});
}
- private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData schemaMetaData) {
- return schemaMetaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
+ private boolean containsInDataNodeContainedRule(final String tableName, final ShardingSphereMetaData metaData) {
+ return metaData.getRuleMetaData().findRules(DataNodeContainedRule.class).stream().anyMatch(each -> each.getAllTables().contains(tableName));
}
@Override
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher b/shardingsphere-infra/shardingsphere-infra-context/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
index 5995fdbf2c0..a7c60315c22 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher
@@ -23,6 +23,7 @@ org.apache.shardingsphere.infra.context.refresher.type.CreateSchemaStatementSche
org.apache.shardingsphere.infra.context.refresher.type.CreateTableStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.CreateViewStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.DropIndexStatementSchemaRefresher
+org.apache.shardingsphere.infra.context.refresher.type.DropSchemaStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.DropTableStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.DropViewStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.RenameTableStatementSchemaRefresher
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
index fb686ebbe25..92e1fb3ef58 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
@@ -54,7 +54,7 @@ public final class MetaDataRefreshEngineTest {
when(sqlStatementContext.getTablesContext()).thenReturn(mock(TablesContext.class));
ShardingSphereMetaData shardingSphereMetaData = mock(ShardingSphereMetaData.class);
when(shardingSphereMetaData.getDatabaseName()).thenReturn("database");
- Field field = metaDataRefreshEngine.getClass().getDeclaredField("schemaMetaData");
+ Field field = metaDataRefreshEngine.getClass().getDeclaredField("metaData");
field.setAccessible(true);
field.set(metaDataRefreshEngine, shardingSphereMetaData);
for (int i = 0; i < dropTimes; i++) {
diff --git a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/FederationDatabaseMetaData.java b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/FederationDatabaseMetaData.java
index 0272fd6b288..d6802657640 100644
--- a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/FederationDatabaseMetaData.java
+++ b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/metadata/FederationDatabaseMetaData.java
@@ -44,22 +44,6 @@ public final class FederationDatabaseMetaData {
}
}
- /**
- * Add table meta data.
- *
- * @param metaData table meta data to be updated
- */
- // TODO Remove this when search path are finished
- public void put(final TableMetaData metaData) {
- if (schemas.containsKey(name)) {
- schemas.get(name).put(metaData);
- } else {
- Map<String, TableMetaData> tableMetaData = new LinkedHashMap<>();
- tableMetaData.put(name, metaData);
- schemas.put(name, new FederationSchemaMetaData(name, tableMetaData));
- }
- }
-
/**
* Add table meta data.
*
@@ -79,13 +63,10 @@ public final class FederationDatabaseMetaData {
/**
* Remove table meta data.
*
- * @param tableName table name to be removed
+ * @param schemaName schema name
*/
- // TODO Remove this when search path are finished
- public void remove(final String tableName) {
- if (schemas.containsKey(tableName)) {
- schemas.get(name).remove(tableName);
- }
+ public void remove(final String schemaName) {
+ schemas.remove(schemaName);
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java
index 73d703b927f..500f8c9a20a 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/node/DatabaseMetaDataNode.java
@@ -94,7 +94,18 @@ public final class DatabaseMetaDataNode {
* @return tables path
*/
public static String getMetaDataTablesPath(final String databaseName, final String schemaName) {
- return String.join("/", getMetaDataSchemasPath(databaseName), schemaName, TABLES_NODE);
+ return String.join("/", getMetaDataSchemaPath(databaseName, schemaName), TABLES_NODE);
+ }
+
+ /**
+ * Get schema path.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ * @return tables path
+ */
+ public static String getMetaDataSchemaPath(final String databaseName, final String schemaName) {
+ return String.join("/", getMetaDataSchemasPath(databaseName), schemaName);
}
/**
@@ -103,7 +114,7 @@ public final class DatabaseMetaDataNode {
* @param databaseName database name
* @return schemas path
*/
- public static String getMetaDataSchemasPath(final String databaseName) {
+ private static String getMetaDataSchemasPath(final String databaseName) {
return String.join("/", getDatabaseNamePath(databaseName), SCHEMAS_NODE);
}
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java
index 68938c7666b..d81d307bdfa 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistService.java
@@ -128,7 +128,7 @@ public final class SchemaMetaDataPersistService {
* @param schemaName schema name
*/
public void deleteSchema(final String databaseName, final String schemaName) {
- repository.delete(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, schemaName));
+ repository.delete(DatabaseMetaDataNode.getMetaDataSchemaPath(databaseName, schemaName));
}
/**
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySu [...]
index 29b80e047b3..c5001be189c 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.meta
import com.google.common.eventbus.Subscribe;
import org.apache.shardingsphere.infra.metadata.schema.event.AddSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.schema.event.DropSchemaEvent;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -56,4 +57,14 @@ public final class SchemaMetaDataRegistrySubscriber {
public void addSchema(final AddSchemaEvent event) {
persistService.persistSchema(event.getDatabaseName(), event.getSchemaName());
}
+
+ /**
+ * Drop schema.
+ *
+ * @param event schema drop event
+ */
+ @Subscribe
+ public void dropSchema(final DropSchemaEvent event) {
+ event.getSchemaNames().forEach(each -> persistService.deleteSchema(event.getDatabaseName(), each));
+ }
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegist [...]
index 42bb2236f4c..d8055c9a22f 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.subscriber;
import org.apache.shardingsphere.infra.metadata.schema.event.AddSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.schema.event.DropSchemaEvent;
import org.apache.shardingsphere.infra.metadata.schema.event.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
@@ -29,6 +30,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
+import java.util.Arrays;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -66,4 +68,11 @@ public final class SchemaMetaDataRegistrySubscriberTest {
schemaMetaDataRegistrySubscriber.addSchema(event);
verify(persistService).persistSchema("foo_db", "foo_schema");
}
+
+ @Test
+ public void assertDropSchemaEvent() {
+ DropSchemaEvent event = new DropSchemaEvent("foo_db", Arrays.asList("foo_schema"));
+ schemaMetaDataRegistrySubscriber.dropSchema(event);
+ verify(persistService).deleteSchema("foo_db", "foo_schema");
+ }
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml
index 5aaaae5f2f5..4e5b4a7ebdf 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml
+++ b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml
@@ -16,10 +16,10 @@
#
######################################################################################################
-#
+#
# Here you can configure the rules for the proxy.
# This example is configuration of replica-query rule.
-#
+#
######################################################################################################
#
#databaseName: readwrite_splitting_db