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/25 01:04:34 UTC
[shardingsphere] branch master updated: Support create schema for PG/openGauss (#17052)
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 476e7e5c2f0 Support create schema for PG/openGauss (#17052)
476e7e5c2f0 is described below
commit 476e7e5c2f0055a4e5dae73269b7e788c1006bb3
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Mon Apr 25 09:04:24 2022 +0800
Support create schema for PG/openGauss (#17052)
* Add schemaName param when execute DDL sql.
* Fixed unit test
* update
* fixed
* Add create schema refresher.
* fix ci
* merge master
* Fix ci
* Fix ci
* Format code.
---
.../infra/binder/SQLStatementContextFactory.java | 5 ++++
.../ddl/CreateSchemaStatementContext.java | 17 ++++++-------
.../metadata/schema/event/AddSchemaEvent.java | 22 ++++++++++-------
.../context/refresher/MetaDataRefreshEngine.java | 17 +++++++++----
.../infra/context/refresher/MetaDataRefresher.java | 3 ++-
.../type/AlterIndexStatementSchemaRefresher.java | 9 ++++---
.../type/AlterTableStatementSchemaRefresher.java | 18 ++++++--------
.../type/AlterViewStatementSchemaRefresher.java | 28 ++++++++++------------
.../type/CreateIndexStatementSchemaRefresher.java | 9 ++++---
.../CreateSchemaStatementSchemaRefresher.java} | 22 ++++++++++++-----
.../type/CreateTableStatementSchemaRefresher.java | 13 ++++------
.../type/CreateViewStatementSchemaRefresher.java | 13 ++++------
.../type/DropIndexStatementSchemaRefresher.java | 9 ++++---
.../type/DropTableStatementSchemaRefresher.java | 9 ++++---
.../type/DropViewStatementSchemaRefresher.java | 7 +++---
.../type/RenameTableStatementSchemaRefresher.java | 28 ++++++++++------------
...phere.infra.context.refresher.MetaDataRefresher | 1 +
.../refresher/MetaDataRefreshEngineTest.java | 26 ++++++++++++++------
.../type/DummyDropDatabaseMetaDataRefresher.java | 2 +-
.../RenameTableStatementSchemaRefresherTest.java | 4 ++--
.../driver/executor/DriverJDBCExecutor.java | 13 +++++-----
.../service/SchemaMetaDataPersistService.java | 22 ++++++++++++++++-
.../service/SchemaMetaDataPersistServiceTest.java | 6 ++---
.../SchemaMetaDataRegistrySubscriber.java | 11 +++++++++
.../SchemaMetaDataRegistrySubscriberTest.java | 8 +++++++
.../communication/DatabaseCommunicationEngine.java | 3 +--
.../impl/PostgreSQLDDLStatementSQLVisitor.java | 5 +++-
.../statement/ddl/CreateSchemaStatement.java} | 15 ++++++------
.../ddl/PostgreSQLCreateSchemaStatement.java | 6 +++--
29 files changed, 207 insertions(+), 144 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/SQLStatementContextFactory.java b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/SQLStatementContextFactory.java
index cbf1d6a0ab4..ccd6d2de69a 100644
--- a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/SQLStatementContextFactory.java
+++ b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/SQLStatementContextFactory.java
@@ -45,6 +45,7 @@ import org.apache.shardingsphere.infra.binder.statement.ddl.CreateViewStatementC
import org.apache.shardingsphere.infra.binder.statement.ddl.DropIndexStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.DropTableStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.DropViewStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.ddl.CreateSchemaStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.PrepareStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.RenameTableStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.TruncateStatementContext;
@@ -72,6 +73,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndex
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateViewStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
@@ -166,6 +168,9 @@ public final class SQLStatementContextFactory {
}
private static SQLStatementContext<?> getDDLStatementContext(final DDLStatement sqlStatement) {
+ if (sqlStatement instanceof CreateSchemaStatement) {
+ return new CreateSchemaStatementContext((CreateSchemaStatement) sqlStatement);
+ }
if (sqlStatement instanceof CreateTableStatement) {
return new CreateTableStatementContext((CreateTableStatement) sqlStatement);
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/CreateSchemaStatementContext.java
similarity index 64%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
copy to shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/CreateSchemaStatementContext.java
index 32f3b7d2df3..d2ee9e78938 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
+++ b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/ddl/CreateSchemaStatementContext.java
@@ -15,16 +15,17 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+package org.apache.shardingsphere.infra.binder.statement.ddl;
-import lombok.ToString;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
-import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
+import org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
/**
- * PostgreSQL create schema statement.
+ * Create schema statement context.
*/
-@ToString
-public final class PostgreSQLCreateSchemaStatement extends AbstractSQLStatement implements DDLStatement, PostgreSQLStatement {
+public final class CreateSchemaStatementContext extends CommonSQLStatementContext<CreateSchemaStatement> {
+
+ public CreateSchemaStatementContext(final CreateSchemaStatement sqlStatement) {
+ super(sqlStatement);
+ }
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
similarity index 59%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
index 32f3b7d2df3..6b8d3ea91af 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/event/AddSchemaEvent.java
@@ -15,16 +15,22 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+package org.apache.shardingsphere.infra.metadata.schema.event;
-import lombok.ToString;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
-import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
+import lombok.Getter;
/**
- * PostgreSQL create schema statement.
+ * add schema event.
*/
-@ToString
-public final class PostgreSQLCreateSchemaStatement extends AbstractSQLStatement implements DDLStatement, PostgreSQLStatement {
+@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-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 503d2957be0..021b8d64f2d 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
@@ -18,7 +18,11 @@
package org.apache.shardingsphere.infra.context.refresher;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -58,21 +62,26 @@ public final class MetaDataRefreshEngine {
/**
* Refresh.
*
- * @param sqlStatement SQL statement
+ * @param sqlStatementContext SQL statement context
* @param logicDataSourceNamesSupplier logic data source names supplier
* @throws SQLException SQL exception
*/
@SuppressWarnings({"unchecked", "rawtypes"})
- public void refresh(final SQLStatement sqlStatement, final Supplier<Collection<String>> logicDataSourceNamesSupplier) throws SQLException {
- Class<? extends SQLStatement> sqlStatementClass = sqlStatement.getClass();
+ public void refresh(final SQLStatementContext<?> sqlStatementContext, final Supplier<Collection<String>> logicDataSourceNamesSupplier) throws SQLException {
+ Class<? extends SQLStatement> sqlStatementClass = sqlStatementContext.getSqlStatement().getClass();
if (IGNORABLE_SQL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
return;
}
Optional<MetaDataRefresher> schemaRefresher = TypedSPIRegistry.findRegisteredService(MetaDataRefresher.class, sqlStatementClass.getSuperclass().getName());
if (schemaRefresher.isPresent()) {
- schemaRefresher.get().refresh(schemaMetaData, federationMetaData, optimizerPlanners, logicDataSourceNamesSupplier.get(), sqlStatement, props);
+ String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElse(getSchemaName(sqlStatementContext.getDatabaseType(), schemaMetaData.getDatabaseName()));
+ schemaRefresher.get().refresh(schemaMetaData, federationMetaData, optimizerPlanners, logicDataSourceNamesSupplier.get(), schemaName, sqlStatementContext.getSqlStatement(), props);
} else {
IGNORABLE_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
}
}
+
+ private String getSchemaName(final DatabaseType databaseType, final String databaseName) {
+ return databaseType instanceof PostgreSQLDatabaseType || databaseType instanceof OpenGaussDatabaseType ? "public" : databaseName;
+ }
}
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 5c1cd150d75..f0466690e17 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
@@ -42,10 +42,11 @@ public interface MetaDataRefresher<T extends SQLStatement> extends StatelessType
* @param database federation database meta data
* @param optimizerPlanners optimizer planners
* @param logicDataSourceNames route data source names
+ * @param schemaName schema name
* @param sqlStatement SQL statement
* @param props configuration properties
* @throws SQLException SQL exception
*/
void refresh(ShardingSphereMetaData schemaMetaData, FederationDatabaseMetaData database, Map<String, OptimizerPlannerContext> optimizerPlanners,
- Collection<String> logicDataSourceNames, T sqlStatement, ConfigurationProperties props) throws SQLException;
+ 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 d69fded975b..cb7bd9ff354 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
@@ -46,21 +46,20 @@ public final class AlterIndexStatementSchemaRefresher implements MetaDataRefresh
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final AlterIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ 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.getDefaultSchema(), indexName);
+ Optional<String> logicTableName = findLogicTableName(schemaMetaData.getSchemaByName(schemaName), indexName);
if (logicTableName.isPresent()) {
- TableMetaData tableMetaData = schemaMetaData.getDefaultSchema().get(logicTableName.get());
+ TableMetaData tableMetaData = schemaMetaData.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));
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.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 e34b0cc8640..9446da4e9b6 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
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
@@ -50,18 +48,17 @@ public final class AlterTableStatementSchemaRefresher implements MetaDataRefresh
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final AlterTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ final Collection<String> logicDataSourceNames, final String schemaName, final AlterTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
if (sqlStatement.getRenameTable().isPresent()) {
String renameTable = sqlStatement.getRenameTable().get().getTableName().getIdentifier().getValue();
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, renameTable, props);
+ putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameTable, props);
removeTableMetaData(schemaMetaData, database, optimizerPlanners, tableName);
event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(renameTable));
event.getDroppedTables().add(tableName);
} else {
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, tableName, props);
+ putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, tableName, props);
event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(tableName));
}
ShardingSphereEventBus.getInstance().post(event);
@@ -76,17 +73,16 @@ public final class AlterTableStatementSchemaRefresher implements MetaDataRefresh
}
private void putTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String tableName, final ConfigurationProperties props) throws SQLException {
+ 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()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaMetaData.getDatabaseName());
+ schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- String schemaName = materials.getDatabaseType() instanceof PostgreSQLDatabaseType || materials.getDatabaseType() instanceof OpenGaussDatabaseType ? "public" : schemaMetaData.getDatabaseName();
Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
actualTableMetaData.ifPresent(tableMetaData -> {
- schemaMetaData.getDefaultSchema().put(tableName, tableMetaData);
+ schemaMetaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
database.put(tableMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
});
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 c0e1a138b9d..9ee88c3b318 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
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
@@ -52,45 +50,43 @@ public final class AlterViewStatementSchemaRefresher implements MetaDataRefreshe
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final AlterViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ final Collection<String> logicDataSourceNames, final String schemaName, final AlterViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
String viewName = sqlStatement.getView().getTableName().getIdentifier().getValue();
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
Optional<SimpleTableSegment> renameView = AlterViewStatementHandler.getRenameView(sqlStatement);
if (renameView.isPresent()) {
String renameViewName = renameView.get().getTableName().getIdentifier().getValue();
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, renameViewName, props);
- removeTableMetaData(schemaMetaData, database, optimizerPlanners, viewName);
- event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(renameViewName));
+ putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameViewName, props);
+ removeTableMetaData(schemaMetaData, database, optimizerPlanners, schemaName, viewName);
+ event.getAlteredTables().add(schemaMetaData.getSchemaByName(schemaName).get(renameViewName));
event.getDroppedTables().add(viewName);
} else {
- putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, viewName, props);
+ putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, viewName, props);
event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(viewName));
}
ShardingSphereEventBus.getInstance().post(event);
}
private void removeTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database,
- final Map<String, OptimizerPlannerContext> optimizerPlanners, final String viewName) {
- schemaMetaData.getDefaultSchema().remove(viewName);
+ 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);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
}
private void putTableMetaData(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final String viewName, final ConfigurationProperties props) throws SQLException {
+ 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()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaMetaData.getDatabaseName());
+ schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(viewName), materials);
- String schemaName = materials.getDatabaseType() instanceof PostgreSQLDatabaseType || materials.getDatabaseType() instanceof OpenGaussDatabaseType ? "public" : schemaMetaData.getDatabaseName();
Optional<TableMetaData> actualViewMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
actualViewMetaData.ifPresent(viewMetaData -> {
- schemaMetaData.getDefaultSchema().put(viewName, viewMetaData);
- database.put(viewMetaData);
+ schemaMetaData.getSchemaByName(schemaName).put(viewName, viewMetaData);
+ database.put(schemaName, viewMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
});
}
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 041de589228..810b099e0bc 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
@@ -42,16 +42,15 @@ public final class CreateIndexStatementSchemaRefresher implements MetaDataRefres
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final CreateIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ 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.getDefaultSchema().get(tableName).getIndexes().put(indexName, new IndexMetaData(indexName));
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
- event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(tableName));
+ 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));
ShardingSphereEventBus.getInstance().post(event);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
similarity index 60%
copy from shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
copy to shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
index 067a92aacf8..a15a8c7e77a 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
@@ -19,27 +19,37 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
+import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
+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.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
+import org.apache.shardingsphere.infra.metadata.schema.event.AddSchemaEvent;
+import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
+import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
/**
- * MetaDataRefresher for testing.
+ * Schema refresher for create schema statement.
*/
-public final class DummyDropDatabaseMetaDataRefresher implements MetaDataRefresher<DropDatabaseStatement> {
+public final class CreateSchemaStatementSchemaRefresher implements MetaDataRefresher<CreateSchemaStatement> {
+
+ private static final String TYPE = CreateSchemaStatement.class.getName();
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final DropDatabaseStatement sqlStatement, final ConfigurationProperties props) {
- sqlStatement.getDatabaseName();
+ final Collection<String> logicDataSourceNames, final String schemaName, final CreateSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ database.put(sqlStatement.getSchemaName(), new TableMetaData());
+ optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
+ AddSchemaEvent event = new AddSchemaEvent(schemaMetaData.getDatabaseName(), sqlStatement.getSchemaName());
+ ShardingSphereEventBus.getInstance().post(event);
}
@Override
public String getType() {
- return DropDatabaseStatement.class.getName();
+ return TYPE;
}
}
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 6259342c63b..d7b0037e3e7 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
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
@@ -50,23 +48,20 @@ public final class CreateTableStatementSchemaRefresher implements MetaDataRefres
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final CreateTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ 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()));
}
- String databaseName = schemaMetaData.getDatabaseName();
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, databaseName);
+ schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- String schemaName = materials.getDatabaseType() instanceof PostgreSQLDatabaseType || materials.getDatabaseType() instanceof OpenGaussDatabaseType ? "public" : databaseName;
Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
actualTableMetaData.ifPresent(tableMetaData -> {
- schemaMetaData.getDefaultSchema().put(tableName, tableMetaData);
+ schemaMetaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
database.put(tableMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(databaseName, databaseName);
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.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/CreateViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
index 67868f19b5a..b73d0133524 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
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
@@ -50,22 +48,21 @@ public final class CreateViewStatementSchemaRefresher implements MetaDataRefresh
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final CreateViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ 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()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaMetaData.getDatabaseName());
+ schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(viewName), materials);
- String schemaName = materials.getDatabaseType() instanceof PostgreSQLDatabaseType || materials.getDatabaseType() instanceof OpenGaussDatabaseType ? "public" : schemaMetaData.getDatabaseName();
Optional<TableMetaData> actualViewMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(viewName));
actualViewMetaData.ifPresent(viewMetaData -> {
- schemaMetaData.getDefaultSchema().put(viewName, viewMetaData);
- database.put(viewMetaData);
+ schemaMetaData.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(), schemaMetaData.getDatabaseName());
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
event.getAlteredTables().add(viewMetaData);
ShardingSphereEventBus.getInstance().post(event);
});
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 9095bb70b04..997563ccfd6 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
@@ -46,15 +46,14 @@ public final class DropIndexStatementSchemaRefresher implements MetaDataRefreshe
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final DropIndexStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- String logicTableName = getLogicTableName(schemaMetaData.getDefaultSchema(), sqlStatement).orElse("");
- TableMetaData tableMetaData = schemaMetaData.getDefaultSchema().get(logicTableName);
+ 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);
if (null != tableMetaData) {
for (String each : getIndexNames(sqlStatement)) {
tableMetaData.getIndexes().remove(each);
}
- // TODO Get real schema name
- post(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName(), tableMetaData);
+ post(schemaMetaData.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/DropTableStatementSchemaRefresher.java
index 5a7e72cf645..d9bf3089e81 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
@@ -42,12 +42,11 @@ public final class DropTableStatementSchemaRefresher implements MetaDataRefreshe
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final DropTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
+ 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.getDefaultSchema().remove(each.getTableName().getIdentifier().getValue());
- database.remove(each.getTableName().getIdentifier().getValue());
+ schemaMetaData.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());
});
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 f4406f3b143..4915ea7e574 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
@@ -41,11 +41,10 @@ public final class DropViewStatementSchemaRefresher implements MetaDataRefresher
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final DropViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaName);
sqlStatement.getViews().forEach(each -> {
- schemaMetaData.getDefaultSchema().remove(each.getTableName().getIdentifier().getValue());
+ schemaMetaData.getSchemaByName(schemaName).remove(each.getTableName().getIdentifier().getValue());
event.getDroppedTables().add(each.getTableName().getIdentifier().getValue());
});
Collection<MutableDataNodeRule> rules = schemaMetaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
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 770f19f697e..445dfdab896 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
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.context.refresher.type;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
import org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
@@ -51,41 +49,39 @@ public final class RenameTableStatementSchemaRefresher implements MetaDataRefres
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final RenameTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
- // TODO Get real schema name
- SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.getDatabaseName(), schemaMetaData.getDatabaseName());
+ final Collection<String> logicDataSourceNames, final String schemaName, final RenameTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
+ SchemaAlteredEvent event = new SchemaAlteredEvent(schemaMetaData.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, renameTable, props);
- removeTableMetaData(schemaMetaData, database, optimizerPlanners, tableName);
- event.getAlteredTables().add(schemaMetaData.getDefaultSchema().get(renameTable));
+ putTableMetaData(schemaMetaData, database, optimizerPlanners, logicDataSourceNames, schemaName, renameTable, props);
+ removeTableMetaData(schemaMetaData, database, optimizerPlanners, schemaName, tableName);
+ event.getAlteredTables().add(schemaMetaData.getSchemaByName(schemaName).get(renameTable));
event.getDroppedTables().add(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);
+ 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));
- database.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,
- final Collection<String> logicDataSourceNames, final String tableName, final ConfigurationProperties props) throws SQLException {
+ 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()));
}
SchemaBuilderMaterials materials = new SchemaBuilderMaterials(
- schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaMetaData.getDatabaseName());
+ schemaMetaData.getResource().getDatabaseType(), schemaMetaData.getResource().getDataSources(), schemaMetaData.getRuleMetaData().getRules(), props, schemaName);
Map<String, SchemaMetaData> schemaMetaDataMap = TableMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- String schemaName = materials.getDatabaseType() instanceof PostgreSQLDatabaseType || materials.getDatabaseType() instanceof OpenGaussDatabaseType ? "public" : schemaMetaData.getDatabaseName();
Optional<TableMetaData> actualTableMetaData = Optional.ofNullable(schemaMetaDataMap.get(schemaName)).map(optional -> optional.getTables().get(tableName));
actualTableMetaData.ifPresent(tableMetaData -> {
- schemaMetaData.getDefaultSchema().put(tableName, tableMetaData);
- database.put(tableMetaData);
+ schemaMetaData.getSchemaByName(schemaName).put(tableName, tableMetaData);
+ database.put(schemaName, tableMetaData);
optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
});
}
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 9144043ed32..5995fdbf2c0 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
@@ -19,6 +19,7 @@ org.apache.shardingsphere.infra.context.refresher.type.AlterIndexStatementSchema
org.apache.shardingsphere.infra.context.refresher.type.AlterTableStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.AlterViewStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.CreateIndexStatementSchemaRefresher
+org.apache.shardingsphere.infra.context.refresher.type.CreateSchemaStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.CreateTableStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.CreateViewStatementSchemaRefresher
org.apache.shardingsphere.infra.context.refresher.type.DropIndexStatementSchemaRefresher
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 f78b43f376d..fb686ebbe25 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
@@ -18,6 +18,9 @@
package org.apache.shardingsphere.infra.context.refresher;
import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropDatabaseStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
@@ -35,6 +38,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class MetaDataRefreshEngineTest {
@@ -43,20 +47,28 @@ public final class MetaDataRefreshEngineTest {
private MetaDataRefreshEngine metaDataRefreshEngine;
@Test
- public void assertRefreshNonIgnorableSQLStatement() throws SQLException {
+ public void assertRefreshNonIgnorableSQLStatement() throws Exception {
final int dropTimes = 10;
- DropDatabaseStatement dropDatabaseStatement = mock(DropDatabaseStatement.class);
+ SQLStatementContext<DropDatabaseStatement> sqlStatementContext = mock(SQLStatementContext.class);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DropDatabaseStatement.class));
+ when(sqlStatementContext.getTablesContext()).thenReturn(mock(TablesContext.class));
+ ShardingSphereMetaData shardingSphereMetaData = mock(ShardingSphereMetaData.class);
+ when(shardingSphereMetaData.getDatabaseName()).thenReturn("database");
+ Field field = metaDataRefreshEngine.getClass().getDeclaredField("schemaMetaData");
+ field.setAccessible(true);
+ field.set(metaDataRefreshEngine, shardingSphereMetaData);
for (int i = 0; i < dropTimes; i++) {
- metaDataRefreshEngine.refresh(dropDatabaseStatement, Collections::emptyList);
+ metaDataRefreshEngine.refresh(sqlStatementContext, Collections::emptyList);
}
- verify(dropDatabaseStatement, times(dropTimes)).getDatabaseName();
+ verify(sqlStatementContext.getSqlStatement(), times(dropTimes)).getDatabaseName();
}
@Test
public void assertRefreshIgnorableSQLStatement() throws SQLException {
- SelectStatement selectStatement = mock(SelectStatement.class);
- metaDataRefreshEngine.refresh(selectStatement, Collections::emptyList);
- assertTrue(getIgnorableSQLStatementClasses().contains(selectStatement.getClass()));
+ SQLStatementContext<SelectStatement> sqlStatementContext = mock(SQLStatementContext.class);
+ when(sqlStatementContext.getSqlStatement()).thenReturn(mock(SelectStatement.class));
+ metaDataRefreshEngine.refresh(sqlStatementContext, Collections::emptyList);
+ assertTrue(getIgnorableSQLStatementClasses().contains(sqlStatementContext.getSqlStatement().getClass()));
}
@SneakyThrows
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
index 067a92aacf8..3e5a15e4988 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
@@ -34,7 +34,7 @@ public final class DummyDropDatabaseMetaDataRefresher implements MetaDataRefresh
@Override
public void refresh(final ShardingSphereMetaData schemaMetaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
- final Collection<String> logicDataSourceNames, final DropDatabaseStatement sqlStatement, final ConfigurationProperties props) {
+ final Collection<String> logicDataSourceNames, final String schemaName, final DropDatabaseStatement sqlStatement, final ConfigurationProperties props) {
sqlStatement.getDatabaseName();
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
index 77abbef7450..8a3f874e211 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresherTest.java
@@ -54,7 +54,7 @@ public final class RenameTableStatementSchemaRefresherTest {
RenameTableLister listener = new RenameTableLister(2);
ShardingSphereEventBus.getInstance().register(listener);
new RenameTableStatementSchemaRefresher().refresh(createShardingSphereMetaData(), new FederationDatabaseMetaData("foo_database", Collections.emptyMap()),
- new HashMap<>(), Collections.singleton("foo_ds"), createRenameTableStatement(), mock(ConfigurationProperties.class));
+ new HashMap<>(), Collections.singleton("foo_ds"), "foo_schema", createRenameTableStatement(), mock(ConfigurationProperties.class));
assertThat(listener.getActualCount(), is(listener.getRenameCount()));
ShardingSphereEventBus.getInstance().unregister(listener);
}
@@ -75,7 +75,7 @@ public final class RenameTableStatementSchemaRefresherTest {
private ShardingSphereMetaData createShardingSphereMetaData() {
return new ShardingSphereMetaData("foo_database",
- mockShardingSphereResource(), new ShardingSphereRuleMetaData(new LinkedList<>(), new LinkedList<>()), Collections.singletonMap("foo_database", mock(ShardingSphereSchema.class)));
+ mockShardingSphereResource(), new ShardingSphereRuleMetaData(new LinkedList<>(), new LinkedList<>()), Collections.singletonMap("foo_schema", mock(ShardingSphereSchema.class)));
}
private ShardingSphereResource mockShardingSphereResource() {
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index 403badcfa67..9aad27ae7ef 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -32,7 +32,6 @@ import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.ArrayList;
@@ -99,7 +98,7 @@ public final class DriverJDBCExecutor {
try {
ExecuteProcessEngine.initialize(logicSQL, executionGroupContext, metaDataContexts.getProps());
SQLStatementContext<?> sqlStatementContext = logicSQL.getSqlStatementContext();
- List<Integer> results = doExecute(executionGroupContext, sqlStatementContext.getSqlStatement(), routeUnits, callback);
+ List<Integer> results = doExecute(executionGroupContext, sqlStatementContext, routeUnits, callback);
int result = isNeedAccumulate(metaDataContexts.getMetaData(schemaName).getRuleMetaData().getRules(), sqlStatementContext) ? accumulate(results) : results.get(0);
ExecuteProcessEngine.finish(executionGroupContext.getExecutionID());
return result;
@@ -139,7 +138,7 @@ public final class DriverJDBCExecutor {
final Collection<RouteUnit> routeUnits, final JDBCExecutorCallback<Boolean> callback) throws SQLException {
try {
ExecuteProcessEngine.initialize(logicSQL, executionGroupContext, metaDataContexts.getProps());
- List<Boolean> results = doExecute(executionGroupContext, logicSQL.getSqlStatementContext().getSqlStatement(), routeUnits, callback);
+ List<Boolean> results = doExecute(executionGroupContext, logicSQL.getSqlStatementContext(), routeUnits, callback);
boolean result = null != results && !results.isEmpty() && null != results.get(0) && results.get(0);
ExecuteProcessEngine.finish(executionGroupContext.getExecutionID());
return result;
@@ -148,15 +147,15 @@ public final class DriverJDBCExecutor {
}
}
- private <T> List<T> doExecute(final ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext, final SQLStatement sqlStatement, final Collection<RouteUnit> routeUnits,
+ private <T> List<T> doExecute(final ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext, final SQLStatementContext<?> sqlStatementContext, final Collection<RouteUnit> routeUnits,
final JDBCExecutorCallback<T> callback) throws SQLException {
List<T> results = jdbcExecutor.execute(executionGroupContext, callback);
- refreshMetaData(sqlStatement, routeUnits);
+ refreshMetaData(sqlStatementContext, routeUnits);
return results;
}
- private void refreshMetaData(final SQLStatement sqlStatement, final Collection<RouteUnit> routeUnits) throws SQLException {
- metadataRefreshEngine.refresh(sqlStatement, () -> routeUnits.stream()
+ private void refreshMetaData(final SQLStatementContext<?> sqlStatementContext, final Collection<RouteUnit> routeUnits) throws SQLException {
+ metadataRefreshEngine.refresh(sqlStatementContext, () -> routeUnits.stream()
.map(each -> each.getDataSourceMapper().getLogicName()).collect(Collectors.toCollection(() -> new ArrayList<>(routeUnits.size()))));
}
}
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 d2a373fc123..d9dce5acea7 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
@@ -76,7 +76,17 @@ public final class SchemaMetaDataPersistService {
* @param databaseName database name
*/
public void persist(final String databaseName) {
- repository.persist(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, databaseName), "");
+ repository.persist(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), "");
+ }
+
+ /**
+ * Persist schema.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ public void persist(final String databaseName, final String schemaName) {
+ repository.persist(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, schemaName), "");
}
private void compareAndPersist(final String databaseName, final String schemaName, final ShardingSphereSchema schema, final ShardingSphereSchema originalSchema) {
@@ -111,6 +121,16 @@ public final class SchemaMetaDataPersistService {
repository.delete(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
}
+ /**
+ * Delete schema.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ public void delete(final String databaseName, final String schemaName) {
+ repository.delete(DatabaseMetaDataNode.getMetaDataTablesPath(databaseName, schemaName));
+ }
+
/**
* Delete table meta data.
*
diff --git a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java
index 098e09283a6..368b4c0dddf 100644
--- a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java
+++ b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/service/SchemaMetaDataPersistServiceTest.java
@@ -65,13 +65,13 @@ public final class SchemaMetaDataPersistServiceTest {
}
@Test
- public void assertPersistSchemaTables() {
+ public void assertPersistDatabase() {
new SchemaMetaDataPersistService(repository).persist("foo_db");
- verify(repository).persist(eq("/metadata/foo_db/schemas/foo_db/tables"), anyString());
+ verify(repository).persist(eq("/metadata/foo_db"), anyString());
}
@Test
- public void assertDelete() {
+ public void assertDeleteDatabase() {
new SchemaMetaDataPersistService(repository).delete("foo_db");
verify(repository).delete("/metadata/foo_db");
}
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 44499c2da16..6f6bf231f92 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
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.subscriber;
import com.google.common.eventbus.Subscribe;
+import org.apache.shardingsphere.infra.metadata.schema.event.AddSchemaEvent;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
@@ -45,4 +46,14 @@ public final class SchemaMetaDataRegistrySubscriber {
event.getAlteredTables().forEach(each -> persistService.persist(event.getDatabaseName(), event.getSchemaName(), each));
event.getDroppedTables().forEach(each -> persistService.delete(event.getDatabaseName(), event.getSchemaName(), each));
}
+
+ /**
+ * Add schema.
+ *
+ * @param event schema add event
+ */
+ @Subscribe
+ public void addSchema(final AddSchemaEvent event) {
+ persistService.persist(event.getDatabaseName(), event.getSchemaName());
+ }
}
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 7ef804e4af7..a2a4f42beb8 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
@@ -17,6 +17,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.SchemaAlteredEvent;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import org.apache.shardingsphere.mode.metadata.persist.service.SchemaMetaDataPersistService;
@@ -58,4 +59,11 @@ public final class SchemaMetaDataRegistrySubscriberTest {
verify(persistService).persist("foo_db", "foo_schema", tableMetaData);
verify(persistService).delete("foo_db", "foo_schema", "foo_table");
}
+
+ @Test
+ public void assertAddSchemaEvent() {
+ AddSchemaEvent event = new AddSchemaEvent("foo_db", "foo_schema");
+ schemaMetaDataRegistrySubscriber.addSchema(event);
+ verify(persistService).persist("foo_db", "foo_schema");
+ }
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 380e16a513c..c0b499fe978 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -103,8 +103,7 @@ public abstract class DatabaseCommunicationEngine<T> {
public abstract T execute();
protected void refreshMetaData(final ExecutionContext executionContext) throws SQLException {
- SQLStatement sqlStatement = executionContext.getSqlStatementContext().getSqlStatement();
- metadataRefreshEngine.refresh(sqlStatement, () -> executionContext.getRouteContext().getRouteUnits().stream()
+ metadataRefreshEngine.refresh(executionContext.getSqlStatementContext(), () -> executionContext.getRouteContext().getRouteUnits().stream()
.map(each -> each.getDataSourceMapper().getLogicName()).collect(Collectors.toList()));
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
index 36175b03043..ed15f364eef 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
@@ -228,6 +228,7 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLPrepareStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLTruncateStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLDropServerStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLCreateSchemaStatement;
import java.util.Collection;
import java.util.Collections;
@@ -799,7 +800,9 @@ public final class PostgreSQLDDLStatementSQLVisitor extends PostgreSQLStatementS
@Override
public ASTNode visitCreateSchema(final CreateSchemaContext ctx) {
- return new PostgreSQLCreateLanguageStatement();
+ PostgreSQLCreateSchemaStatement result = new PostgreSQLCreateSchemaStatement();
+ result.setSchemaName(ctx.createSchemaClauses().colId().getText());
+ return result;
}
@Override
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java
similarity index 67%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java
index 32f3b7d2df3..2fe89a2dcb0 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java
@@ -15,16 +15,17 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.ddl;
+import lombok.Getter;
+import lombok.Setter;
import lombok.ToString;
import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
-import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
-/**
- * PostgreSQL create schema statement.
- */
+@Getter
+@Setter
@ToString
-public final class PostgreSQLCreateSchemaStatement extends AbstractSQLStatement implements DDLStatement, PostgreSQLStatement {
+public abstract class CreateSchemaStatement extends AbstractSQLStatement implements DDLStatement {
+
+ private String schemaName;
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
index 32f3b7d2df3..549ca57e552 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
@@ -17,8 +17,9 @@
package org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl;
+import lombok.Setter;
import lombok.ToString;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
@@ -26,5 +27,6 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.Pos
* PostgreSQL create schema statement.
*/
@ToString
-public final class PostgreSQLCreateSchemaStatement extends AbstractSQLStatement implements DDLStatement, PostgreSQLStatement {
+@Setter
+public final class PostgreSQLCreateSchemaStatement extends CreateSchemaStatement implements DDLStatement, PostgreSQLStatement {
}