未验证 提交 584678f8 编写于 作者: L Liang Zhang 提交者: GitHub

remove prepare engine (#5144)

* Add ExecutionContextBuilder

* simplify PrepareEngine

* refactor constructor of ExecutionContext

* refactor SQLLogger

* remove PrepareEngine

* remove shardingsphere-pluggable

* add dependency

* add dependency
上级 c83b994c
......@@ -97,11 +97,6 @@
<artifactId>sharding-core-merge</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
......
......@@ -97,11 +97,6 @@
<artifactId>sharding-core-merge</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
......
......@@ -27,11 +27,6 @@
<name>${project.artifactId}</name>
<dependencies>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-transaction-core</artifactId>
......
......@@ -29,9 +29,14 @@ import org.apache.shardingsphere.shardingjdbc.jdbc.core.resultset.EncryptResultS
import org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.metadata.ShardingSphereParameterMetaData;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.context.SQLUnit;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -169,12 +174,16 @@ public final class EncryptPreparedStatement extends AbstractShardingPreparedStat
@SuppressWarnings("unchecked")
private SQLUnit getSQLUnit(final String sql) {
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(sqlStatement, sql, getParameters());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, new ArrayList<>(getParameters()), routeContext);
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(), rules).route(sqlStatement, sql, getParameters());
sqlStatementContext = routeContext.getSqlStatementContext();
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, new ArrayList<>(getParameters()), routeContext);
ExecutionContext executionContext = new ExecutionContext(sqlStatementContext, ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
Preconditions.checkArgument(1 == executionContext.getExecutionUnits().size());
sqlStatementContext = executionContext.getSqlStatementContext();
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
return executionContext.getExecutionUnits().iterator().next().getSqlUnit();
}
......
......@@ -26,8 +26,13 @@ import org.apache.shardingsphere.shardingjdbc.jdbc.core.context.impl.EncryptRunt
import org.apache.shardingsphere.shardingjdbc.jdbc.core.resultset.EncryptResultSet;
import org.apache.shardingsphere.shardingjdbc.jdbc.unsupported.AbstractUnsupportedOperationStatement;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -35,6 +40,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
import java.util.Collection;
import java.util.Collections;
/**
......@@ -87,12 +93,17 @@ public final class EncryptStatement extends AbstractUnsupportedOperationStatemen
}
private String getRewriteSQL(final String sql) {
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(runtimeContext.getSqlParserEngine().parse(sql, false), sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
rules).route(runtimeContext.getSqlParserEngine().parse(sql, false), sql, Collections.emptyList());
sqlStatementContext = routeContext.getSqlStatementContext();
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext executionContext = new ExecutionContext(sqlStatementContext, ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
Preconditions.checkArgument(1 == executionContext.getExecutionUnits().size());
sqlStatementContext = executionContext.getSqlStatementContext();
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
return executionContext.getExecutionUnits().iterator().next().getSqlUnit().getSql();
}
......
......@@ -26,9 +26,14 @@ import org.apache.shardingsphere.shardingjdbc.jdbc.core.constant.SQLExceptionCon
import org.apache.shardingsphere.shardingjdbc.jdbc.core.context.impl.MasterSlaveRuntimeContext;
import org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.metadata.ShardingSphereParameterMetaData;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -72,10 +77,14 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa
sqlStatement = connection.getRuntimeContext().getSqlParserEngine().parse(sql, true);
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
MasterSlaveRuntimeContext runtimeContext = connection.getRuntimeContext();
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext executionContext = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
for (ExecutionUnit each : executionContext.getExecutionUnits()) {
PreparedStatement preparedStatement = connection.getConnection(
each.getDataSourceName()).prepareStatement(each.getSqlUnit().getSql(), resultSetType, resultSetConcurrency, resultSetHoldability);
......@@ -91,10 +100,14 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa
sqlStatement = connection.getRuntimeContext().getSqlParserEngine().parse(sql, true);
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
MasterSlaveRuntimeContext runtimeContext = connection.getRuntimeContext();
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext executionContext = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
for (ExecutionUnit each : executionContext.getExecutionUnits()) {
PreparedStatement preparedStatement = connection.getConnection(each.getDataSourceName()).prepareStatement(each.getSqlUnit().getSql(), autoGeneratedKeys);
routedStatements.add(preparedStatement);
......@@ -109,10 +122,14 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa
sqlStatement = connection.getRuntimeContext().getSqlParserEngine().parse(sql, true);
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
MasterSlaveRuntimeContext runtimeContext = connection.getRuntimeContext();
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext executionContext = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
for (ExecutionUnit each : executionContext.getExecutionUnits()) {
PreparedStatement preparedStatement = connection.getConnection(each.getDataSourceName()).prepareStatement(each.getSqlUnit().getSql(), columnIndexes);
routedStatements.add(preparedStatement);
......@@ -127,10 +144,14 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa
sqlStatement = connection.getRuntimeContext().getSqlParserEngine().parse(sql, true);
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
MasterSlaveRuntimeContext runtimeContext = connection.getRuntimeContext();
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext executionContext = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
for (ExecutionUnit each : executionContext.getExecutionUnits()) {
PreparedStatement preparedStatement = connection.getConnection(each.getDataSourceName()).prepareStatement(each.getSqlUnit().getSql(), columnNames);
routedStatements.add(preparedStatement);
......
......@@ -26,9 +26,14 @@ import org.apache.shardingsphere.shardingjdbc.jdbc.adapter.AbstractStatementAdap
import org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.MasterSlaveConnection;
import org.apache.shardingsphere.shardingjdbc.jdbc.core.constant.SQLExceptionConstant;
import org.apache.shardingsphere.shardingjdbc.jdbc.core.context.impl.MasterSlaveRuntimeContext;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
import org.apache.shardingsphere.underlying.route.context.RouteUnit;
......@@ -84,12 +89,17 @@ public final class MasterSlaveStatement extends AbstractStatementAdapter {
}
clearPrevious();
MasterSlaveRuntimeContext runtimeContext = connection.getRuntimeContext();
Collection<BaseRule> rules = Collections.singletonList(runtimeContext.getRule());
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(),
Collections.singletonList(runtimeContext.getRule())).route(runtimeContext.getSqlParserEngine().parse(sql, false), sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(Collections.singletonList(runtimeContext.getRule()), runtimeContext.getProperties(), runtimeContext.getMetaData());
ExecutionContext executionContext = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
rules).route(runtimeContext.getSqlParserEngine().parse(sql, false), sql, Collections.emptyList());
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(), runtimeContext.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext executionContext = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
ExecutionUnit executionUnit = executionContext.getExecutionUnits().iterator().next();
Preconditions.checkState(1 == executionContext.getExecutionUnits().size(), "Cannot support executeQuery for DML or DDL");
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
Statement statement = connection.getConnection(executionUnit.getDataSourceName()).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability);
routedStatements.add(statement);
return statement.executeQuery(executionUnit.getSqlUnit().getSql());
......
......@@ -35,11 +35,15 @@ import org.apache.shardingsphere.sql.parser.binder.statement.dml.InsertStatement
import org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dal.DALStatement;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.executor.QueryResult;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.merge.MergeEngine;
import org.apache.shardingsphere.underlying.merge.result.MergedResult;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -69,8 +73,6 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
@Getter
private final ParameterMetaData parameterMetaData;
private final PrepareEngine prepareEngine;
private final PreparedStatementExecutor preparedStatementExecutor;
private final BatchPreparedStatementExecutor batchPreparedStatementExecutor;
......@@ -108,7 +110,6 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
ShardingRuntimeContext runtimeContext = connection.getRuntimeContext();
sqlStatement = runtimeContext.getSqlParserEngine().parse(sql, true);
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
prepareEngine = new PrepareEngine(runtimeContext.getRule().toRules(), runtimeContext.getProperties(), runtimeContext.getMetaData());
preparedStatementExecutor = new PreparedStatementExecutor(resultSetType, resultSetConcurrency, resultSetHoldability, returnGeneratedKeys, connection);
batchPreparedStatementExecutor = new BatchPreparedStatementExecutor(resultSetType, resultSetConcurrency, resultSetHoldability, returnGeneratedKeys, connection);
}
......@@ -187,7 +188,12 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
private void prepare() {
ShardingRuntimeContext runtimeContext = connection.getRuntimeContext();
RouteContext routeContext = new DataNodeRouter(runtimeContext.getMetaData(), runtimeContext.getProperties(), runtimeContext.getRule().toRules()).route(sqlStatement, sql, getParameters());
executionContext = prepareEngine.prepare(sql, new ArrayList<>(getParameters()), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(),
runtimeContext.getProperties(), runtimeContext.getRule().toRules()).rewrite(sql, new ArrayList<>(getParameters()), routeContext);
executionContext = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
findGeneratedKey().ifPresent(generatedKey -> generatedValues.add(generatedKey.getGeneratedValues().getLast()));
}
......
......@@ -32,11 +32,15 @@ import org.apache.shardingsphere.sql.parser.binder.statement.dml.InsertStatement
import org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dal.DALStatement;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.executor.QueryResult;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.merge.MergeEngine;
import org.apache.shardingsphere.underlying.merge.result.MergedResult;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -221,11 +225,15 @@ public final class ShardingStatement extends AbstractStatementAdapter {
private ExecutionContext prepare(final String sql) throws SQLException {
statementExecutor.clear();
ShardingRuntimeContext runtimeContext = connection.getRuntimeContext();
PrepareEngine prepareEngine = new PrepareEngine(runtimeContext.getRule().toRules(), runtimeContext.getProperties(), runtimeContext.getMetaData());
SQLStatement sqlStatement = runtimeContext.getSqlParserEngine().parse(sql, false);
RouteContext routeContext = new DataNodeRouter(
runtimeContext.getMetaData(), runtimeContext.getProperties(), runtimeContext.getRule().toRules()).route(sqlStatement, sql, Collections.emptyList());
ExecutionContext result = prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(runtimeContext.getMetaData().getSchema().getConfiguredSchemaMetaData(),
runtimeContext.getProperties(), runtimeContext.getRule().toRules()).rewrite(sql, Collections.emptyList(), routeContext);
ExecutionContext result = new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(runtimeContext.getMetaData(), sqlRewriteResult));
if (runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, runtimeContext.getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
statementExecutor.init(result);
statementExecutor.getStatements().forEach(this::replayMethodsInvocation);
return result;
......
......@@ -52,11 +52,6 @@
<artifactId>sharding-orchestration-center-configuration</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId>
......
......@@ -29,7 +29,7 @@
<dependencies>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<artifactId>shardingsphere-executor</artifactId>
<version>${project.version}</version>
</dependency>
......
......@@ -32,10 +32,5 @@
<artifactId>sharding-core-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
......@@ -44,6 +44,7 @@ import org.apache.shardingsphere.transaction.core.TransactionType;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.underlying.executor.QueryResult;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.merge.MergeEngine;
import org.apache.shardingsphere.underlying.merge.result.MergedResult;
......@@ -72,6 +73,9 @@ public final class JDBCDatabaseCommunicationEngine implements DatabaseCommunicat
public BackendResponse execute() {
try {
ExecutionContext executionContext = executeEngine.getJdbcExecutorWrapper().route(sql);
if (ShardingProxyContext.getInstance().getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, ShardingProxyContext.getInstance().getProperties().<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), executionContext);
}
return execute(executionContext);
} catch (final SQLException ex) {
return new ErrorResponse(ex);
......
......@@ -33,11 +33,12 @@ import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import org.apache.shardingsphere.underlying.executor.context.SQLUnit;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.GenericSQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteUnit;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -85,8 +86,9 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp
Collection<BaseRule> rules = logicSchema.getShardingRule().toRules();
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, true);
RouteContext routeContext = new DataNodeRouter(logicSchema.getMetaData(), SHARDING_PROXY_CONTEXT.getProperties(), rules).route(sqlStatement, sql, parameters);
PrepareEngine prepareEngine = new PrepareEngine(rules, ShardingProxyContext.getInstance().getProperties(), logicSchema.getMetaData());
return prepareEngine.prepare(sql, new ArrayList<>(parameters), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SHARDING_PROXY_CONTEXT.getProperties(), rules).rewrite(sql, new ArrayList<>(parameters), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(logicSchema.getMetaData(), sqlRewriteResult));
}
@SuppressWarnings("unchecked")
......@@ -94,8 +96,9 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp
Collection<BaseRule> rules = Collections.singletonList(((MasterSlaveSchema) logicSchema).getMasterSlaveRule());
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, true);
RouteContext routeContext = new DataNodeRouter(logicSchema.getMetaData(), SHARDING_PROXY_CONTEXT.getProperties(), rules).route(sqlStatement, sql, parameters);
PrepareEngine prepareEngine = new PrepareEngine(rules, SHARDING_PROXY_CONTEXT.getProperties(), logicSchema.getMetaData());
return prepareEngine.prepare(sql, new ArrayList<>(parameters), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SHARDING_PROXY_CONTEXT.getProperties(), rules).rewrite(sql, new ArrayList<>(parameters), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(logicSchema.getMetaData(), sqlRewriteResult));
}
@SuppressWarnings("unchecked")
......@@ -103,8 +106,9 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp
Collection<BaseRule> rules = Collections.singletonList(((EncryptSchema) logicSchema).getEncryptRule());
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, true);
RouteContext routeContext = new DataNodeRouter(logicSchema.getMetaData(), SHARDING_PROXY_CONTEXT.getProperties(), rules).route(sqlStatement, sql, parameters);
PrepareEngine prepareEngine = new PrepareEngine(rules, SHARDING_PROXY_CONTEXT.getProperties(), logicSchema.getMetaData());
return prepareEngine.prepare(sql, new ArrayList<>(parameters), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SHARDING_PROXY_CONTEXT.getProperties(), rules).rewrite(sql, new ArrayList<>(parameters), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(logicSchema.getMetaData(), sqlRewriteResult));
}
private ExecutionContext doShadowRoute(final String sql) {
......@@ -117,21 +121,17 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp
logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(), ShardingProxyContext.getInstance().getProperties(), Collections.singletonList(shadowSchema.getShadowRule()));
SQLRewriteUnit sqlRewriteResult = ((GenericSQLRewriteResult) sqlRewriteEntry.rewrite(
sql, parameters, new RouteContext(sqlStatementContext, parameters, new RouteResult()))).getSqlRewriteUnit();
ExecutionContext result = new ExecutionContext(sqlStatementContext);
String dataSourceName = shadowJudgementEngine.isShadowSQL()
? shadowSchema.getShadowRule().getRuleConfiguration().getShadowMappings().get(logicSchema.getDataSources().keySet().iterator().next())
: logicSchema.getDataSources().keySet().iterator().next();
result.getExecutionUnits().add(
new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters())));
return result;
return new ExecutionContext(sqlStatementContext, Collections.singletonList(new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters()))));
}
@SuppressWarnings("unchecked")
private ExecutionContext doTransparentRoute(final String sql) {
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, false);
ExecutionContext result = new ExecutionContext(new CommonSQLStatementContext(sqlStatement));
result.getExecutionUnits().add(new ExecutionUnit(logicSchema.getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
return result;
return new ExecutionContext(
new CommonSQLStatementContext(sqlStatement), new ExecutionUnit(logicSchema.getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
}
@Override
......
......@@ -33,11 +33,12 @@ import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.underlying.common.metadata.schema.RuleSchemaMetaData;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContextBuilder;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import org.apache.shardingsphere.underlying.executor.context.SQLUnit;
import org.apache.shardingsphere.underlying.pluggble.prepare.PrepareEngine;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.GenericSQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteUnit;
import org.apache.shardingsphere.underlying.route.DataNodeRouter;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
......@@ -81,8 +82,9 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper {
Collection<BaseRule> rules = logicSchema.getShardingRule().toRules();
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, false);
RouteContext routeContext = new DataNodeRouter(logicSchema.getMetaData(), SHARDING_PROXY_CONTEXT.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(rules, ShardingProxyContext.getInstance().getProperties(), logicSchema.getMetaData());
return prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SHARDING_PROXY_CONTEXT.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(logicSchema.getMetaData(), sqlRewriteResult));
}
@SuppressWarnings("unchecked")
......@@ -90,8 +92,9 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper {
Collection<BaseRule> rules = Collections.singletonList(((MasterSlaveSchema) logicSchema).getMasterSlaveRule());
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, false);
RouteContext routeContext = new DataNodeRouter(logicSchema.getMetaData(), SHARDING_PROXY_CONTEXT.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(rules, SHARDING_PROXY_CONTEXT.getProperties(), logicSchema.getMetaData());
return prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SHARDING_PROXY_CONTEXT.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(logicSchema.getMetaData(), sqlRewriteResult));
}
@SuppressWarnings("unchecked")
......@@ -99,8 +102,9 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper {
Collection<BaseRule> rules = Collections.singletonList(((EncryptSchema) logicSchema).getEncryptRule());
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, false);
RouteContext routeContext = new DataNodeRouter(logicSchema.getMetaData(), SHARDING_PROXY_CONTEXT.getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
PrepareEngine prepareEngine = new PrepareEngine(rules, SHARDING_PROXY_CONTEXT.getProperties(), logicSchema.getMetaData());
return prepareEngine.prepare(sql, Collections.emptyList(), routeContext);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SHARDING_PROXY_CONTEXT.getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(logicSchema.getMetaData(), sqlRewriteResult));
}
private ExecutionContext doShadowRoute(final String sql) {
......@@ -116,17 +120,14 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper {
logicSchema.getMetaData().getSchema().getConfiguredSchemaMetaData(), ShardingProxyContext.getInstance().getProperties(), Collections.singletonList(shadowSchema.getShadowRule()));
SQLRewriteUnit sqlRewriteResult = ((GenericSQLRewriteResult) sqlRewriteEntry.rewrite(sql, Collections.emptyList(),
new RouteContext(sqlStatementContext, Collections.emptyList(), new RouteResult()))).getSqlRewriteUnit();
ExecutionContext result = new ExecutionContext(sqlStatementContext);
result.getExecutionUnits().add(new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters())));
return result;
return new ExecutionContext(sqlStatementContext, new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSql(), sqlRewriteResult.getParameters())));
}
@SuppressWarnings("unchecked")
private ExecutionContext doTransparentRoute(final String sql) {
SQLStatement sqlStatement = logicSchema.getSqlParserEngine().parse(sql, false);
ExecutionContext result = new ExecutionContext(new CommonSQLStatementContext(sqlStatement));
result.getExecutionUnits().add(new ExecutionUnit(logicSchema.getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
return result;
return new ExecutionContext(
new CommonSQLStatementContext(sqlStatement), new ExecutionUnit(logicSchema.getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
}
@Override
......
......@@ -29,7 +29,6 @@ import org.apache.shardingsphere.shardingproxy.backend.text.TextProtocolBackendH
import org.apache.shardingsphere.shardingproxy.backend.text.sctl.exception.InvalidShardingCTLFormatException;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Iterator;
......@@ -51,7 +50,7 @@ public final class ShardingCTLExplainBackendHandler implements TextProtocolBacke
private Iterator<ExecutionUnit> executionUnits;
@Override
public BackendResponse execute() throws SQLException {
public BackendResponse execute() {
Optional<ShardingCTLExplainStatement> explainStatement = new ShardingCTLExplainParser(sql).doParse();
if (!explainStatement.isPresent()) {
return new ErrorResponse(new InvalidShardingCTLFormatException(sql));
......
......@@ -27,11 +27,6 @@
<name>${project.artifactId}</name>
<dependencies>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-orchestration-core-facade</artifactId>
......
......@@ -36,7 +36,7 @@
<dependencies>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
<artifactId>shardingsphere-executor</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
......
......@@ -50,12 +50,6 @@
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-orchestration-core-facade</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-pluggable</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
......
......@@ -35,6 +35,5 @@
<module>shardingsphere-rewrite</module>
<module>shardingsphere-executor</module>
<module>shardingsphere-merge</module>
<module>shardingsphere-pluggable</module>
</modules>
</project>
......@@ -34,5 +34,10 @@
<artifactId>shardingsphere-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-rewrite-engine</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
......@@ -22,7 +22,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Collections;
/**
* Execution context.
......@@ -33,5 +33,10 @@ public class ExecutionContext {
private final SQLStatementContext sqlStatementContext;
private final Collection<ExecutionUnit> executionUnits = new LinkedHashSet<>();
private final Collection<ExecutionUnit> executionUnits;
public ExecutionContext(final SQLStatementContext sqlStatementContext, final ExecutionUnit executionUnit) {
this.sqlStatementContext = sqlStatementContext;
executionUnits = Collections.singletonList(executionUnit);
}
}
......@@ -15,71 +15,45 @@
* limitations under the License.
*/
package org.apache.shardingsphere.underlying.pluggble.prepare;
package org.apache.shardingsphere.underlying.executor.context;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.underlying.common.config.properties.ConfigurationPropertyKey;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.underlying.common.rule.BaseRule;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import org.apache.shardingsphere.underlying.executor.context.SQLUnit;
import org.apache.shardingsphere.underlying.executor.log.SQLLogger;
import org.apache.shardingsphere.underlying.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.engine.result.GenericSQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.RouteSQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.underlying.rewrite.engine.result.SQLRewriteUnit;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
import org.apache.shardingsphere.underlying.route.context.RouteUnit;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map.Entry;
/**
* Prepare engine.
* Execution context builder.
*/
@RequiredArgsConstructor
public final class PrepareEngine {
private final Collection<BaseRule> rules;
private final ConfigurationProperties properties;
private final ShardingSphereMetaData metaData;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ExecutionContextBuilder {
/**
* Prepare to execute.
*
* @param sql SQL
* @param parameters SQL parameters
* @param routeContext route context
* @return execution context
* Build execution contexts.
*
* @param metaData meta data
* @param sqlRewriteResult SQL rewrite result
* @return execution contexts
*/
public ExecutionContext prepare(final String sql, final List<Object> parameters, final RouteContext routeContext) {
ExecutionContext result = new ExecutionContext(routeContext.getSqlStatementContext());
result.getExecutionUnits().addAll(rewrite(sql, parameters, routeContext));
if (properties.<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
SQLLogger.logSQL(sql, properties.<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), result.getSqlStatementContext(), result.getExecutionUnits());
}
return result;
}
private Collection<ExecutionUnit> rewrite(final String sql, final List<Object> parameters, final RouteContext routeContext) {
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(metaData.getSchema().getConfiguredSchemaMetaData(), properties, rules).rewrite(sql, parameters, routeContext);
return sqlRewriteResult instanceof GenericSQLRewriteResult ? getExecutionUnit((GenericSQLRewriteResult) sqlRewriteResult) : getExecutionUnit((RouteSQLRewriteResult) sqlRewriteResult);
public static Collection<ExecutionUnit> build(final ShardingSphereMetaData metaData, final SQLRewriteResult sqlRewriteResult) {
return sqlRewriteResult instanceof GenericSQLRewriteResult ? build(metaData, (GenericSQLRewriteResult) sqlRewriteResult) : build((RouteSQLRewriteResult) sqlRewriteResult);
}
private Collection<ExecutionUnit> getExecutionUnit(final GenericSQLRewriteResult sqlRewriteResult) {
private static Collection<ExecutionUnit> build(final ShardingSphereMetaData metaData, final GenericSQLRewriteResult sqlRewriteResult) {
String dataSourceName = metaData.getDataSources().getAllInstanceDataSourceNames().iterator().next();
return Collections.singletonList(new ExecutionUnit(dataSourceName, new SQLUnit(sqlRewriteResult.getSqlRewriteUnit().getSql(), sqlRewriteResult.getSqlRewriteUnit().getParameters())));
}
private Collection<ExecutionUnit> getExecutionUnit(final RouteSQLRewriteResult sqlRewriteResult) {
private static Collection<ExecutionUnit> build(final RouteSQLRewriteResult sqlRewriteResult) {
Collection<ExecutionUnit> result = new LinkedHashSet<>();
for (Entry<RouteUnit, SQLRewriteUnit> entry : sqlRewriteResult.getSqlRewriteUnits().entrySet()) {
result.add(new ExecutionUnit(entry.getKey().getDataSourceMapper().getActualName(), new SQLUnit(entry.getValue().getSql(), entry.getValue().getParameters())));
......
......@@ -20,7 +20,7 @@ package org.apache.shardingsphere.underlying.executor.log;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import java.util.Collection;
......@@ -39,16 +39,15 @@ public final class SQLLogger {
*
* @param logicSQL logic SQL
* @param showSimple whether show SQL in simple style
* @param sqlStatementContext SQL statement context
* @param executionUnits execution units
* @param executionContext Execution context
*/
public static void logSQL(final String logicSQL, final boolean showSimple, final SQLStatementContext sqlStatementContext, final Collection<ExecutionUnit> executionUnits) {
public static void logSQL(final String logicSQL, final boolean showSimple, final ExecutionContext executionContext) {
log("Logic SQL: {}", logicSQL);
log("SQLStatement: {}", sqlStatementContext);
log("SQLStatement: {}", executionContext.getSqlStatementContext());
if (showSimple) {
logSimpleMode(executionUnits);
logSimpleMode(executionContext.getExecutionUnits());
} else {
logNormalMode(executionUnits);
logNormalMode(executionContext.getExecutionUnits());
}
}
......
......@@ -17,6 +17,7 @@
package org.apache.shardingsphere.underlying.executor.log;
import org.apache.shardingsphere.underlying.executor.context.ExecutionContext;
import org.apache.shardingsphere.underlying.executor.context.ExecutionUnit;
import org.apache.shardingsphere.underlying.executor.context.SQLUnit;
import org.junit.Before;
......@@ -60,7 +61,7 @@ public final class SQLLoggerTest {
@Test
public void assertLogNormalSQLWithoutParameter() {
SQLLogger.logSQL(SQL, false, null, executionUnits);
SQLLogger.logSQL(SQL, false, new ExecutionContext(null, executionUnits));
InOrder inOrder = inOrder(logger);
inOrder.verify(logger).info("Logic SQL: {}", new Object[]{SQL});
inOrder.verify(logger).info("SQLStatement: {}", new Object[]{null});
......@@ -73,7 +74,7 @@ public final class SQLLoggerTest {
public void assertLogNormalSQLWithParameters() {
List<Object> parameters = executionUnits.iterator().next().getSqlUnit().getParameters();
parameters.add("parameter");
SQLLogger.logSQL(SQL, false, null, executionUnits);
SQLLogger.logSQL(SQL, false, new ExecutionContext(null, executionUnits));
InOrder inOrder = inOrder(logger);
inOrder.verify(logger).info("Logic SQL: {}", new Object[]{SQL});
inOrder.verify(logger).info("SQLStatement: {}", new Object[]{null});
......@@ -84,7 +85,7 @@ public final class SQLLoggerTest {
@Test
public void assertLogSimpleSQL() {
SQLLogger.logSQL(SQL, true, null, executionUnits);
SQLLogger.logSQL(SQL, true, new ExecutionContext(null, executionUnits));
InOrder inOrder = inOrder(logger);
inOrder.verify(logger).info("Logic SQL: {}", new Object[]{SQL});
inOrder.verify(logger).info("SQLStatement: {}", new Object[]{null});
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-underlying</artifactId>
<version>5.0.0-RC1-SNAPSHOT</version>
</parent>
<artifactId>shardingsphere-pluggable</artifactId>
<name>${project.artifactId}</name>
<dependencies>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-sql-parser-binder</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-route</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-rewrite-engine</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-executor</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-merge</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.shardingsphere" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
<logger name="org.apache.shardingsphere.sharding.execute.sql.execute.threadlocal.ExecutorExceptionHandler" level="off" />
<logger name="org.apache.shardingsphere.core.log.ConfigurationLogger" level="off" />
<logger name="ShardingSphere-metadata" level="off" />
<root>
<level value="error" />
<appender-ref ref="console" />
</root>
</configuration>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册