This is an automated email from the ASF dual-hosted git repository.
zhangyonglun 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 858cee6 Decouple SQLStatementContext and MetaDataRefreshStrategy
(#7745)
858cee6 is described below
commit 858cee60d6664938ec520b9e5d5c91fc0a079a65
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Oct 12 00:30:52 2020 +0800
Decouple SQLStatementContext and MetaDataRefreshStrategy (#7745)
* Use SQLStatement for MetaDataRefreshStrategy
* Use SQLStatement for MetaDataRefreshStrategyFactory
---
.../metadata/refresh/MetaDataRefreshStrategy.java | 11 ++--
.../refresh/MetaDataRefreshStrategyFactory.java | 31 +++++------
...AlterTableStatementMetaDataRefreshStrategy.java | 12 ++---
...reateIndexStatementMetaDataRefreshStrategy.java | 14 +++--
...reateTableStatementMetaDataRefreshStrategy.java | 12 ++---
.../DropIndexStatementMetaDataRefreshStrategy.java | 14 +++--
.../DropTableStatementMetaDataRefreshStrategy.java | 8 +--
...rTableStatementMetaDataRefreshStrategyTest.java | 10 ++--
...eIndexStatementMetaDataRefreshStrategyTest.java | 11 ++--
...eTableStatementMetaDataRefreshStrategyTest.java | 18 +++----
...pIndexStatementMetaDataRefreshStrategyTest.java | 13 ++---
...pTableStatementMetaDataRefreshStrategyTest.java | 16 +++---
.../MetaDataRefreshStrategyFactoryTest.java | 61 ++++++++++------------
.../driver/executor/AbstractStatementExecutor.java | 23 ++++----
.../driver/executor/PreparedStatementExecutor.java | 9 ++--
.../driver/executor/StatementExecutor.java | 31 +++++------
.../statement/ShardingSpherePreparedStatement.java | 2 +-
.../core/statement/ShardingSphereStatement.java | 8 +--
.../executor/PreparedStatementExecutorTest.java | 15 +++---
.../driver/executor/StatementExecutorTest.java | 36 ++++++-------
.../jdbc/JDBCDatabaseCommunicationEngine.java | 21 ++++----
21 files changed, 180 insertions(+), 196 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategy.java
index fe23653..6c2e13d 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategy.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.metadata.refresh;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -28,9 +28,9 @@ import java.util.Map;
/**
* Meta data refresh strategy.
*
- * @param <T> type of SQL statement context
+ * @param <T> type of SQL statement
*/
-public interface MetaDataRefreshStrategy<T extends SQLStatementContext<?>> {
+public interface MetaDataRefreshStrategy<T extends SQLStatement> {
/**
* Refresh meta data.
@@ -38,10 +38,9 @@ public interface MetaDataRefreshStrategy<T extends
SQLStatementContext<?>> {
* @param metaData ShardingSphere meta data
* @param databaseType database type
* @param dataSourceMap dataSource map
- * @param sqlStatementContext SQL statement context
+ * @param sqlStatement SQL statement
* @param callback callback
* @throws SQLException SQL exception
*/
- void refreshMetaData(ShardingSphereMetaData metaData,
- DatabaseType databaseType, Map<String, DataSource>
dataSourceMap, T sqlStatementContext, TableMetaDataLoaderCallback callback)
throws SQLException;
+ void refreshMetaData(ShardingSphereMetaData metaData, DatabaseType
databaseType, Map<String, DataSource> dataSourceMap, T sqlStatement,
TableMetaDataLoaderCallback callback) throws SQLException;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactory.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactory.java
index 709402d..218002c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactory.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactory.java
@@ -24,15 +24,16 @@ import
org.apache.shardingsphere.infra.metadata.refresh.impl.CreateIndexStatemen
import
org.apache.shardingsphere.infra.metadata.refresh.impl.CreateTableStatementMetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.impl.DropIndexStatementMetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.impl.DropTableStatementMetaDataRefreshStrategy;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.AlterTableStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateIndexStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateTableStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.DropIndexStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.DropTableStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
/**
@@ -41,23 +42,23 @@ import java.util.Optional;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class MetaDataRefreshStrategyFactory {
- private static final Map<Class<?>, MetaDataRefreshStrategy> REGISTRY = new
HashMap<>();
+ private static final Map<Class<?>, MetaDataRefreshStrategy<?>> REGISTRY =
new HashMap<>();
static {
- REGISTRY.put(CreateTableStatementContext.class, new
CreateTableStatementMetaDataRefreshStrategy());
- REGISTRY.put(AlterTableStatementContext.class, new
AlterTableStatementMetaDataRefreshStrategy());
- REGISTRY.put(DropTableStatementContext.class, new
DropTableStatementMetaDataRefreshStrategy());
- REGISTRY.put(CreateIndexStatementContext.class, new
CreateIndexStatementMetaDataRefreshStrategy());
- REGISTRY.put(DropIndexStatementContext.class, new
DropIndexStatementMetaDataRefreshStrategy());
+ REGISTRY.put(CreateTableStatement.class, new
CreateTableStatementMetaDataRefreshStrategy());
+ REGISTRY.put(AlterTableStatement.class, new
AlterTableStatementMetaDataRefreshStrategy());
+ REGISTRY.put(DropTableStatement.class, new
DropTableStatementMetaDataRefreshStrategy());
+ REGISTRY.put(CreateIndexStatement.class, new
CreateIndexStatementMetaDataRefreshStrategy());
+ REGISTRY.put(DropIndexStatement.class, new
DropIndexStatementMetaDataRefreshStrategy());
}
/**
* Create new instance of meta data refresh strategy.
*
- * @param sqlStatementContext SQL statement context
+ * @param sqlStatement SQL statement
* @return meta data refresh strategy
*/
- public static Optional<MetaDataRefreshStrategy> newInstance(final
SQLStatementContext<?> sqlStatementContext) {
- return
Optional.ofNullable(REGISTRY.get(sqlStatementContext.getClass()));
+ public static Optional<MetaDataRefreshStrategy> newInstance(final
SQLStatement sqlStatement) {
+ return REGISTRY.entrySet().stream().filter(entry ->
entry.getKey().isAssignableFrom(sqlStatement.getClass())).findFirst().map(Entry::getValue);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
index 6ab0e69..7c720db 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/AlterTableStatementMetaDataRefreshStrategy.java
@@ -17,13 +17,13 @@
package org.apache.shardingsphere.infra.metadata.refresh.impl;
+import org.apache.shardingsphere.infra.binder.metadata.schema.SchemaMetaData;
+import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
-import org.apache.shardingsphere.infra.binder.metadata.schema.SchemaMetaData;
-import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.AlterTableStatementContext;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -32,12 +32,12 @@ import java.util.Map;
/**
* Alter table statement meta data refresh strategy.
*/
-public final class AlterTableStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<AlterTableStatementContext> {
+public final class AlterTableStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<AlterTableStatement> {
@Override
public void refreshMetaData(final ShardingSphereMetaData metaData, final
DatabaseType databaseType,
- final Map<String, DataSource> dataSourceMap,
final AlterTableStatementContext sqlStatementContext, final
TableMetaDataLoaderCallback callback) throws SQLException {
- String tableName =
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
+ final Map<String, DataSource> dataSourceMap,
final AlterTableStatement sqlStatement, final TableMetaDataLoaderCallback
callback) throws SQLException {
+ String tableName =
sqlStatement.getTable().getTableName().getIdentifier().getValue();
SchemaMetaData schemaMetaData =
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData();
if (null != schemaMetaData && schemaMetaData.containsTable(tableName))
{
callback.load(tableName).ifPresent(tableMetaData ->
alterMetaData(metaData, tableName, tableMetaData));
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateIndexStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateIndexStatementMetaDataRefreshStrategy.java
index f0ee58a..4f27cd9 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateIndexStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateIndexStatementMetaDataRefreshStrategy.java
@@ -17,12 +17,11 @@
package org.apache.shardingsphere.infra.metadata.refresh.impl;
+import org.apache.shardingsphere.infra.binder.metadata.index.IndexMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
-import org.apache.shardingsphere.infra.binder.metadata.index.IndexMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateIndexStatementContext;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
import javax.sql.DataSource;
@@ -31,17 +30,16 @@ import java.util.Map;
/**
* Create index statement meta data refresh strategy.
*/
-public final class CreateIndexStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<CreateIndexStatementContext> {
+public final class CreateIndexStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<CreateIndexStatement> {
@Override
public void refreshMetaData(final ShardingSphereMetaData metaData, final
DatabaseType databaseType,
- final Map<String, DataSource> dataSourceMap,
final CreateIndexStatementContext sqlStatementContext, final
TableMetaDataLoaderCallback callback) {
- CreateIndexStatement createIndexStatement =
sqlStatementContext.getSqlStatement();
- if (null == createIndexStatement.getIndex()) {
+ final Map<String, DataSource> dataSourceMap,
final CreateIndexStatement sqlStatement, final TableMetaDataLoaderCallback
callback) {
+ if (null == sqlStatement.getIndex()) {
return;
}
- String indexName =
createIndexStatement.getIndex().getIdentifier().getValue();
- String tableName =
createIndexStatement.getTable().getTableName().getIdentifier().getValue();
+ String indexName = sqlStatement.getIndex().getIdentifier().getValue();
+ String tableName =
sqlStatement.getTable().getTableName().getIdentifier().getValue();
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().get(tableName).getIndexes().put(indexName,
new IndexMetaData(indexName));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
index b9aa95a..05c1809 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
@@ -18,12 +18,12 @@
package org.apache.shardingsphere.infra.metadata.refresh.impl;
import com.google.common.collect.Lists;
+import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
-import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateTableStatementContext;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -35,12 +35,12 @@ import java.util.Optional;
/**
* Create table statement meta data refresh strategy.
*/
-public final class CreateTableStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<CreateTableStatementContext> {
+public final class CreateTableStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<CreateTableStatement> {
@Override
public void refreshMetaData(final ShardingSphereMetaData metaData, final
DatabaseType databaseType,
- final Map<String, DataSource> dataSourceMap,
final CreateTableStatementContext sqlStatementContext, final
TableMetaDataLoaderCallback callback) throws SQLException {
- String tableName =
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
+ final Map<String, DataSource> dataSourceMap,
final CreateTableStatement sqlStatement, final TableMetaDataLoaderCallback
callback) throws SQLException {
+ String tableName =
sqlStatement.getTable().getTableName().getIdentifier().getValue();
Optional<TableMetaData> tableMetaData = callback.load(tableName);
if (tableMetaData.isPresent()) {
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().put(tableName,
tableMetaData.get());
@@ -51,7 +51,7 @@ public final class
CreateTableStatementMetaDataRefreshStrategy implements MetaDa
}
}
- private void refreshUnconfiguredMetaData(final ShardingSphereMetaData
metaData, final Map<String, DataSource> dataSourceMap, final String tableName)
throws SQLException {
+ private void refreshUnconfiguredMetaData(final ShardingSphereMetaData
metaData, final Map<String, DataSource> dataSourceMap, final String tableName) {
for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
refreshUnconfiguredMetaData(metaData, tableName, entry.getKey());
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropIndexStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropIndexStatementMetaDataRefreshStrategy.java
index a45900e..149d517 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropIndexStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropIndexStatementMetaDataRefreshStrategy.java
@@ -17,13 +17,12 @@
package org.apache.shardingsphere.infra.metadata.refresh.impl;
+import org.apache.shardingsphere.infra.binder.metadata.schema.SchemaMetaData;
+import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
-import org.apache.shardingsphere.infra.binder.metadata.schema.SchemaMetaData;
-import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.DropIndexStatementContext;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.DropIndexStatementHandler;
@@ -38,14 +37,13 @@ import java.util.stream.Collectors;
/**
* Drop index statement meta data refresh strategy.
*/
-public final class DropIndexStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<DropIndexStatementContext> {
+public final class DropIndexStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<DropIndexStatement> {
@Override
public void refreshMetaData(final ShardingSphereMetaData metaData, final
DatabaseType databaseType,
- final Map<String, DataSource> dataSourceMap,
final DropIndexStatementContext sqlStatementContext, final
TableMetaDataLoaderCallback callback) {
- DropIndexStatement dropIndexStatement =
sqlStatementContext.getSqlStatement();
- Collection<String> indexNames = getIndexNames(dropIndexStatement);
- Optional<SimpleTableSegment> simpleTableSegment =
DropIndexStatementHandler.getSimpleTableSegment(dropIndexStatement);
+ final Map<String, DataSource> dataSourceMap,
final DropIndexStatement sqlStatement, final TableMetaDataLoaderCallback
callback) {
+ Collection<String> indexNames = getIndexNames(sqlStatement);
+ Optional<SimpleTableSegment> simpleTableSegment =
DropIndexStatementHandler.getSimpleTableSegment(sqlStatement);
String tableName = simpleTableSegment.map(tableSegment ->
tableSegment.getTableName().getIdentifier().getValue()).orElse("");
TableMetaData tableMetaData =
metaData.getRuleSchemaMetaData().getConfiguredSchemaMetaData().get(tableName);
if (simpleTableSegment.isPresent()) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
index ea3b9cc..7058601 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
@@ -21,7 +21,7 @@ import
org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.DropTableStatementContext;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
import javax.sql.DataSource;
import java.util.Map;
@@ -29,12 +29,12 @@ import java.util.Map;
/**
* Drop table statement meta data refresh strategy.
*/
-public final class DropTableStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<DropTableStatementContext> {
+public final class DropTableStatementMetaDataRefreshStrategy implements
MetaDataRefreshStrategy<DropTableStatement> {
@Override
public void refreshMetaData(final ShardingSphereMetaData metaData, final
DatabaseType databaseType,
- final Map<String, DataSource> dataSourceMap,
final DropTableStatementContext sqlStatementContext, final
TableMetaDataLoaderCallback callback) {
- sqlStatementContext.getSqlStatement().getTables().forEach(each ->
removeMetaData(metaData, each.getTableName().getIdentifier().getValue()));
+ final Map<String, DataSource> dataSourceMap,
final DropTableStatement sqlStatement, final TableMetaDataLoaderCallback
callback) {
+ sqlStatement.getTables().forEach(each -> removeMetaData(metaData,
each.getTableName().getIdentifier().getValue()));
}
private void removeMetaData(final ShardingSphereMetaData metaData, final
String tableName) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/AlterTableStatementMetaDataRefreshStrategyTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/AlterTableStatementMetaDataRefreshStrategyTest.java
index 03bb81e..8e2e1fc 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/AlterTableStatementMetaDataRefreshStrategyTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/AlterTableStatementMetaDataRefreshStrategyTest.java
@@ -17,12 +17,11 @@
package org.apache.shardingsphere.infra.metadata.refresh;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.refresh.impl.AlterTableStatementMetaDataRefreshStrategy;
import org.apache.shardingsphere.infra.binder.metadata.column.ColumnMetaData;
import org.apache.shardingsphere.infra.binder.metadata.index.IndexMetaData;
import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.AlterTableStatementContext;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.refresh.impl.AlterTableStatementMetaDataRefreshStrategy;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
@@ -69,10 +68,9 @@ public final class
AlterTableStatementMetaDataRefreshStrategyTest extends Abstra
}
private void refreshMetaData(final AlterTableStatement
alterTableStatement) throws SQLException {
- MetaDataRefreshStrategy<AlterTableStatementContext>
metaDataRefreshStrategy = new AlterTableStatementMetaDataRefreshStrategy();
+ MetaDataRefreshStrategy<AlterTableStatement> metaDataRefreshStrategy =
new AlterTableStatementMetaDataRefreshStrategy();
alterTableStatement.setTable(new SimpleTableSegment(new
TableNameSegment(1, 3, new IdentifierValue("t_order"))));
- AlterTableStatementContext alterTableStatementContext = new
AlterTableStatementContext(alterTableStatement);
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), alterTableStatementContext,
tableName -> Optional.of(new TableMetaData(
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), alterTableStatement,
tableName -> Optional.of(new TableMetaData(
Collections.singletonList(new ColumnMetaData("order_id", 1,
"String", true, false, false)),
Collections.singletonList(new IndexMetaData("index_alter")))));
assertTrue(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("index_alter"));
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateIndexStatementMetaDataRefreshStrategyTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateIndexStatementMetaDataRefreshStrategyTest.java
index d0082d8..2337d61 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateIndexStatementMetaDataRefreshStrategyTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateIndexStatementMetaDataRefreshStrategyTest.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.metadata.refresh;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.refresh.impl.CreateIndexStatementMetaDataRefreshStrategy;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateIndexStatementContext;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
@@ -62,11 +61,10 @@ public final class
CreateIndexStatementMetaDataRefreshStrategyTest extends Abstr
}
private void refreshMetaData(final CreateIndexStatement
createIndexStatement) throws SQLException {
- MetaDataRefreshStrategy<CreateIndexStatementContext>
metaDataRefreshStrategy = new CreateIndexStatementMetaDataRefreshStrategy();
+ MetaDataRefreshStrategy<CreateIndexStatement> metaDataRefreshStrategy
= new CreateIndexStatementMetaDataRefreshStrategy();
createIndexStatement.setIndex(new IndexSegment(1, 2, new
IdentifierValue("t_order_index")));
createIndexStatement.setTable(new SimpleTableSegment(new
TableNameSegment(1, 3, new IdentifierValue("t_order"))));
- CreateIndexStatementContext createIndexStatementContext = new
CreateIndexStatementContext(createIndexStatement);
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), createIndexStatementContext,
tableName -> Optional.empty());
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), createIndexStatement,
tableName -> Optional.empty());
assertTrue(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("t_order_index"));
}
@@ -91,10 +89,9 @@ public final class
CreateIndexStatementMetaDataRefreshStrategyTest extends Abstr
}
private void refreshMetaDataIfIndexIsNull(final CreateIndexStatement
createIndexStatement) throws SQLException {
- MetaDataRefreshStrategy<CreateIndexStatementContext>
metaDataRefreshStrategy = new CreateIndexStatementMetaDataRefreshStrategy();
+ MetaDataRefreshStrategy<CreateIndexStatement> metaDataRefreshStrategy
= new CreateIndexStatementMetaDataRefreshStrategy();
createIndexStatement.setTable(new SimpleTableSegment(new
TableNameSegment(1, 3, new IdentifierValue("t_order"))));
- CreateIndexStatementContext createIndexStatementContext = new
CreateIndexStatementContext(createIndexStatement);
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), createIndexStatementContext,
tableName -> Optional.empty());
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), createIndexStatement,
tableName -> Optional.empty());
assertFalse(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("t_order_index"));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateTableStatementMetaDataRefreshStrategyTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateTableStatementMetaDataRefreshStrategyTest.java
index c33266a..1ab0d04 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateTableStatementMetaDataRefreshStrategyTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/CreateTableStatementMetaDataRefreshStrategyTest.java
@@ -17,13 +17,12 @@
package org.apache.shardingsphere.infra.metadata.refresh;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import
org.apache.shardingsphere.infra.metadata.refresh.impl.CreateTableStatementMetaDataRefreshStrategy;
import org.apache.shardingsphere.infra.binder.metadata.column.ColumnMetaData;
import org.apache.shardingsphere.infra.binder.metadata.index.IndexMetaData;
import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateTableStatementContext;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import
org.apache.shardingsphere.infra.metadata.refresh.impl.CreateTableStatementMetaDataRefreshStrategy;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
@@ -86,9 +85,8 @@ public final class
CreateTableStatementMetaDataRefreshStrategyTest extends Abstr
private void refreshMetaData(final CreateTableStatement
createTableStatement) throws SQLException {
createTableStatement.setTable(new SimpleTableSegment(new
TableNameSegment(1, 3, new IdentifierValue("t_order_0"))));
- CreateTableStatementContext createTableStatementContext = new
CreateTableStatementContext(createTableStatement);
- MetaDataRefreshStrategy<CreateTableStatementContext>
metaDataRefreshStrategy = new CreateTableStatementMetaDataRefreshStrategy();
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), createTableStatementContext,
tableName -> Optional.of(new TableMetaData(
+ MetaDataRefreshStrategy<CreateTableStatement> metaDataRefreshStrategy
= new CreateTableStatementMetaDataRefreshStrategy();
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), createTableStatement,
tableName -> Optional.of(new TableMetaData(
Collections.singletonList(new ColumnMetaData("order_id", 1,
"String", true, false, false)),
Collections.singletonList(new IndexMetaData("index")))));
assertTrue(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().containsTable("t_order_0"));
@@ -128,12 +126,10 @@ public final class
CreateTableStatementMetaDataRefreshStrategyTest extends Abstr
private void assertRefreshMetaDataWithUnConfigured(final
CreateTableStatement createTableStatement) throws SQLException {
createTableStatement.setTable(new SimpleTableSegment(new
TableNameSegment(1, 3, new IdentifierValue("t_order_item_0"))));
- CreateTableStatementContext createTableStatementContext = new
CreateTableStatementContext(createTableStatement);
Map<String, DataSource> dataSourceSourceMap = new LinkedHashMap<>(1,
1);
dataSourceSourceMap.put("t_order_item", initDataSource());
- MetaDataRefreshStrategy<CreateTableStatementContext>
metaDataRefreshStrategy = new CreateTableStatementMetaDataRefreshStrategy();
- metaDataRefreshStrategy.refreshMetaData(getMetaData(), new
MySQLDatabaseType(), dataSourceSourceMap, createTableStatementContext,
- tableName -> Optional.empty());
+ MetaDataRefreshStrategy<CreateTableStatement> metaDataRefreshStrategy
= new CreateTableStatementMetaDataRefreshStrategy();
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(), new
MySQLDatabaseType(), dataSourceSourceMap, createTableStatement, tableName ->
Optional.empty());
assertTrue(getMetaData().getRuleSchemaMetaData().getUnconfiguredSchemaMetaDataMap().get("t_order_item").contains("t_order_item_0"));
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropIndexStatementMetaDataRefreshStrategyTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropIndexStatementMetaDataRefreshStrategyTest.java
index 983a6b6..0a0343e 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropIndexStatementMetaDataRefreshStrategyTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropIndexStatementMetaDataRefreshStrategyTest.java
@@ -17,10 +17,9 @@
package org.apache.shardingsphere.infra.metadata.refresh;
+import org.apache.shardingsphere.infra.binder.metadata.index.IndexMetaData;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.refresh.impl.DropIndexStatementMetaDataRefreshStrategy;
-import org.apache.shardingsphere.infra.binder.metadata.index.IndexMetaData;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.DropIndexStatementContext;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
@@ -56,9 +55,8 @@ public final class
DropIndexStatementMetaDataRefreshStrategyTest extends Abstrac
private void refreshMetaData(final DropIndexStatement dropIndexStatement)
throws SQLException {
dropIndexStatement.getIndexes().add(new IndexSegment(1, 2, new
IdentifierValue("index")));
- MetaDataRefreshStrategy<DropIndexStatementContext>
metaDataRefreshStrategy = new DropIndexStatementMetaDataRefreshStrategy();
- DropIndexStatementContext dropIndexStatementContext = new
DropIndexStatementContext(dropIndexStatement);
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), dropIndexStatementContext,
tableName -> Optional.empty());
+ MetaDataRefreshStrategy<DropIndexStatement> metaDataRefreshStrategy =
new DropIndexStatementMetaDataRefreshStrategy();
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), dropIndexStatement, tableName
-> Optional.empty());
assertFalse(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("index"));
}
@@ -83,9 +81,8 @@ public final class
DropIndexStatementMetaDataRefreshStrategyTest extends Abstrac
Map<String, IndexMetaData> actualIndex =
getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes();
actualIndex.put("t_order_index", new IndexMetaData("t_order_index"));
actualIndex.put("order_id_index", new IndexMetaData("order_id_index"));
- DropIndexStatementContext dropIndexStatementContext = new
DropIndexStatementContext(dropIndexStatement);
- MetaDataRefreshStrategy<DropIndexStatementContext>
metaDataRefreshStrategy = new DropIndexStatementMetaDataRefreshStrategy();
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), dropIndexStatementContext,
tableName -> Optional.empty());
+ MetaDataRefreshStrategy<DropIndexStatement> metaDataRefreshStrategy =
new DropIndexStatementMetaDataRefreshStrategy();
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), dropIndexStatement, tableName
-> Optional.empty());
assertFalse(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("index"));
assertFalse(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("t_order_index"));
assertFalse(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().get("t_order").getIndexes().containsKey("order_id_index"));
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropTableStatementMetaDataRefreshStrategyTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropTableStatementMetaDataRefreshStrategyTest.java
index 62defcf..ab151c2 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropTableStatementMetaDataRefreshStrategyTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/DropTableStatementMetaDataRefreshStrategyTest.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.infra.metadata.refresh;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.refresh.impl.DropTableStatementMetaDataRefreshStrategy;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.DropTableStatementContext;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
@@ -44,32 +43,31 @@ public final class
DropTableStatementMetaDataRefreshStrategyTest extends Abstrac
public void refreshMySQLDropTableMetaData() throws SQLException {
refreshMetaData(new MySQLDropTableStatement());
}
-
+
@Test
public void refreshOracleDropTableMetaData() throws SQLException {
refreshMetaData(new OracleDropTableStatement());
}
-
+
@Test
public void refreshPostgreSQLDropTableMetaData() throws SQLException {
refreshMetaData(new PostgreSQLDropTableStatement());
}
-
+
@Test
public void refreshSQL92DropTableMetaData() throws SQLException {
refreshMetaData(new SQL92DropTableStatement());
}
-
+
@Test
public void refreshSQLServerDropTableMetaData() throws SQLException {
refreshMetaData(new SQLServerDropTableStatement());
}
-
+
private void refreshMetaData(final DropTableStatement dropTableStatement)
throws SQLException {
- MetaDataRefreshStrategy<DropTableStatementContext>
metaDataRefreshStrategy = new DropTableStatementMetaDataRefreshStrategy();
+ MetaDataRefreshStrategy<DropTableStatement> metaDataRefreshStrategy =
new DropTableStatementMetaDataRefreshStrategy();
dropTableStatement.getTables().add(new SimpleTableSegment(new
TableNameSegment(1, 3, new IdentifierValue("t_order"))));
- DropTableStatementContext dropTableStatementContext = new
DropTableStatementContext(dropTableStatement);
- metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), dropTableStatementContext,
tableName -> Optional.empty());
+ metaDataRefreshStrategy.refreshMetaData(getMetaData(),
mock(DatabaseType.class), Collections.emptyMap(), dropTableStatement, tableName
-> Optional.empty());
assertFalse(getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData().containsTable("t_order"));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactoryTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactoryTest.java
index a67ff33..05ae82f 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactoryTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/refresh/MetaDataRefreshStrategyFactoryTest.java
@@ -17,53 +17,50 @@
package org.apache.shardingsphere.infra.metadata.refresh;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.AlterIndexStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.AlterTableStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateIndexStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.ddl.CreateTableStatementContext;
-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.TruncateStatementContext;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
@RunWith(MockitoJUnitRunner.class)
public final class MetaDataRefreshStrategyFactoryTest {
- @Mock
- private CreateTableStatementContext createTableStatementContext;
-
- @Mock
- private CreateIndexStatementContext createIndexStatementContext;
-
- @Mock
- private AlterIndexStatementContext alterIndexStatementContext;
+ @Test
+ public void assertNewInstanceWithCreateTableStatement() {
+
assertTrue(MetaDataRefreshStrategyFactory.newInstance(mock(CreateTableStatement.class)).isPresent());
+ }
- @Mock
- private AlterTableStatementContext alterTableStatementContext;
+ @Test
+ public void assertNewInstanceWithAlterTableStatement() {
+
assertTrue(MetaDataRefreshStrategyFactory.newInstance(mock(AlterTableStatement.class)).isPresent());
+ }
- @Mock
- private DropIndexStatementContext dropIndexStatementContext;
+ @Test
+ public void assertNewInstanceWithDropTableStatement() {
+
assertTrue(MetaDataRefreshStrategyFactory.newInstance(mock(DropTableStatement.class)).isPresent());
+ }
- @Mock
- private DropTableStatementContext dropTableStatementContext;
+ @Test
+ public void assertNewInstanceWithCreateIndexStatement() {
+
assertTrue(MetaDataRefreshStrategyFactory.newInstance(mock(CreateIndexStatement.class)).isPresent());
+ }
- @Mock
- private TruncateStatementContext truncateStatementContext;
+ @Test
+ public void assertNewInstanceWithDropIndexStatement() {
+
assertTrue(MetaDataRefreshStrategyFactory.newInstance(mock(DropIndexStatement.class)).isPresent());
+ }
@Test
- public void assertNewInstance() {
-
assertTrue(MetaDataRefreshStrategyFactory.newInstance(createTableStatementContext).isPresent());
-
assertTrue(MetaDataRefreshStrategyFactory.newInstance(createIndexStatementContext).isPresent());
-
assertFalse(MetaDataRefreshStrategyFactory.newInstance(alterIndexStatementContext).isPresent());
-
assertTrue(MetaDataRefreshStrategyFactory.newInstance(alterTableStatementContext).isPresent());
-
assertTrue(MetaDataRefreshStrategyFactory.newInstance(dropIndexStatementContext).isPresent());
-
assertTrue(MetaDataRefreshStrategyFactory.newInstance(dropTableStatementContext).isPresent());
-
assertFalse(MetaDataRefreshStrategyFactory.newInstance(truncateStatementContext).isPresent());
+ public void assertNewInstanceWithSQLStatementNotNeedRefresh() {
+
assertFalse(MetaDataRefreshStrategyFactory.newInstance(mock(AlterIndexStatement.class)).isPresent());
}
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
index af8373f..8c7cb9b 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
@@ -19,14 +19,14 @@ package org.apache.shardingsphere.driver.executor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.context.schema.SchemaContexts;
-import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.SQLExecutorCallback;
-import org.apache.shardingsphere.infra.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.database.DefaultSchema;
import org.apache.shardingsphere.infra.executor.kernel.InputGroup;
import org.apache.shardingsphere.infra.executor.sql.QueryResult;
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.StatementExecuteUnit;
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.SQLExecutor;
+import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.SQLExecutorCallback;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategyFactory;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaData;
@@ -34,9 +34,10 @@ import
org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaDataLoader;
import
org.apache.shardingsphere.infra.metadata.schema.spi.RuleMetaDataNotifier;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.infra.spi.ordered.OrderedSPIRegistry;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -72,23 +73,23 @@ public abstract class AbstractStatementExecutor {
}
@SuppressWarnings({"unchecked", "rawtypes"})
- protected final void refreshTableMetaData(final ShardingSphereSchema
schema, final SQLStatementContext<?> sqlStatementContext) throws SQLException {
- if (null == sqlStatementContext) {
+ protected final void refreshTableMetaData(final ShardingSphereSchema
schema, final SQLStatement sqlStatement) throws SQLException {
+ if (null == sqlStatement) {
return;
}
- Optional<MetaDataRefreshStrategy> refreshStrategy =
MetaDataRefreshStrategyFactory.newInstance(sqlStatementContext);
+ Optional<MetaDataRefreshStrategy> refreshStrategy =
MetaDataRefreshStrategyFactory.newInstance(sqlStatement);
if (refreshStrategy.isPresent()) {
RuleSchemaMetaDataLoader metaDataLoader = new
RuleSchemaMetaDataLoader(schema.getRules());
- refreshStrategy.get().refreshMetaData(schema.getMetaData(),
schemaContexts.getDatabaseType(), dataSourceMap, sqlStatementContext,
+ refreshStrategy.get().refreshMetaData(schema.getMetaData(),
schemaContexts.getDatabaseType(), dataSourceMap, sqlStatement,
tableName ->
metaDataLoader.load(schemaContexts.getDatabaseType(), dataSourceMap, tableName,
schemaContexts.getProps()));
notifyPersistRuleMetaData(DefaultSchema.LOGIC_NAME,
schema.getMetaData().getRuleSchemaMetaData());
}
}
- protected boolean executeAndRefreshMetaData(final
Collection<InputGroup<StatementExecuteUnit>> inputGroups, final
SQLStatementContext<?> sqlStatementContext,
+ protected boolean executeAndRefreshMetaData(final
Collection<InputGroup<StatementExecuteUnit>> inputGroups, final SQLStatement
sqlStatement,
final
SQLExecutorCallback<Boolean> sqlExecutorCallback) throws SQLException {
List<Boolean> result = sqlExecutor.execute(inputGroups,
sqlExecutorCallback);
- refreshTableMetaData(schemaContexts.getDefaultSchema(),
sqlStatementContext);
+ refreshTableMetaData(schemaContexts.getDefaultSchema(), sqlStatement);
return null != result && !result.isEmpty() && null != result.get(0) &&
result.get(0);
}
@@ -100,11 +101,11 @@ public abstract class AbstractStatementExecutor {
* Execute SQL.
*
* @param inputGroups input groups
- * @param sqlStatementContext SQL statement context
+ * @param sqlStatement SQL statement
* @return return true if is DQL, false if is DML
* @throws SQLException SQL exception
*/
- public abstract boolean
execute(Collection<InputGroup<StatementExecuteUnit>> inputGroups,
SQLStatementContext<?> sqlStatementContext) throws SQLException;
+ public abstract boolean
execute(Collection<InputGroup<StatementExecuteUnit>> inputGroups, SQLStatement
sqlStatement) throws SQLException;
/**
* Execute query.
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
index 24e589f..03a407e 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.driver.executor;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.context.schema.SchemaContexts;
import org.apache.shardingsphere.infra.executor.kernel.InputGroup;
import org.apache.shardingsphere.infra.executor.sql.ConnectionMode;
@@ -29,7 +30,7 @@ import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.impl
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.MemoryQueryResult;
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.StreamQueryResult;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import javax.sql.DataSource;
import java.sql.PreparedStatement;
@@ -78,7 +79,7 @@ public final class PreparedStatementExecutor extends
AbstractStatementExecutor {
boolean isExceptionThrown =
ExecutorExceptionHandler.isExceptionThrown();
SQLExecutorCallback<Integer> sqlExecutorCallback =
createDefaultSQLExecutorCallbackWithInteger(isExceptionThrown);
List<Integer> results = getSqlExecutor().execute(inputGroups,
sqlExecutorCallback);
- refreshTableMetaData(getSchemaContexts().getDefaultSchema(),
sqlStatementContext);
+ refreshTableMetaData(getSchemaContexts().getDefaultSchema(),
sqlStatementContext.getSqlStatement());
return isNeedAccumulate(
getSchemaContexts().getDefaultSchema().getRules().stream().filter(rule -> rule
instanceof DataNodeRoutedRule).collect(Collectors.toList()),
sqlStatementContext)
? accumulate(results) : results.get(0);
@@ -95,10 +96,10 @@ public final class PreparedStatementExecutor extends
AbstractStatementExecutor {
}
@Override
- public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatementContext<?> sqlStatementContext) throws
SQLException {
+ public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatement sqlStatement) throws SQLException {
boolean isExceptionThrown =
ExecutorExceptionHandler.isExceptionThrown();
SQLExecutorCallback<Boolean> sqlExecutorCallback =
createDefaultSQLExecutorCallbackWithBoolean(isExceptionThrown);
- return executeAndRefreshMetaData(inputGroups, sqlStatementContext,
sqlExecutorCallback);
+ return executeAndRefreshMetaData(inputGroups, sqlStatement,
sqlExecutorCallback);
}
private DefaultSQLExecutorCallback<Boolean>
createDefaultSQLExecutorCallbackWithBoolean(final boolean isExceptionThrown) {
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
index afe9a52..17d1e28 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.driver.executor;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.context.schema.SchemaContexts;
import org.apache.shardingsphere.infra.executor.kernel.InputGroup;
import org.apache.shardingsphere.infra.executor.sql.ConnectionMode;
@@ -29,7 +30,7 @@ import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.impl
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.MemoryQueryResult;
import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.StreamQueryResult;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import javax.sql.DataSource;
import java.sql.ResultSet;
@@ -122,7 +123,7 @@ public final class StatementExecutor extends
AbstractStatementExecutor {
}
};
List<Integer> results = getSqlExecutor().execute(inputGroups,
sqlExecutorCallback);
- refreshTableMetaData(getSchemaContexts().getDefaultSchema(),
sqlStatementContext);
+ refreshTableMetaData(getSchemaContexts().getDefaultSchema(),
sqlStatementContext.getSqlStatement());
if (isNeedAccumulate(
getSchemaContexts().getDefaultSchema().getRules().stream().filter(rule -> rule
instanceof DataNodeRoutedRule).collect(Collectors.toList()),
sqlStatementContext)) {
return accumulate(results);
@@ -131,51 +132,51 @@ public final class StatementExecutor extends
AbstractStatementExecutor {
}
@Override
- public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatementContext<?> sqlStatementContext) throws
SQLException {
- return execute(inputGroups, Statement::execute, sqlStatementContext);
+ public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatement sqlStatement) throws SQLException {
+ return execute(inputGroups, Statement::execute, sqlStatement);
}
/**
* Execute SQL with auto generated keys.
*
* @param inputGroups input groups
- * @param sqlStatementContext SQL statement context
+ * @param sqlStatement SQL statement
* @param autoGeneratedKeys auto generated keys' flag
* @return return true if is DQL, false if is DML
* @throws SQLException SQL exception
*/
- public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatementContext<?> sqlStatementContext, final int
autoGeneratedKeys) throws SQLException {
- return execute(inputGroups, (statement, sql) -> statement.execute(sql,
autoGeneratedKeys), sqlStatementContext);
+ public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatement sqlStatement, final int autoGeneratedKeys)
throws SQLException {
+ return execute(inputGroups, (statement, sql) -> statement.execute(sql,
autoGeneratedKeys), sqlStatement);
}
/**
* Execute SQL with column indexes.
*
* @param inputGroups input groups
- * @param sqlStatementContext SQL statement context
+ * @param sqlStatement SQL statement
* @param columnIndexes column indexes
* @return return true if is DQL, false if is DML
* @throws SQLException SQL exception
*/
- public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatementContext<?> sqlStatementContext, final int[]
columnIndexes) throws SQLException {
- return execute(inputGroups, (statement, sql) -> statement.execute(sql,
columnIndexes), sqlStatementContext);
+ public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatement sqlStatement, final int[] columnIndexes) throws
SQLException {
+ return execute(inputGroups, (statement, sql) -> statement.execute(sql,
columnIndexes), sqlStatement);
}
/**
* Execute SQL with column names.
*
* @param inputGroups input groups
- * @param sqlStatementContext SQL statement context
+ * @param sqlStatement SQL statement
* @param columnNames column names
* @return return true if is DQL, false if is DML
* @throws SQLException SQL exception
*/
- public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatementContext<?> sqlStatementContext, final String[]
columnNames) throws SQLException {
- return execute(inputGroups, (statement, sql) -> statement.execute(sql,
columnNames), sqlStatementContext);
+ public boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final SQLStatement sqlStatement, final String[] columnNames)
throws SQLException {
+ return execute(inputGroups, (statement, sql) -> statement.execute(sql,
columnNames), sqlStatement);
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final Executor executor, final SQLStatementContext<?>
sqlStatementContext) throws SQLException {
+ private boolean execute(final Collection<InputGroup<StatementExecuteUnit>>
inputGroups, final Executor executor, final SQLStatement sqlStatement) throws
SQLException {
boolean isExceptionThrown =
ExecutorExceptionHandler.isExceptionThrown();
SQLExecutorCallback sqlExecutorCallback = new
DefaultSQLExecutorCallback<Boolean>(getSchemaContexts().getDatabaseType(),
isExceptionThrown) {
@@ -184,7 +185,7 @@ public final class StatementExecutor extends
AbstractStatementExecutor {
return executor.execute(statement, sql);
}
};
- return executeAndRefreshMetaData(inputGroups, sqlStatementContext,
sqlExecutorCallback);
+ return executeAndRefreshMetaData(inputGroups, sqlStatement,
sqlExecutorCallback);
}
private interface Updater {
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index ca9dcc7..265626c 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -197,7 +197,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
Collection<InputGroup<StatementExecuteUnit>> inputGroups =
getInputGroups();
cacheStatements(inputGroups);
reply();
- return preparedStatementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext());
+ return preparedStatementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext().getSqlStatement());
} else {
// TODO process getStatement
return rawExecutor.execute(getRawInputGroups(), new
RawSQLExecutorCallback());
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index d6caf91..284cc21 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -215,7 +215,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (ExecutorConstant.MANAGED_RESOURCE) {
Collection<InputGroup<StatementExecuteUnit>> inputGroups =
getInputGroups();
cacheStatements(inputGroups);
- return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext());
+ return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext().getSqlStatement());
} else {
// TODO process getStatement
return rawExecutor.execute(getRawInputGroups(), new
RawSQLExecutorCallback());
@@ -235,7 +235,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (ExecutorConstant.MANAGED_RESOURCE) {
Collection<InputGroup<StatementExecuteUnit>> inputGroups =
getInputGroups();
cacheStatements(inputGroups);
- return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext(), autoGeneratedKeys);
+ return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext().getSqlStatement(), autoGeneratedKeys);
} else {
// TODO process getStatement
return rawExecutor.execute(getRawInputGroups(), new
RawSQLExecutorCallback());
@@ -253,7 +253,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (ExecutorConstant.MANAGED_RESOURCE) {
Collection<InputGroup<StatementExecuteUnit>> inputGroups =
getInputGroups();
cacheStatements(inputGroups);
- return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext(), columnIndexes);
+ return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext().getSqlStatement(), columnIndexes);
} else {
// TODO process getStatement
return rawExecutor.execute(getRawInputGroups(), new
RawSQLExecutorCallback());
@@ -271,7 +271,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (ExecutorConstant.MANAGED_RESOURCE) {
Collection<InputGroup<StatementExecuteUnit>> inputGroups =
getInputGroups();
cacheStatements(inputGroups);
- return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext(), columnNames);
+ return statementExecutor.execute(inputGroups,
executionContext.getSqlStatementContext().getSqlStatement(), columnNames);
} else {
// TODO process getStatement
return rawExecutor.execute(getRawInputGroups(), new
RawSQLExecutorCallback());
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutorTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutorTest.java
index eb290c1..4eb2795 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutorTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutorTest.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.executor.sql.ConnectionMode;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
import org.apache.shardingsphere.infra.executor.kernel.InputGroup;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.junit.Test;
import java.sql.DatabaseMetaData;
@@ -65,7 +66,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
@Test
public void assertNoStatement() throws SQLException {
- assertFalse(actual.execute(Collections.emptyList(),
createSQLStatementContext()));
+ assertFalse(actual.execute(Collections.emptyList(),
mock(SQLStatement.class)));
assertThat(actual.executeUpdate(Collections.emptyList(),
createSQLStatementContext()), is(0));
assertThat(actual.executeQuery(Collections.emptyList()).size(), is(0));
}
@@ -178,7 +179,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
public void assertExecuteForSinglePreparedStatementSuccessWithDML() throws
SQLException {
PreparedStatement preparedStatement = getPreparedStatement();
when(preparedStatement.execute()).thenReturn(false);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(preparedStatement),
false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(preparedStatement),
false), mock(SQLStatement.class)));
verify(preparedStatement).execute();
}
@@ -188,7 +189,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
PreparedStatement preparedStatement2 = getPreparedStatement();
when(preparedStatement1.execute()).thenReturn(false);
when(preparedStatement2.execute()).thenReturn(false);
-
assertFalse(actual.execute(getExecuteGroups(Arrays.asList(preparedStatement1,
preparedStatement2), false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Arrays.asList(preparedStatement1,
preparedStatement2), false), mock(SQLStatement.class)));
verify(preparedStatement1).execute();
verify(preparedStatement2).execute();
}
@@ -198,7 +199,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
PreparedStatement preparedStatement = getPreparedStatement();
SQLException ex = new SQLException("");
when(preparedStatement.execute()).thenThrow(ex);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(preparedStatement),
false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(preparedStatement),
false), mock(SQLStatement.class)));
verify(preparedStatement).execute();
}
@@ -209,7 +210,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
SQLException ex = new SQLException("");
when(preparedStatement1.execute()).thenThrow(ex);
when(preparedStatement2.execute()).thenThrow(ex);
-
assertFalse(actual.execute(getExecuteGroups(Arrays.asList(preparedStatement1,
preparedStatement2), false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Arrays.asList(preparedStatement1,
preparedStatement2), false), mock(SQLStatement.class)));
verify(preparedStatement1).execute();
verify(preparedStatement2).execute();
}
@@ -218,7 +219,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
public void assertExecuteForSinglePreparedStatementWithDQL() throws
SQLException {
PreparedStatement preparedStatement = getPreparedStatement();
when(preparedStatement.execute()).thenReturn(true);
-
assertTrue(actual.execute(getExecuteGroups(Collections.singletonList(preparedStatement),
true), createSQLStatementContext()));
+
assertTrue(actual.execute(getExecuteGroups(Collections.singletonList(preparedStatement),
true), mock(SQLStatement.class)));
verify(preparedStatement).execute();
}
@@ -228,7 +229,7 @@ public final class PreparedStatementExecutorTest extends
AbstractBaseExecutorTes
PreparedStatement preparedStatement2 = getPreparedStatement();
when(preparedStatement1.execute()).thenReturn(true);
when(preparedStatement2.execute()).thenReturn(true);
-
assertTrue(actual.execute(getExecuteGroups(Arrays.asList(preparedStatement1,
preparedStatement2), true), createSQLStatementContext()));
+
assertTrue(actual.execute(getExecuteGroups(Arrays.asList(preparedStatement1,
preparedStatement2), true), mock(SQLStatement.class)));
verify(preparedStatement1).execute();
verify(preparedStatement2).execute();
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/StatementExecutorTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/StatementExecutorTest.java
index fc5a650..fccd321 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/StatementExecutorTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/StatementExecutorTest.java
@@ -17,15 +17,16 @@
package org.apache.shardingsphere.driver.executor;
-import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.SQLExecutor;
-import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.ExecutorExceptionHandler;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
-import org.apache.shardingsphere.infra.executor.sql.QueryResult;
-import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.StatementExecuteUnit;
+import org.apache.shardingsphere.infra.executor.kernel.InputGroup;
import org.apache.shardingsphere.infra.executor.sql.ConnectionMode;
+import org.apache.shardingsphere.infra.executor.sql.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
-import org.apache.shardingsphere.infra.executor.kernel.InputGroup;
+import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.StatementExecuteUnit;
+import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.ExecutorExceptionHandler;
+import
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.executor.SQLExecutor;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.junit.Test;
import java.sql.Connection;
@@ -67,7 +68,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
@Test
public void assertNoStatement() throws SQLException {
- assertFalse(actual.execute(Collections.emptyList(),
createSQLStatementContext()));
+ assertFalse(actual.execute(Collections.emptyList(),
mock(SQLStatement.class)));
assertThat(actual.executeUpdate(Collections.emptyList(),
createSQLStatementContext()), is(0));
assertThat(actual.executeQuery(Collections.emptyList()).size(), is(0));
}
@@ -214,7 +215,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
public void assertExecuteForSingleStatementSuccessWithDML() throws
SQLException {
Statement statement = getStatement();
when(statement.execute(DML_SQL)).thenReturn(false);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), mock(SQLStatement.class)));
verify(statement).execute(DML_SQL);
}
@@ -224,7 +225,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
Statement statement2 = getStatement();
when(statement1.execute(DML_SQL)).thenReturn(false);
when(statement2.execute(DML_SQL)).thenReturn(false);
- assertFalse(actual.execute(getExecuteGroups(Arrays.asList(statement1,
statement2), false), createSQLStatementContext()));
+ assertFalse(actual.execute(getExecuteGroups(Arrays.asList(statement1,
statement2), false), mock(SQLStatement.class)));
verify(statement1).execute(DML_SQL);
verify(statement2).execute(DML_SQL);
}
@@ -234,7 +235,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
Statement statement = getStatement();
SQLException ex = new SQLException("");
when(statement.execute(DML_SQL)).thenThrow(ex);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), mock(SQLStatement.class)));
verify(statement).execute(DML_SQL);
}
@@ -245,7 +246,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
SQLException ex = new SQLException("");
when(statement1.execute(DML_SQL)).thenThrow(ex);
when(statement2.execute(DML_SQL)).thenThrow(ex);
- assertFalse(actual.execute(getExecuteGroups(Arrays.asList(statement1,
statement2), false), createSQLStatementContext()));
+ assertFalse(actual.execute(getExecuteGroups(Arrays.asList(statement1,
statement2), false), mock(SQLStatement.class)));
verify(statement1).execute(DML_SQL);
verify(statement2).execute(DML_SQL);
}
@@ -254,7 +255,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
public void assertExecuteForSingleStatementWithDQL() throws SQLException {
Statement statement = getStatement();
when(statement.execute(DQL_SQL)).thenReturn(true);
-
assertTrue(actual.execute(getExecuteGroups(Collections.singletonList(statement),
true), createSQLStatementContext()));
+
assertTrue(actual.execute(getExecuteGroups(Collections.singletonList(statement),
true), mock(SQLStatement.class)));
verify(statement).execute(DQL_SQL);
}
@@ -264,7 +265,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
Statement statement2 = getStatement();
when(statement1.execute(DQL_SQL)).thenReturn(true);
when(statement2.execute(DQL_SQL)).thenReturn(true);
- assertTrue(actual.execute(getExecuteGroups(Arrays.asList(statement1,
statement2), true), createSQLStatementContext()));
+ assertTrue(actual.execute(getExecuteGroups(Arrays.asList(statement1,
statement2), true), mock(SQLStatement.class)));
verify(statement1).execute(DQL_SQL);
verify(statement2).execute(DQL_SQL);
}
@@ -273,7 +274,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
public void assertExecuteWithAutoGeneratedKeys() throws SQLException {
Statement statement = getStatement();
when(statement.execute(DML_SQL,
Statement.NO_GENERATED_KEYS)).thenReturn(false);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), createSQLStatementContext(), Statement.NO_GENERATED_KEYS));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), mock(SQLStatement.class), Statement.NO_GENERATED_KEYS));
verify(statement).execute(DML_SQL, Statement.NO_GENERATED_KEYS);
}
@@ -281,7 +282,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
public void assertExecuteWithColumnIndexes() throws SQLException {
Statement statement = getStatement();
when(statement.execute(DML_SQL, new int[] {1})).thenReturn(false);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), createSQLStatementContext(), new int[] {1}));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), mock(SQLStatement.class), new int[] {1}));
verify(statement).execute(DML_SQL, new int[] {1});
}
@@ -289,7 +290,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
public void assertExecuteWithColumnNames() throws SQLException {
Statement statement = getStatement();
when(statement.execute(DML_SQL, new String[]
{"col"})).thenReturn(false);
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), createSQLStatementContext(), new String[] {"col"}));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), mock(SQLStatement.class), new String[] {"col"}));
verify(statement).execute(DML_SQL, new String[] {"col"});
}
@@ -300,7 +301,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
SQLException ex = new SQLException("");
when(statement.execute(DML_SQL)).thenThrow(ex);
try {
-
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), createSQLStatementContext()));
+
assertFalse(actual.execute(getExecuteGroups(Collections.singletonList(statement),
false), mock(SQLStatement.class)));
} catch (final SQLException ignored) {
}
}
@@ -311,8 +312,7 @@ public final class StatementExecutorTest extends
AbstractBaseExecutorTest {
result.add(new InputGroup<>(statementExecuteUnits));
for (Statement each : statements) {
statementExecuteUnits.add(
- new StatementExecuteUnit(new ExecutionUnit("ds_0", new
SQLUnit(isQuery ? DQL_SQL : DML_SQL, Collections.singletonList(1))),
- ConnectionMode.MEMORY_STRICTLY, each));
+ new StatementExecuteUnit(new ExecutionUnit("ds_0", new
SQLUnit(isQuery ? DQL_SQL : DML_SQL, Collections.singletonList(1))),
ConnectionMode.MEMORY_STRICTLY, each));
}
return result;
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 1b46db0..4265cd8 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -18,9 +18,12 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc;
import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.governance.core.event.model.persist.MetaDataPersistEvent;
import org.apache.shardingsphere.governance.core.event.GovernanceEventBus;
+import
org.apache.shardingsphere.governance.core.event.model.persist.MetaDataPersistEvent;
+import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.executor.sql.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import org.apache.shardingsphere.infra.executor.sql.log.SQLLogger;
@@ -31,17 +34,15 @@ import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategyFactory;
import
org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaDataLoader;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
+import org.apache.shardingsphere.infra.sql.LogicSQL;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.execute.SQLExecuteEngine;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.infra.sql.LogicSQL;
-import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
import org.apache.shardingsphere.proxy.backend.response.BackendResponse;
import org.apache.shardingsphere.proxy.backend.response.query.QueryData;
import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
-import org.apache.shardingsphere.infra.binder.metadata.table.TableMetaData;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.ArrayList;
@@ -83,19 +84,19 @@ public final class JDBCDatabaseCommunicationEngine
implements DatabaseCommunicat
}
sqlExecuteEngine.checkExecutePrerequisites(executionContext);
response = sqlExecuteEngine.execute(executionContext);
- refreshTableMetaData(executionContext.getSqlStatementContext());
+
refreshTableMetaData(executionContext.getSqlStatementContext().getSqlStatement());
return merge(executionContext.getSqlStatementContext());
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private void refreshTableMetaData(final SQLStatementContext<?>
sqlStatementContext) throws SQLException {
- if (null == sqlStatementContext) {
+ private void refreshTableMetaData(final SQLStatement sqlStatement) throws
SQLException {
+ if (null == sqlStatement) {
return;
}
- Optional<MetaDataRefreshStrategy> refreshStrategy =
MetaDataRefreshStrategyFactory.newInstance(sqlStatementContext);
+ Optional<MetaDataRefreshStrategy> refreshStrategy =
MetaDataRefreshStrategyFactory.newInstance(sqlStatement);
if (refreshStrategy.isPresent()) {
refreshStrategy.get().refreshMetaData(logicSQL.getSchema().getMetaData(),
ProxyContext.getInstance().getSchemaContexts().getDatabaseType(),
- logicSQL.getSchema().getDataSources(),
sqlStatementContext, this::loadTableMetaData);
+ logicSQL.getSchema().getDataSources(), sqlStatement,
this::loadTableMetaData);
GovernanceEventBus.getInstance().post(
new MetaDataPersistEvent(logicSQL.getSchema().getName(),
logicSQL.getSchema().getMetaData().getRuleSchemaMetaData()));
}