You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/05/07 03:46:54 UTC
[shardingsphere] branch master updated: Refactor SQLFederationDecideEngine (#25502)
This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 903f8ef46d6 Refactor SQLFederationDecideEngine (#25502)
903f8ef46d6 is described below
commit 903f8ef46d64255a627abef50ab3dc9505482f66
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun May 7 11:46:46 2023 +0800
Refactor SQLFederationDecideEngine (#25502)
* Refactor SQLFederationDecideEngine
---
.../decider/ShardingSQLFederationDecider.java | 16 ++++++------
.../decider/ShardingSQLFederationDeciderTest.java | 2 +-
...rEngine.java => SQLFederationDecideEngine.java} | 25 ++++++++-----------
.../infra/binder/decider/SQLFederationDecider.java | 9 ++++---
.../{context => }/SQLFederationDeciderContext.java | 2 +-
...est.java => SQLFederationDecideEngineTest.java} | 29 +++++++++++-----------
.../decider/SQLFederationDeciderMatchFixture.java | 6 ++---
.../SQLFederationDeciderNotMatchFixture.java | 6 ++---
.../database/schema/util/SystemSchemaUtils.java | 4 +--
.../statement/ShardingSpherePreparedStatement.java | 7 +++---
.../core/statement/ShardingSphereStatement.java | 7 +++---
.../single/decider/SingleSQLFederationDecider.java | 7 +++---
.../decider/SingleSQLFederationDeciderTest.java | 2 +-
.../proxy/backend/connector/DatabaseConnector.java | 9 +++----
.../handler/distsql/rul/sql/PreviewHandler.java | 6 ++---
15 files changed, 66 insertions(+), 71 deletions(-)
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDecider.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDecider.java
index 06111e9c7c9..5bc359c5d60 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDecider.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDecider.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.sharding.decider;
import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
@@ -39,26 +39,26 @@ import java.util.List;
public final class ShardingSQLFederationDecider implements SQLFederationDecider<ShardingRule> {
@Override
- public void decide(final SQLFederationDeciderContext deciderContext, final SQLStatementContext<?> sqlStatementContext, final List<Object> parameters,
+ public void decide(final SQLFederationDeciderContext deciderContext, final SelectStatementContext selectStatementContext, final List<Object> parameters,
final ShardingSphereRuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, final ShardingRule rule, final ConfigurationProperties props) {
- SelectStatementContext select = (SelectStatementContext) sqlStatementContext;
- Collection<String> tableNames = rule.getShardingLogicTableNames(select.getTablesContext().getTableNames());
+ Collection<String> tableNames = rule.getShardingLogicTableNames(selectStatementContext.getTablesContext().getTableNames());
if (tableNames.isEmpty()) {
return;
}
addTableDataNodes(deciderContext, rule, tableNames);
- ShardingConditions shardingConditions = getMergedShardingConditions(sqlStatementContext, parameters, globalRuleMetaData, database, rule);
+ ShardingConditions shardingConditions = getMergedShardingConditions(selectStatementContext, parameters, globalRuleMetaData, database, rule);
if (shardingConditions.isNeedMerge() && shardingConditions.isSameShardingCondition()) {
return;
}
- if (select.isContainsSubquery() || select.isContainsHaving() || select.isContainsCombine() || select.isContainsPartialDistinctAggregation()) {
+ if (selectStatementContext.isContainsSubquery() || selectStatementContext.isContainsHaving()
+ || selectStatementContext.isContainsCombine() || selectStatementContext.isContainsPartialDistinctAggregation()) {
deciderContext.setUseSQLFederation(true);
return;
}
- if (!select.isContainsJoinQuery() || rule.isAllTablesInSameDataSource(tableNames)) {
+ if (!selectStatementContext.isContainsJoinQuery() || rule.isAllTablesInSameDataSource(tableNames)) {
return;
}
- boolean allBindingTables = tableNames.size() > 1 && rule.isAllBindingTables(database, select, tableNames);
+ boolean allBindingTables = tableNames.size() > 1 && rule.isAllBindingTables(database, selectStatementContext, tableNames);
deciderContext.setUseSQLFederation(tableNames.size() > 1 && !allBindingTables);
}
diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDeciderTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDeciderTest.java
index 06c840e02ae..99cd0bd232f 100644
--- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDeciderTest.java
+++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/decider/ShardingSQLFederationDeciderTest.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.sharding.decider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDeciderEngine.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecideEngine.java
similarity index 76%
rename from infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDeciderEngine.java
rename to infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecideEngine.java
index d64c9f1b71d..94d97075f4a 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDeciderEngine.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecideEngine.java
@@ -15,10 +15,8 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.binder.decider.engine;
+package org.apache.shardingsphere.infra.binder.decider;
-import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
@@ -35,18 +33,18 @@ import java.util.Map;
import java.util.Map.Entry;
/**
- * SQL federation decider engine.
+ * SQL federation decide engine.
*/
-public final class SQLFederationDeciderEngine {
-
- private final ConfigurationProperties props;
+public final class SQLFederationDecideEngine {
@SuppressWarnings("rawtypes")
private final Map<ShardingSphereRule, SQLFederationDecider> deciders;
- public SQLFederationDeciderEngine(final Collection<ShardingSphereRule> rules, final ConfigurationProperties props) {
- this.props = props;
+ private final ConfigurationProperties props;
+
+ public SQLFederationDecideEngine(final Collection<ShardingSphereRule> rules, final ConfigurationProperties props) {
deciders = OrderedSPILoader.getServices(SQLFederationDecider.class, rules);
+ this.props = props;
}
/**
@@ -63,23 +61,22 @@ public final class SQLFederationDeciderEngine {
final List<Object> parameters, final ShardingSphereRuleMetaData globalRuleMetaData, final ShardingSphereDatabase database) {
SQLFederationDeciderContext result = new SQLFederationDeciderContext();
// TODO move this logic to SQLFederationDecider implement class when we remove sql federation type
- if (isSelectStatementContainsSystemSchema(sqlStatementContext, database)) {
+ if (isQuerySystemSchema(sqlStatementContext, database)) {
result.setUseSQLFederation(true);
return result;
}
- String sqlFederationType = props.getValue(ConfigurationPropertyKey.SQL_FEDERATION_TYPE);
- if ("NONE".equals(sqlFederationType) || !(sqlStatementContext instanceof SelectStatementContext)) {
+ if (!(sqlStatementContext instanceof SelectStatementContext) || "NONE".equals(props.getValue(ConfigurationPropertyKey.SQL_FEDERATION_TYPE))) {
return result;
}
for (Entry<ShardingSphereRule, SQLFederationDecider> entry : deciders.entrySet()) {
if (!result.isUseSQLFederation()) {
- entry.getValue().decide(result, sqlStatementContext, parameters, globalRuleMetaData, database, entry.getKey(), props);
+ entry.getValue().decide(result, (SelectStatementContext) sqlStatementContext, parameters, globalRuleMetaData, database, entry.getKey(), props);
}
}
return result;
}
- private boolean isSelectStatementContainsSystemSchema(final SQLStatementContext<?> sqlStatementContext, final ShardingSphereDatabase database) {
+ private boolean isQuerySystemSchema(final SQLStatementContext<?> sqlStatementContext, final ShardingSphereDatabase database) {
return sqlStatementContext instanceof SelectStatementContext
&& SystemSchemaUtils.containsSystemSchema(sqlStatementContext.getDatabaseType(), sqlStatementContext.getTablesContext().getSchemaNames(), database);
}
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecider.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecider.java
index 2d79eb0da6d..92faf5d9e5a 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecider.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDecider.java
@@ -17,12 +17,12 @@
package org.apache.shardingsphere.infra.binder.decider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPI;
import java.util.List;
@@ -32,19 +32,20 @@ import java.util.List;
*
* @param <T> type of rule
*/
+@SingletonSPI
public interface SQLFederationDecider<T extends ShardingSphereRule> extends OrderedSPI<T> {
/**
* Judge whether to use sql federation engine.
*
* @param deciderContext decider context
- * @param sqlStatementContext SQL statement context
+ * @param selectStatementContext select statement context
* @param parameters parameters
* @param globalRuleMetaData global rule meta data
* @param database database
* @param rule rule
* @param props props
*/
- void decide(SQLFederationDeciderContext deciderContext, SQLStatementContext<?> sqlStatementContext, List<Object> parameters,
+ void decide(SQLFederationDeciderContext deciderContext, SelectStatementContext selectStatementContext, List<Object> parameters,
ShardingSphereRuleMetaData globalRuleMetaData, ShardingSphereDatabase database, T rule, ConfigurationProperties props);
}
diff --git a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/context/SQLFederationDeciderContext.java b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDeciderContext.java
similarity index 94%
rename from infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/context/SQLFederationDeciderContext.java
rename to infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDeciderContext.java
index 857f669e264..6852319ec1e 100644
--- a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/context/SQLFederationDeciderContext.java
+++ b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/decider/SQLFederationDeciderContext.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.binder.decider.context;
+package org.apache.shardingsphere.infra.binder.decider;
import lombok.Getter;
import lombok.Setter;
diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDeciderEngineTest.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDecideEngineTest.java
similarity index 77%
rename from infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDeciderEngineTest.java
rename to infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDecideEngineTest.java
index 9b9420d355c..5a0ff9cdd0a 100644
--- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDeciderEngineTest.java
+++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/engine/SQLFederationDecideEngineTest.java
@@ -17,7 +17,8 @@
package org.apache.shardingsphere.infra.binder.decider.engine;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecideEngine;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.decider.fixture.rule.SQLFederationDeciderRuleMatchFixture;
import org.apache.shardingsphere.infra.binder.decider.fixture.rule.SQLFederationDeciderRuleNotMatchFixture;
import org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
@@ -46,71 +47,71 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-class SQLFederationDeciderEngineTest {
+class SQLFederationDecideEngineTest {
@Test
void assertDecideWhenSelectStatementContainsSystemSchema() {
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(Collections.emptyList(), new ConfigurationProperties(new Properties()));
+ SQLFederationDecideEngine engine = new SQLFederationDecideEngine(Collections.emptyList(), new ConfigurationProperties(new Properties()));
SelectStatementContext sqlStatementContext = mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.getDatabaseType()).thenReturn(new MySQLDatabaseType());
when(sqlStatementContext.getTablesContext().getSchemaNames()).thenReturn(Collections.singletonList("information_schema"));
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
mock(DatabaseType.class), mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS), mock(ShardingSphereRuleMetaData.class), Collections.emptyMap());
- SQLFederationDeciderContext actual = deciderEngine.decide(sqlStatementContext, Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
+ SQLFederationDeciderContext actual = engine.decide(sqlStatementContext, Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
assertTrue(actual.isUseSQLFederation());
}
@Test
void assertDecideWhenNotConfigSqlFederationEnabled() {
Collection<ShardingSphereRule> rules = Collections.singletonList(new SQLFederationDeciderRuleMatchFixture());
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(rules, new ConfigurationProperties(new Properties()));
+ SQLFederationDecideEngine engine = new SQLFederationDecideEngine(rules, new ConfigurationProperties(new Properties()));
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
mock(DatabaseType.class), mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS), new ShardingSphereRuleMetaData(rules), Collections.emptyMap());
- SQLFederationDeciderContext actual = deciderEngine.decide(mock(CommonSQLStatementContext.class), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
+ SQLFederationDeciderContext actual = engine.decide(mock(CommonSQLStatementContext.class), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
assertFalse(actual.isUseSQLFederation());
}
@Test
void assertDecideWhenExecuteNotSelectStatement() {
Collection<ShardingSphereRule> rules = Collections.singletonList(new SQLFederationDeciderRuleMatchFixture());
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(rules,
+ SQLFederationDecideEngine engine = new SQLFederationDecideEngine(rules,
new ConfigurationProperties(PropertiesBuilder.build(new Property(ConfigurationPropertyKey.SQL_FEDERATION_TYPE.getKey(), "ORIGINAL"))));
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
mock(DatabaseType.class), mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS), new ShardingSphereRuleMetaData(rules), Collections.emptyMap());
- SQLFederationDeciderContext actual = deciderEngine.decide(mock(CommonSQLStatementContext.class), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
+ SQLFederationDeciderContext actual = engine.decide(mock(CommonSQLStatementContext.class), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
assertFalse(actual.isUseSQLFederation());
}
@Test
void assertDecideWhenConfigSingleMatchedRule() {
Collection<ShardingSphereRule> rules = Collections.singletonList(new SQLFederationDeciderRuleMatchFixture());
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(rules,
+ SQLFederationDecideEngine engine = new SQLFederationDecideEngine(rules,
new ConfigurationProperties(PropertiesBuilder.build(new Property(ConfigurationPropertyKey.SQL_FEDERATION_TYPE.getKey(), "ORIGINAL"))));
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
mock(DatabaseType.class), mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS), new ShardingSphereRuleMetaData(rules), Collections.emptyMap());
- SQLFederationDeciderContext actual = deciderEngine.decide(mock(SelectStatementContext.class, RETURNS_DEEP_STUBS), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
+ SQLFederationDeciderContext actual = engine.decide(mock(SelectStatementContext.class, RETURNS_DEEP_STUBS), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
assertTrue(actual.isUseSQLFederation());
}
@Test
void assertDecideWhenConfigSingleNotMatchedRule() {
Collection<ShardingSphereRule> rules = Collections.singletonList(new SQLFederationDeciderRuleNotMatchFixture());
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(rules,
+ SQLFederationDecideEngine engine = new SQLFederationDecideEngine(rules,
new ConfigurationProperties(PropertiesBuilder.build(new Property(ConfigurationPropertyKey.SQL_FEDERATION_TYPE.getKey(), "ORIGINAL"))));
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
mock(DatabaseType.class), mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS), new ShardingSphereRuleMetaData(rules), Collections.emptyMap());
- SQLFederationDeciderContext actual = deciderEngine.decide(mock(SelectStatementContext.class, RETURNS_DEEP_STUBS), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
+ SQLFederationDeciderContext actual = engine.decide(mock(SelectStatementContext.class, RETURNS_DEEP_STUBS), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
assertFalse(actual.isUseSQLFederation());
}
@Test
void assertDecideWhenConfigMultiRule() {
Collection<ShardingSphereRule> rules = Arrays.asList(new SQLFederationDeciderRuleNotMatchFixture(), new SQLFederationDeciderRuleMatchFixture());
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(rules,
+ SQLFederationDecideEngine engine = new SQLFederationDecideEngine(rules,
new ConfigurationProperties(PropertiesBuilder.build(new Property(ConfigurationPropertyKey.SQL_FEDERATION_TYPE.getKey(), "ORIGINAL"))));
ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
mock(DatabaseType.class), mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS), new ShardingSphereRuleMetaData(rules), Collections.emptyMap());
- SQLFederationDeciderContext actual = deciderEngine.decide(mock(SelectStatementContext.class, RETURNS_DEEP_STUBS), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
+ SQLFederationDeciderContext actual = engine.decide(mock(SelectStatementContext.class, RETURNS_DEEP_STUBS), Collections.emptyList(), mock(ShardingSphereRuleMetaData.class), database);
assertTrue(actual.isUseSQLFederation());
}
}
diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderMatchFixture.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderMatchFixture.java
index 08341f3d76d..db0baa3b187 100644
--- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderMatchFixture.java
+++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderMatchFixture.java
@@ -18,9 +18,9 @@
package org.apache.shardingsphere.infra.binder.decider.fixture.decider;
import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.decider.fixture.rule.SQLFederationDeciderRuleMatchFixture;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -30,7 +30,7 @@ import java.util.List;
public final class SQLFederationDeciderMatchFixture implements SQLFederationDecider<SQLFederationDeciderRuleMatchFixture> {
@Override
- public void decide(final SQLFederationDeciderContext deciderContext, final SQLStatementContext<?> sqlStatementContext, final List<Object> parameters,
+ public void decide(final SQLFederationDeciderContext deciderContext, final SelectStatementContext selectStatementContext, final List<Object> parameters,
final ShardingSphereRuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, final SQLFederationDeciderRuleMatchFixture rule,
final ConfigurationProperties props) {
deciderContext.setUseSQLFederation(true);
diff --git a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderNotMatchFixture.java b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderNotMatchFixture.java
index e9068e40e73..4485b43c406 100644
--- a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderNotMatchFixture.java
+++ b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/decider/fixture/decider/SQLFederationDeciderNotMatchFixture.java
@@ -18,9 +18,9 @@
package org.apache.shardingsphere.infra.binder.decider.fixture.decider;
import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.decider.fixture.rule.SQLFederationDeciderRuleNotMatchFixture;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -30,7 +30,7 @@ import java.util.List;
public final class SQLFederationDeciderNotMatchFixture implements SQLFederationDecider<SQLFederationDeciderRuleNotMatchFixture> {
@Override
- public void decide(final SQLFederationDeciderContext deciderContext, final SQLStatementContext<?> sqlStatementContext, final List<Object> parameters,
+ public void decide(final SQLFederationDeciderContext deciderContext, final SelectStatementContext selectStatementContext, final List<Object> parameters,
final ShardingSphereRuleMetaData globalRuleMetaData, final ShardingSphereDatabase database,
final SQLFederationDeciderRuleNotMatchFixture rule, final ConfigurationProperties props) {
}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
index 45e8132ad4f..13099561142 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import java.util.Collection;
/**
- * System schema utility class.
+ * System schema utility.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class SystemSchemaUtils {
@@ -34,7 +34,7 @@ public final class SystemSchemaUtils {
/**
* Judge whether SQL statement contains system schema or not.
*
- * @param databaseType databaseType
+ * @param databaseType database type
* @param schemaNames schema names
* @param database database
* @return whether SQL statement contains system schema or not
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 0bab8aef8e7..3351bb49664 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -35,8 +35,8 @@ import org.apache.shardingsphere.driver.jdbc.exception.syntax.EmptySQLException;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.aware.ParameterAware;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
-import org.apache.shardingsphere.infra.binder.decider.engine.SQLFederationDeciderEngine;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecideEngine;
import org.apache.shardingsphere.infra.binder.segment.insert.keygen.GeneratedKeyContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
@@ -286,8 +286,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
private static SQLFederationDeciderContext decide(final QueryContext queryContext,
final ShardingSphereRuleMetaData globalRuleMetaData, final ConfigurationProperties props, final ShardingSphereDatabase database) {
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(database.getRuleMetaData().getRules(), props);
- return deciderEngine.decide(queryContext.getSqlStatementContext(), queryContext.getParameters(), globalRuleMetaData, database);
+ return new SQLFederationDecideEngine(database.getRuleMetaData().getRules(), props).decide(queryContext.getSqlStatementContext(), queryContext.getParameters(), globalRuleMetaData, database);
}
private JDBCExecutionUnit createTrafficExecutionUnit(final String trafficInstanceId, final QueryContext queryContext) throws SQLException {
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 5bc8e4722ac..2462ee03ffc 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -34,8 +34,8 @@ import org.apache.shardingsphere.driver.jdbc.exception.syntax.EmptySQLException;
import org.apache.shardingsphere.driver.jdbc.exception.transaction.JDBCTransactionAcrossDatabasesException;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
-import org.apache.shardingsphere.infra.binder.decider.engine.SQLFederationDeciderEngine;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecideEngine;
import org.apache.shardingsphere.infra.binder.segment.insert.keygen.GeneratedKeyContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
@@ -200,8 +200,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
private static SQLFederationDeciderContext decide(final QueryContext queryContext,
final ShardingSphereRuleMetaData globalRuleMetaData, final ConfigurationProperties props, final ShardingSphereDatabase database) {
- SQLFederationDeciderEngine deciderEngine = new SQLFederationDeciderEngine(database.getRuleMetaData().getRules(), props);
- return deciderEngine.decide(queryContext.getSqlStatementContext(), queryContext.getParameters(), globalRuleMetaData, database);
+ return new SQLFederationDecideEngine(database.getRuleMetaData().getRules(), props).decide(queryContext.getSqlStatementContext(), queryContext.getParameters(), globalRuleMetaData, database);
}
private Optional<String> getInstanceIdAndSet(final QueryContext queryContext) {
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java
index 273652e5502..7dfc816aff0 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.single.decider;
import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.binder.type.IndexAvailable;
@@ -45,10 +45,9 @@ import java.util.Optional;
public final class SingleSQLFederationDecider implements SQLFederationDecider<SingleRule> {
@Override
- public void decide(final SQLFederationDeciderContext deciderContext, final SQLStatementContext<?> sqlStatementContext, final List<Object> parameters,
+ public void decide(final SQLFederationDeciderContext deciderContext, final SelectStatementContext selectStatementContext, final List<Object> parameters,
final ShardingSphereRuleMetaData globalRuleMetaData, final ShardingSphereDatabase database, final SingleRule rule, final ConfigurationProperties props) {
- SelectStatementContext select = (SelectStatementContext) sqlStatementContext;
- Collection<QualifiedTable> singleTableNames = getSingleTableNames(select, database, rule);
+ Collection<QualifiedTable> singleTableNames = getSingleTableNames(selectStatementContext, database, rule);
if (singleTableNames.isEmpty()) {
return;
}
diff --git a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDeciderTest.java b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDeciderTest.java
index 73c82edbddf..2bf0ad1d2fe 100644
--- a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDeciderTest.java
+++ b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDeciderTest.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.single.decider;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index d6553b8dea3..5b5ae52925d 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -21,8 +21,8 @@ import com.google.common.base.Preconditions;
import org.apache.shardingsphere.dialect.SQLExceptionTransformEngine;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.binder.aware.CursorDefinitionAware;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
-import org.apache.shardingsphere.infra.binder.decider.engine.SQLFederationDeciderEngine;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecideEngine;
import org.apache.shardingsphere.infra.binder.segment.insert.keygen.GeneratedKeyContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.CloseStatementContext;
@@ -198,9 +198,8 @@ public final class DatabaseConnector implements DatabaseBackendHandler {
@Override
public ResponseHeader execute() throws SQLException {
MetaDataContexts metaDataContexts = ProxyContext.getInstance().getContextManager().getMetaDataContexts();
- SQLFederationDeciderContext deciderContext = new SQLFederationDeciderEngine(
- database.getRuleMetaData().getRules(), metaDataContexts.getMetaData().getProps()).decide(queryContext.getSqlStatementContext(), queryContext.getParameters(),
- metaDataContexts.getMetaData().getGlobalRuleMetaData(), database);
+ SQLFederationDeciderContext deciderContext = new SQLFederationDecideEngine(database.getRuleMetaData().getRules(), metaDataContexts.getMetaData().getProps())
+ .decide(queryContext.getSqlStatementContext(), queryContext.getParameters(), metaDataContexts.getMetaData().getGlobalRuleMetaData(), database);
if (deciderContext.isUseSQLFederation()) {
prepareFederationExecutor();
ResultSet resultSet = doExecuteFederation(queryContext, metaDataContexts);
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
index 76730b73ac7..c362c174bb1 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
@@ -25,8 +25,8 @@ import org.apache.shardingsphere.distsql.parser.statement.rul.sql.PreviewStateme
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.aware.CursorDefinitionAware;
-import org.apache.shardingsphere.infra.binder.decider.context.SQLFederationDeciderContext;
-import org.apache.shardingsphere.infra.binder.decider.engine.SQLFederationDeciderEngine;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDeciderContext;
+import org.apache.shardingsphere.infra.binder.decider.SQLFederationDecideEngine;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.ddl.CursorStatementContext;
import org.apache.shardingsphere.infra.binder.type.CursorAvailable;
@@ -107,7 +107,7 @@ public final class PreviewHandler extends SQLRULBackendHandler<PreviewStatement>
ShardingSphereDatabase database = ProxyContext.getInstance().getDatabase(getConnectionSession().getDatabaseName());
ShardingSpherePreconditions.checkState(database.isComplete(), () -> new RuleNotExistedException(getConnectionSession().getDatabaseName()));
ConfigurationProperties props = metaDataContexts.getMetaData().getProps();
- SQLFederationDeciderContext deciderContext = new SQLFederationDeciderEngine(database.getRuleMetaData().getRules(), props)
+ SQLFederationDeciderContext deciderContext = new SQLFederationDecideEngine(database.getRuleMetaData().getRules(), props)
.decide(queryContext.getSqlStatementContext(), queryContext.getParameters(),
metaDataContexts.getMetaData().getGlobalRuleMetaData(), metaDataContexts.getMetaData().getDatabase(getConnectionSession().getDatabaseName()));
Collection<ExecutionUnit> executionUnits = deciderContext.isUseSQLFederation() ? getFederationExecutionUnits(queryContext, databaseName, metaDataContexts)