This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 b3cf6f9b8f6 Refactor SQLTranslator interface to reduce parameter
passing (#28902)
b3cf6f9b8f6 is described below
commit b3cf6f9b8f6e44517c73de3ccd38b7aefcf0b529
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Tue Oct 31 11:59:45 2023 +0800
Refactor SQLTranslator interface to reduce parameter passing (#28902)
---
.../infra/connection/kernel/KernelProcessor.java | 2 +-
.../infra/rewrite/SQLRewriteEntry.java | 23 +++++++++-------------
.../rewrite/engine/GenericSQLRewriteEngine.java | 7 ++++---
.../rewrite/engine/RouteSQLRewriteEngine.java | 10 ++++++----
.../infra/rewrite/SQLRewriteEntryTest.java | 17 ++++++++++++----
.../engine/GenericSQLRewriteEngineTest.java | 5 +++--
.../rewrite/engine/RouteSQLRewriteEngineTest.java | 13 ++++++------
.../single/datanode/SingleTableDataNodeLoader.java | 2 +-
kernel/sql-translator/api/pom.xml | 2 +-
.../sqltranslator/spi/SQLTranslator.java | 6 +++---
.../sqltranslator/rule/SQLTranslatorRule.java | 8 ++++----
.../sqltranslator/rule/SQLTranslatorRuleTest.java | 12 +++++------
.../rule/fixture/AlwaysFailedSQLTranslator.java | 4 ++--
.../fixture/ConvertToUpperCaseSQLTranslator.java | 4 ++--
.../sqltranslator/jooq/JooQSQLTranslator.java | 4 ++--
.../sqltranslator/natived/NativeSQLTranslator.java | 4 ++--
.../test/it/rewrite/engine/SQLRewriterIT.java | 3 +--
17 files changed, 67 insertions(+), 59 deletions(-)
diff --git
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
index 0b9f9364cb3..a5b82ff3ade 100644
---
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
+++
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java
@@ -63,7 +63,7 @@ public final class KernelProcessor {
private SQLRewriteResult rewrite(final QueryContext queryContext, final
ShardingSphereDatabase database, final RuleMetaData globalRuleMetaData,
final ConfigurationProperties props,
final RouteContext routeContext, final ConnectionContext connectionContext) {
SQLRewriteEntry sqlRewriteEntry = new SQLRewriteEntry(database,
globalRuleMetaData, props);
- return sqlRewriteEntry.rewrite(queryContext.getSql(),
queryContext.getParameters(), queryContext.getSqlStatementContext(),
routeContext, connectionContext, queryContext.getHintValueContext());
+ return sqlRewriteEntry.rewrite(queryContext, routeContext,
connectionContext);
}
private ExecutionContext createExecutionContext(final QueryContext
queryContext, final ShardingSphereDatabase database, final RouteContext
routeContext, final SQLRewriteResult rewriteResult) {
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
index c41b9a8c81f..0bf9d71d10f 100644
---
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.rewrite;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -30,10 +29,10 @@ import
org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -61,27 +60,23 @@ public final class SQLRewriteEntry {
/**
* Rewrite.
*
- * @param sql SQL
- * @param params SQL parameters
- * @param sqlStatementContext SQL statement context
+ * @param queryContext query context
* @param routeContext route context
* @param connectionContext connection context
- * @param hintValueContext hint value context
*
* @return route unit and SQL rewrite result map
*/
- public SQLRewriteResult rewrite(final String sql, final List<Object>
params, final SQLStatementContext sqlStatementContext,
- final RouteContext routeContext, final
ConnectionContext connectionContext, final HintValueContext hintValueContext) {
- SQLRewriteContext sqlRewriteContext = createSQLRewriteContext(sql,
params, sqlStatementContext, routeContext, connectionContext, hintValueContext);
+ public SQLRewriteResult rewrite(final QueryContext queryContext, final
RouteContext routeContext, final ConnectionContext connectionContext) {
+ SQLRewriteContext sqlRewriteContext =
createSQLRewriteContext(queryContext, routeContext, connectionContext);
SQLTranslatorRule rule =
globalRuleMetaData.getSingleRule(SQLTranslatorRule.class);
return routeContext.getRouteUnits().isEmpty()
- ? new GenericSQLRewriteEngine(rule, database,
globalRuleMetaData).rewrite(sqlRewriteContext)
- : new RouteSQLRewriteEngine(rule, database,
globalRuleMetaData).rewrite(sqlRewriteContext, routeContext);
+ ? new GenericSQLRewriteEngine(rule, database,
globalRuleMetaData).rewrite(sqlRewriteContext, queryContext)
+ : new RouteSQLRewriteEngine(rule, database,
globalRuleMetaData).rewrite(sqlRewriteContext, routeContext, queryContext);
}
- private SQLRewriteContext createSQLRewriteContext(final String sql, final
List<Object> params, final SQLStatementContext sqlStatementContext,
- final RouteContext
routeContext, final ConnectionContext connectionContext, final HintValueContext
hintValueContext) {
- SQLRewriteContext result = new SQLRewriteContext(database,
sqlStatementContext, sql, params, connectionContext, hintValueContext);
+ private SQLRewriteContext createSQLRewriteContext(final QueryContext
queryContext, final RouteContext routeContext, final ConnectionContext
connectionContext) {
+ HintValueContext hintValueContext = queryContext.getHintValueContext();
+ SQLRewriteContext result = new SQLRewriteContext(database,
queryContext.getSqlStatementContext(), queryContext.getSql(),
queryContext.getParameters(), connectionContext, hintValueContext);
decorate(decorators, result, routeContext, hintValueContext);
result.generateSQLTokens();
return result;
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
index 4618c1ed013..b710d640de9 100644
---
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext;
import
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteUnit;
import org.apache.shardingsphere.infra.rewrite.sql.impl.DefaultSQLBuilder;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
import java.util.Map;
@@ -46,14 +47,14 @@ public final class GenericSQLRewriteEngine {
* Rewrite SQL and parameters.
*
* @param sqlRewriteContext SQL rewrite context
+ * @param queryContext query context
* @return SQL rewrite result
*/
- public GenericSQLRewriteResult rewrite(final SQLRewriteContext
sqlRewriteContext) {
+ public GenericSQLRewriteResult rewrite(final SQLRewriteContext
sqlRewriteContext, final QueryContext queryContext) {
DatabaseType protocolType = database.getProtocolType();
Map<String, StorageUnit> storageUnits =
database.getResourceMetaData().getStorageUnits();
DatabaseType storageType = storageUnits.isEmpty() ? protocolType :
storageUnits.values().iterator().next().getStorageType();
- String sql = translatorRule.translate(
- new DefaultSQLBuilder(sqlRewriteContext).toSQL(),
sqlRewriteContext.getSqlStatementContext(), storageType, database,
globalRuleMetaData);
+ String sql = translatorRule.translate(new
DefaultSQLBuilder(sqlRewriteContext).toSQL(), queryContext, storageType,
database, globalRuleMetaData);
return new GenericSQLRewriteResult(new SQLRewriteUnit(sql,
sqlRewriteContext.getParameterBuilder().getParameters()));
}
}
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
index 484d012c90c..d42228a059c 100644
---
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
@@ -34,6 +34,7 @@ import
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardPa
import org.apache.shardingsphere.infra.rewrite.sql.impl.RouteSQLBuilder;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.SelectStatementHandler;
import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
@@ -62,9 +63,10 @@ public final class RouteSQLRewriteEngine {
*
* @param sqlRewriteContext SQL rewrite context
* @param routeContext route context
+ * @param queryContext query context
* @return SQL rewrite result
*/
- public RouteSQLRewriteResult rewrite(final SQLRewriteContext
sqlRewriteContext, final RouteContext routeContext) {
+ public RouteSQLRewriteResult rewrite(final SQLRewriteContext
sqlRewriteContext, final RouteContext routeContext, final QueryContext
queryContext) {
Map<RouteUnit, SQLRewriteUnit> sqlRewriteUnits = new
LinkedHashMap<>(routeContext.getRouteUnits().size(), 1F);
for (Entry<String, Collection<RouteUnit>> entry :
aggregateRouteUnitGroups(routeContext.getRouteUnits()).entrySet()) {
Collection<RouteUnit> routeUnits = entry.getValue();
@@ -74,7 +76,7 @@ public final class RouteSQLRewriteEngine {
addSQLRewriteUnits(sqlRewriteUnits, sqlRewriteContext,
routeContext, routeUnits);
}
}
- return new
RouteSQLRewriteResult(translate(sqlRewriteContext.getSqlStatementContext(),
sqlRewriteUnits));
+ return new RouteSQLRewriteResult(translate(queryContext,
sqlRewriteUnits));
}
private SQLRewriteUnit createSQLRewriteUnit(final SQLRewriteContext
sqlRewriteContext, final RouteContext routeContext, final Collection<RouteUnit>
routeUnits) {
@@ -155,12 +157,12 @@ public final class RouteSQLRewriteEngine {
return false;
}
- private Map<RouteUnit, SQLRewriteUnit> translate(final SQLStatementContext
sqlStatementContext, final Map<RouteUnit, SQLRewriteUnit> sqlRewriteUnits) {
+ private Map<RouteUnit, SQLRewriteUnit> translate(final QueryContext
queryContext, final Map<RouteUnit, SQLRewriteUnit> sqlRewriteUnits) {
Map<RouteUnit, SQLRewriteUnit> result = new
LinkedHashMap<>(sqlRewriteUnits.size(), 1F);
Map<String, StorageUnit> storageUnits =
database.getResourceMetaData().getStorageUnits();
for (Entry<RouteUnit, SQLRewriteUnit> entry :
sqlRewriteUnits.entrySet()) {
DatabaseType storageType =
storageUnits.get(entry.getKey().getDataSourceMapper().getActualName()).getStorageType();
- String sql = translatorRule.translate(entry.getValue().getSql(),
sqlStatementContext, storageType, database, globalRuleMetaData);
+ String sql = translatorRule.translate(entry.getValue().getSql(),
queryContext, storageType, database, globalRuleMetaData);
SQLRewriteUnit sqlRewriteUnit = new SQLRewriteUnit(sql,
entry.getValue().getParameters());
result.put(entry.getKey(), sqlRewriteUnit);
}
diff --git
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
index 28b47e698c7..2fb3eacfba9 100644
---
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
+++
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
@@ -33,6 +33,7 @@ import
org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
@@ -59,12 +60,21 @@ class SQLRewriteEntryTest {
SQLRewriteEntry sqlRewriteEntry = new SQLRewriteEntry(
database, new RuleMetaData(Collections.singleton(new
SQLTranslatorRule(new SQLTranslatorRuleConfiguration()))), new
ConfigurationProperties(new Properties()));
RouteContext routeContext = new RouteContext();
- GenericSQLRewriteResult sqlRewriteResult = (GenericSQLRewriteResult)
sqlRewriteEntry.rewrite("SELECT ?", Collections.singletonList(1),
mock(CommonSQLStatementContext.class), routeContext,
- mock(ConnectionContext.class), new HintValueContext());
+ GenericSQLRewriteResult sqlRewriteResult = (GenericSQLRewriteResult)
sqlRewriteEntry.rewrite(createQueryContext(), routeContext,
mock(ConnectionContext.class));
assertThat(sqlRewriteResult.getSqlRewriteUnit().getSql(), is("SELECT
?"));
assertThat(sqlRewriteResult.getSqlRewriteUnit().getParameters(),
is(Collections.singletonList(1)));
}
+ private QueryContext createQueryContext() {
+ QueryContext result = mock(QueryContext.class);
+ when(result.getSql()).thenReturn("SELECT ?");
+ when(result.getParameters()).thenReturn(Collections.singletonList(1));
+ CommonSQLStatementContext sqlStatementContext =
mock(CommonSQLStatementContext.class);
+ when(result.getSqlStatementContext()).thenReturn(sqlStatementContext);
+ when(result.getHintValueContext()).thenReturn(new HintValueContext());
+ return result;
+ }
+
@Test
void assertRewriteForRouteSQLRewriteResult() {
ShardingSphereDatabase database = new
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
TypedSPILoader.getService(DatabaseType.class, "H2"), mockResourceMetaData(),
@@ -77,8 +87,7 @@ class SQLRewriteEntryTest {
RouteUnit secondRouteUnit = mock(RouteUnit.class);
when(secondRouteUnit.getDataSourceMapper()).thenReturn(new
RouteMapper("ds", "ds_1"));
routeContext.getRouteUnits().addAll(Arrays.asList(firstRouteUnit,
secondRouteUnit));
- RouteSQLRewriteResult sqlRewriteResult = (RouteSQLRewriteResult)
sqlRewriteEntry.rewrite("SELECT ?",
- Collections.singletonList(1),
mock(CommonSQLStatementContext.class), routeContext,
mock(ConnectionContext.class), new HintValueContext());
+ RouteSQLRewriteResult sqlRewriteResult = (RouteSQLRewriteResult)
sqlRewriteEntry.rewrite(createQueryContext(), routeContext,
mock(ConnectionContext.class));
assertThat(sqlRewriteResult.getSqlRewriteUnits().size(), is(2));
}
diff --git
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
index 2c550a2f5be..8d3512e9bdf 100644
---
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
+++
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext;
import
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
import org.junit.jupiter.api.Test;
@@ -53,7 +54,7 @@ class GenericSQLRewriteEngineTest {
when(database.getResourceMetaData().getStorageUnits()).thenReturn(storageUnits);
GenericSQLRewriteResult actual = new GenericSQLRewriteEngine(rule,
database, mock(RuleMetaData.class))
.rewrite(new SQLRewriteContext(database,
mock(CommonSQLStatementContext.class), "SELECT 1", Collections.emptyList(),
mock(ConnectionContext.class),
- new HintValueContext()));
+ new HintValueContext()), mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnit().getSql(), is("SELECT 1"));
assertThat(actual.getSqlRewriteUnit().getParameters(),
is(Collections.emptyList()));
}
@@ -67,7 +68,7 @@ class GenericSQLRewriteEngineTest {
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.emptyMap());
GenericSQLRewriteResult actual = new GenericSQLRewriteEngine(rule,
database, mock(RuleMetaData.class))
.rewrite(new SQLRewriteContext(database,
mock(CommonSQLStatementContext.class), "SELECT 1", Collections.emptyList(),
mock(ConnectionContext.class),
- new HintValueContext()));
+ new HintValueContext()), mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnit().getSql(), is("SELECT 1"));
assertThat(actual.getSqlRewriteUnit().getParameters(),
is(Collections.emptyList()));
}
diff --git
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
index 372ad392bbf..ad83303895c 100644
---
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
+++
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
@@ -35,6 +35,7 @@ import
org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
import org.apache.shardingsphere.sqltranslator.rule.SQLTranslatorRule;
import org.junit.jupiter.api.Test;
@@ -62,7 +63,7 @@ class RouteSQLRewriteEngineTest {
RouteContext routeContext = new RouteContext();
routeContext.getRouteUnits().add(routeUnit);
RouteSQLRewriteResult actual = new RouteSQLRewriteEngine(
- new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext);
+ new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext,
mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnits().size(), is(1));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getSql(),
is("SELECT ?"));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getParameters(),
is(Collections.singletonList(1)));
@@ -92,7 +93,7 @@ class RouteSQLRewriteEngineTest {
routeContext.getRouteUnits().add(firstRouteUnit);
routeContext.getRouteUnits().add(secondRouteUnit);
RouteSQLRewriteResult actual = new RouteSQLRewriteEngine(
- new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext);
+ new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext,
mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnits().size(), is(1));
assertThat(actual.getSqlRewriteUnits().get(firstRouteUnit).getSql(),
is("SELECT ? UNION ALL SELECT ?"));
assertThat(actual.getSqlRewriteUnits().get(firstRouteUnit).getParameters(),
is(Arrays.asList(1, 1)));
@@ -113,7 +114,7 @@ class RouteSQLRewriteEngineTest {
RouteContext routeContext = new RouteContext();
routeContext.getRouteUnits().add(routeUnit);
RouteSQLRewriteResult actual = new RouteSQLRewriteEngine(
- new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext);
+ new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext,
mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnits().size(), is(1));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getSql(),
is("INSERT INTO tbl VALUES (?)"));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getParameters(),
is(Collections.singletonList(1)));
@@ -136,7 +137,7 @@ class RouteSQLRewriteEngineTest {
// TODO check why data node is "ds.tbl_0", not "ds_0.tbl_0"
routeContext.getOriginalDataNodes().add(Collections.singletonList(new
DataNode("ds.tbl_0")));
RouteSQLRewriteResult actual = new RouteSQLRewriteEngine(
- new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext);
+ new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext,
mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnits().size(), is(1));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getSql(),
is("INSERT INTO tbl VALUES (?)"));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getParameters(),
is(Collections.singletonList(1)));
@@ -158,7 +159,7 @@ class RouteSQLRewriteEngineTest {
routeContext.getRouteUnits().add(routeUnit);
routeContext.getOriginalDataNodes().add(Collections.emptyList());
RouteSQLRewriteResult actual = new RouteSQLRewriteEngine(
- new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext);
+ new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext,
mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnits().size(), is(1));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getSql(),
is("INSERT INTO tbl VALUES (?)"));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getParameters(),
is(Collections.singletonList(1)));
@@ -180,7 +181,7 @@ class RouteSQLRewriteEngineTest {
routeContext.getRouteUnits().add(routeUnit);
routeContext.getOriginalDataNodes().add(Collections.singletonList(new
DataNode("ds_1.tbl_1")));
RouteSQLRewriteResult actual = new RouteSQLRewriteEngine(
- new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext);
+ new SQLTranslatorRule(new SQLTranslatorRuleConfiguration()),
database, mock(RuleMetaData.class)).rewrite(sqlRewriteContext, routeContext,
mock(QueryContext.class));
assertThat(actual.getSqlRewriteUnits().size(), is(1));
assertThat(actual.getSqlRewriteUnits().get(routeUnit).getSql(),
is("INSERT INTO tbl VALUES (?)"));
assertTrue(actual.getSqlRewriteUnits().get(routeUnit).getParameters().isEmpty());
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
index 2265e0bf91c..42500e70f37 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/datanode/SingleTableDataNodeLoader.java
@@ -20,9 +20,9 @@ package org.apache.shardingsphere.single.datanode;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
+import
org.apache.shardingsphere.infra.database.core.metadata.data.loader.type.SchemaMetaDataLoader;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
-import
org.apache.shardingsphere.infra.database.core.metadata.data.loader.type.SchemaMetaDataLoader;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.single.api.constant.SingleTableConstants;
import org.apache.shardingsphere.single.exception.SingleTablesLoadingException;
diff --git a/kernel/sql-translator/api/pom.xml
b/kernel/sql-translator/api/pom.xml
index 14fe397ff9d..6b7db04db94 100644
--- a/kernel/sql-translator/api/pom.xml
+++ b/kernel/sql-translator/api/pom.xml
@@ -34,7 +34,7 @@
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-infra-binder</artifactId>
+ <artifactId>shardingsphere-infra-session</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
diff --git
a/kernel/sql-translator/api/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
b/kernel/sql-translator/api/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
index d0753cbeb01..ed569f47da6 100644
---
a/kernel/sql-translator/api/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
+++
b/kernel/sql-translator/api/src/main/java/org/apache/shardingsphere/sqltranslator/spi/SQLTranslator.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.sqltranslator.spi;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
@@ -34,11 +34,11 @@ public interface SQLTranslator extends TypedSPI {
* Translate SQL.
*
* @param sql to be translated SQL
- * @param sqlStatementContext SQL statement context
+ * @param queryContext query context
* @param storageType storage type
* @param database database
* @param globalRuleMetaData global rule meta data
* @return translated SQL
*/
- String translate(String sql, SQLStatementContext sqlStatementContext,
DatabaseType storageType, ShardingSphereDatabase database, RuleMetaData
globalRuleMetaData);
+ String translate(String sql, QueryContext queryContext, DatabaseType
storageType, ShardingSphereDatabase database, RuleMetaData globalRuleMetaData);
}
diff --git
a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
index 6f7b3096447..7f8163b6647 100644
---
a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
+++
b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
@@ -18,11 +18,11 @@
package org.apache.shardingsphere.sqltranslator.rule;
import lombok.Getter;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.rule.identifier.scope.GlobalRule;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
import
org.apache.shardingsphere.sqltranslator.exception.SQLTranslationException;
@@ -50,20 +50,20 @@ public final class SQLTranslatorRule implements GlobalRule {
* Translate SQL.
*
* @param sql to be translated SQL
- * @param sqlStatementContext SQL statement context
+ * @param queryContext query context
* @param storageType storage type
* @param database database
* @param globalRuleMetaData global rule meta data
* @return translated SQL
*/
- public String translate(final String sql, final SQLStatementContext
sqlStatementContext, final DatabaseType storageType, final
ShardingSphereDatabase database,
+ public String translate(final String sql, final QueryContext queryContext,
final DatabaseType storageType, final ShardingSphereDatabase database,
final RuleMetaData globalRuleMetaData) {
DatabaseType protocolType = database.getProtocolType();
if (protocolType.equals(storageType) || null == storageType) {
return sql;
}
try {
- return translator.translate(sql, sqlStatementContext, storageType,
database, globalRuleMetaData);
+ return translator.translate(sql, queryContext, storageType,
database, globalRuleMetaData);
} catch (final SQLTranslationException ex) {
if (useOriginalSQLWhenTranslatingFailed) {
return sql;
diff --git
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRuleTest.java
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRuleTest.java
index 7e703ed826a..8c482a04b91 100644
---
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRuleTest.java
+++
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRuleTest.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.sqltranslator.rule;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sqltranslator.api.config.SQLTranslatorRuleConfiguration;
import
org.apache.shardingsphere.sqltranslator.exception.syntax.UnsupportedTranslatedDatabaseException;
@@ -42,7 +42,7 @@ class SQLTranslatorRuleTest {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
when(database.getProtocolType()).thenReturn(databaseType);
- String actual = new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("CONVERT_TO_UPPER_CASE",
false)).translate(expected, mock(SQLStatementContext.class), databaseType,
database,
+ String actual = new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("CONVERT_TO_UPPER_CASE",
false)).translate(expected, mock(QueryContext.class), databaseType, database,
mock(RuleMetaData.class));
assertThat(actual, is(expected));
}
@@ -53,7 +53,7 @@ class SQLTranslatorRuleTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
DatabaseType protocolType =
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
when(database.getProtocolType()).thenReturn(protocolType);
- String actual = new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("CONVERT_TO_UPPER_CASE",
false)).translate(expected, mock(SQLStatementContext.class), null, database,
+ String actual = new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("CONVERT_TO_UPPER_CASE",
false)).translate(expected, mock(QueryContext.class), null, database,
mock(RuleMetaData.class));
assertThat(actual, is(expected));
}
@@ -65,7 +65,7 @@ class SQLTranslatorRuleTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
when(database.getProtocolType()).thenReturn(protocolType);
DatabaseType storageType =
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- String actual = new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("CONVERT_TO_UPPER_CASE",
false)).translate(input, mock(SQLStatementContext.class), storageType, database,
+ String actual = new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("CONVERT_TO_UPPER_CASE",
false)).translate(input, mock(QueryContext.class), storageType, database,
mock(RuleMetaData.class));
assertThat(actual, is(input.toUpperCase(Locale.ROOT)));
}
@@ -78,7 +78,7 @@ class SQLTranslatorRuleTest {
when(database.getProtocolType()).thenReturn(protocolType);
DatabaseType storageType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
String actual =
- new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("ALWAYS_FAILED", true)).translate(expected,
mock(SQLStatementContext.class), storageType, database,
mock(RuleMetaData.class));
+ new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("ALWAYS_FAILED", true)).translate(expected,
mock(QueryContext.class), storageType, database, mock(RuleMetaData.class));
assertThat(actual, is(expected));
}
@@ -89,7 +89,7 @@ class SQLTranslatorRuleTest {
when(database.getProtocolType()).thenReturn(protocolType);
DatabaseType storageType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
assertThrows(UnsupportedTranslatedDatabaseException.class,
- () -> new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("ALWAYS_FAILED", false)).translate("",
mock(SQLStatementContext.class), storageType, database,
+ () -> new SQLTranslatorRule(new
SQLTranslatorRuleConfiguration("ALWAYS_FAILED", false)).translate("",
mock(QueryContext.class), storageType, database,
mock(RuleMetaData.class)));
}
diff --git
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/AlwaysFailedSQLTranslator.java
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/AlwaysFailedSQLTranslator.java
index c8f0b06c1d9..fb10033457f 100644
---
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/AlwaysFailedSQLTranslator.java
+++
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/AlwaysFailedSQLTranslator.java
@@ -17,17 +17,17 @@
package org.apache.shardingsphere.sqltranslator.rule.fixture;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.sqltranslator.exception.syntax.UnsupportedTranslatedDatabaseException;
import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
public final class AlwaysFailedSQLTranslator implements SQLTranslator {
@Override
- public String translate(final String sql, final SQLStatementContext
sqlStatementContext, final DatabaseType storageType, final
ShardingSphereDatabase database,
+ public String translate(final String sql, final QueryContext queryContext,
final DatabaseType storageType, final ShardingSphereDatabase database,
final RuleMetaData globalRuleMetaData) {
throw new UnsupportedTranslatedDatabaseException(storageType);
}
diff --git
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/ConvertToUpperCaseSQLTranslator.java
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/ConvertToUpperCaseSQLTranslator.java
index 5d71ef0d766..6978a901c8c 100644
---
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/ConvertToUpperCaseSQLTranslator.java
+++
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/rule/fixture/ConvertToUpperCaseSQLTranslator.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.sqltranslator.rule.fixture;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
import java.util.Locale;
@@ -28,7 +28,7 @@ import java.util.Locale;
public final class ConvertToUpperCaseSQLTranslator implements SQLTranslator {
@Override
- public String translate(final String sql, final SQLStatementContext
sqlStatementContext, final DatabaseType storageType, final
ShardingSphereDatabase database,
+ public String translate(final String sql, final QueryContext queryContext,
final DatabaseType storageType, final ShardingSphereDatabase database,
final RuleMetaData globalRuleMetaData) {
return sql.toUpperCase(Locale.ROOT);
}
diff --git
a/kernel/sql-translator/provider/jooq/src/main/java/org/apache/shardingsphere/sqltranslator/jooq/JooQSQLTranslator.java
b/kernel/sql-translator/provider/jooq/src/main/java/org/apache/shardingsphere/sqltranslator/jooq/JooQSQLTranslator.java
index 32ba37b1c44..3797b3a1fe1 100644
---
a/kernel/sql-translator/provider/jooq/src/main/java/org/apache/shardingsphere/sqltranslator/jooq/JooQSQLTranslator.java
+++
b/kernel/sql-translator/provider/jooq/src/main/java/org/apache/shardingsphere/sqltranslator/jooq/JooQSQLTranslator.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.sqltranslator.jooq;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.sqltranslator.exception.syntax.UnsupportedTranslatedSQLException;
import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
import org.jooq.Query;
@@ -32,7 +32,7 @@ import org.jooq.impl.DSL;
public final class JooQSQLTranslator implements SQLTranslator {
@Override
- public String translate(final String sql, final SQLStatementContext
statementContext, final DatabaseType storageType, final ShardingSphereDatabase
database,
+ public String translate(final String sql, final QueryContext queryContext,
final DatabaseType storageType, final ShardingSphereDatabase database,
final RuleMetaData globalRuleMetaData) {
try {
Query query =
DSL.using(JooQDialectRegistry.getSQLDialect(database.getProtocolType())).parser().parseQuery(sql);
diff --git
a/kernel/sql-translator/provider/native/src/main/java/org/apache/shardingsphere/sqltranslator/natived/NativeSQLTranslator.java
b/kernel/sql-translator/provider/native/src/main/java/org/apache/shardingsphere/sqltranslator/natived/NativeSQLTranslator.java
index 1ce5e045e23..b93ecd5d619 100644
---
a/kernel/sql-translator/provider/native/src/main/java/org/apache/shardingsphere/sqltranslator/natived/NativeSQLTranslator.java
+++
b/kernel/sql-translator/provider/native/src/main/java/org/apache/shardingsphere/sqltranslator/natived/NativeSQLTranslator.java
@@ -17,10 +17,10 @@
package org.apache.shardingsphere.sqltranslator.natived;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
/**
@@ -29,7 +29,7 @@ import
org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
public final class NativeSQLTranslator implements SQLTranslator {
@Override
- public String translate(final String sql, final SQLStatementContext
statementContext, final DatabaseType storageType, final ShardingSphereDatabase
database,
+ public String translate(final String sql, final QueryContext queryContext,
final DatabaseType storageType, final ShardingSphereDatabase database,
final RuleMetaData globalRuleMetaData) {
// TODO
return sql;
diff --git
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index f21492e1e76..388d9384c0c 100644
---
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -148,8 +148,7 @@ public abstract class SQLRewriterIT {
SQLRewriteEntry sqlRewriteEntry = new SQLRewriteEntry(database,
globalRuleMetaData, props);
ConnectionContext connectionContext = mock(ConnectionContext.class);
when(connectionContext.getCursorContext()).thenReturn(new
CursorConnectionContext());
- SQLRewriteResult sqlRewriteResult =
sqlRewriteEntry.rewrite(testParams.getInputSQL(),
testParams.getInputParameters(), sqlStatementContext, routeContext,
connectionContext,
- queryContext.getHintValueContext());
+ SQLRewriteResult sqlRewriteResult =
sqlRewriteEntry.rewrite(queryContext, routeContext, connectionContext);
return sqlRewriteResult instanceof GenericSQLRewriteResult
? Collections.singleton(((GenericSQLRewriteResult)
sqlRewriteResult).getSqlRewriteUnit())
: (((RouteSQLRewriteResult)
sqlRewriteResult).getSqlRewriteUnits()).values();