未验证 提交 016b9770 编写于 作者: J Juan Pan(Trista) 提交者: GitHub

Merge pull request #3941 from terrymanu/plugin

Move master-slave route decorator from sharding-core-route module to sharding-core-entry module
......@@ -17,27 +17,32 @@
package org.apache.shardingsphere.core.shard;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.api.hint.HintManager;
import org.apache.shardingsphere.core.route.ShardingRouteContext;
import org.apache.shardingsphere.core.route.hook.SPIRoutingHook;
import org.apache.shardingsphere.core.route.router.masterslave.MasterSlaveRouteDecorator;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.MasterSlaveRule;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.core.shard.log.ShardingSQLLogger;
import org.apache.shardingsphere.sharding.execute.context.ShardingExecutionContext;
import org.apache.shardingsphere.encrypt.rewrite.context.EncryptSQLRewriteContextDecorator;
import org.apache.shardingsphere.sharding.execute.context.ShardingExecutionContext;
import org.apache.shardingsphere.sharding.rewrite.context.ShardingSQLRewriteContextDecorator;
import org.apache.shardingsphere.sharding.rewrite.engine.ShardingSQLRewriteEngine;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.constant.properties.PropertiesConstant;
import org.apache.shardingsphere.underlying.common.constant.properties.ShardingSphereProperties;
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.rewrite.SQLRewriteEntry;
import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContext;
import org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContextDecorator;
import org.apache.shardingsphere.underlying.rewrite.engine.SQLRewriteResult;
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.route.context.RouteUnit;
import java.util.Collection;
......@@ -61,13 +66,24 @@ public abstract class BaseShardingEngine {
private final ShardingSphereMetaData metaData;
private final SPIRoutingHook routingHook = new SPIRoutingHook();
@Getter
private final ShardingRouter shardingRouter;
private final SPIRoutingHook routingHook;
public BaseShardingEngine(final ShardingRule shardingRule, final ShardingSphereProperties properties, final ShardingSphereMetaData metaData, final SQLParseEngine sqlParseEngine) {
this.shardingRule = shardingRule;
this.properties = properties;
this.metaData = metaData;
shardingRouter = new ShardingRouter(shardingRule, metaData, sqlParseEngine);
routingHook = new SPIRoutingHook();
}
/**
* Shard.
*
* @param sql SQL
* @param parameters parameters of SQL
* @param parameters SQL parameters
* @return execution context
*/
public ExecutionContext shard(final String sql, final List<Object> parameters) {
......@@ -90,7 +106,7 @@ public abstract class BaseShardingEngine {
private ShardingRouteContext executeRoute(final String sql, final List<Object> clonedParameters) {
routingHook.start(sql);
try {
ShardingRouteContext result = route(sql, clonedParameters);
ShardingRouteContext result = decorate(route(sql, clonedParameters));
routingHook.finishSuccess(result, metaData.getTables());
return result;
// CHECKSTYLE:OFF
......@@ -101,6 +117,14 @@ public abstract class BaseShardingEngine {
}
}
private ShardingRouteContext decorate(final ShardingRouteContext shardingRouteContext) {
ShardingRouteContext result = shardingRouteContext;
for (MasterSlaveRule each : shardingRule.getMasterSlaveRules()) {
result = (ShardingRouteContext) new MasterSlaveRouteDecorator(each).decorate(result);
}
return result;
}
private Collection<ExecutionUnit> convert(final String sql, final List<Object> parameters, final ShardingRouteContext shardingRouteContext) {
Collection<ExecutionUnit> result = new LinkedHashSet<>();
for (RouteUnit each : shardingRouteContext.getRouteResult().getRouteUnits()) {
......
......@@ -17,12 +17,11 @@
package org.apache.shardingsphere.core.shard;
import org.apache.shardingsphere.underlying.common.constant.properties.ShardingSphereProperties;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.core.route.PreparedStatementRoutingEngine;
import org.apache.shardingsphere.core.route.ShardingRouteContext;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.constant.properties.ShardingSphereProperties;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import java.util.ArrayList;
import java.util.List;
......@@ -41,12 +40,8 @@ import java.util.List;
*/
public final class PreparedQueryShardingEngine extends BaseShardingEngine {
private final PreparedStatementRoutingEngine routingEngine;
public PreparedQueryShardingEngine(final String sql,
final ShardingRule shardingRule, final ShardingSphereProperties properties, final ShardingSphereMetaData metaData, final SQLParseEngine sqlParseEngine) {
super(shardingRule, properties, metaData);
routingEngine = new PreparedStatementRoutingEngine(sql, shardingRule, metaData, sqlParseEngine);
public PreparedQueryShardingEngine(final ShardingRule shardingRule, final ShardingSphereProperties properties, final ShardingSphereMetaData metaData, final SQLParseEngine sqlParseEngine) {
super(shardingRule, properties, metaData, sqlParseEngine);
}
@Override
......@@ -56,6 +51,6 @@ public final class PreparedQueryShardingEngine extends BaseShardingEngine {
@Override
protected ShardingRouteContext route(final String sql, final List<Object> parameters) {
return routingEngine.route(parameters);
return getShardingRouter().route(sql, parameters, true);
}
}
......@@ -17,12 +17,11 @@
package org.apache.shardingsphere.core.shard;
import org.apache.shardingsphere.underlying.common.constant.properties.ShardingSphereProperties;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.core.route.ShardingRouteContext;
import org.apache.shardingsphere.core.route.StatementRoutingEngine;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.constant.properties.ShardingSphereProperties;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import java.util.Collections;
import java.util.List;
......@@ -41,11 +40,8 @@ import java.util.List;
*/
public final class SimpleQueryShardingEngine extends BaseShardingEngine {
private final StatementRoutingEngine routingEngine;
public SimpleQueryShardingEngine(final ShardingRule shardingRule, final ShardingSphereProperties properties, final ShardingSphereMetaData metaData, final SQLParseEngine sqlParseEngine) {
super(shardingRule, properties, metaData);
routingEngine = new StatementRoutingEngine(shardingRule, metaData, sqlParseEngine);
super(shardingRule, properties, metaData, sqlParseEngine);
}
@Override
......@@ -55,6 +51,6 @@ public final class SimpleQueryShardingEngine extends BaseShardingEngine {
@Override
protected ShardingRouteContext route(final String sql, final List<Object> parameters) {
return routingEngine.route(sql);
return getShardingRouter().route(sql, Collections.emptyList(), false);
}
}
......@@ -18,12 +18,12 @@
package org.apache.shardingsphere.core.shard;
import lombok.SneakyThrows;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetas;
import org.apache.shardingsphere.core.route.PreparedStatementRoutingEngine;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetas;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -41,7 +41,7 @@ import static org.mockito.Mockito.when;
public final class PreparedQueryShardingEngineTest extends BaseShardingEngineTest {
@Mock
private PreparedStatementRoutingEngine routingEngine;
private ShardingRouter shardingRouter;
private PreparedQueryShardingEngine shardingEngine;
......@@ -56,25 +56,25 @@ public final class PreparedQueryShardingEngineTest extends BaseShardingEngineTes
when(shardingRule.getEncryptRule()).thenReturn(encryptRule);
ShardingSphereMetaData shardingSphereMetaData = mock(ShardingSphereMetaData.class);
when(shardingSphereMetaData.getTables()).thenReturn(mock(TableMetas.class));
shardingEngine = new PreparedQueryShardingEngine(getSql(), shardingRule, getProperties(), shardingSphereMetaData, mock(SQLParseEngine.class));
shardingEngine = new PreparedQueryShardingEngine(shardingRule, getProperties(), shardingSphereMetaData, mock(SQLParseEngine.class));
setRoutingEngine();
}
@SneakyThrows
private void setRoutingEngine() {
Field field = PreparedQueryShardingEngine.class.getDeclaredField("routingEngine");
Field field = BaseShardingEngine.class.getDeclaredField("shardingRouter");
field.setAccessible(true);
field.set(shardingEngine, routingEngine);
field.set(shardingEngine, shardingRouter);
}
protected void assertShard() {
when(routingEngine.route(getParameters())).thenReturn(createSQLRouteContext());
when(shardingRouter.route(getSql(), getParameters(), true)).thenReturn(createSQLRouteContext());
assertExecutionContext(shardingEngine.shard(getSql(), getParameters()));
}
@Test(expected = SQLException.class)
public void assertWithRouteException() {
when(routingEngine.route(getParameters())).thenThrow(SQLException.class);
when(shardingRouter.route(getSql(), getParameters(), true)).thenThrow(SQLException.class);
shardingEngine.shard(getSql(), getParameters());
}
}
......@@ -18,12 +18,12 @@
package org.apache.shardingsphere.core.shard;
import lombok.SneakyThrows;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetas;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.core.route.StatementRoutingEngine;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.Mock;
......@@ -39,7 +39,7 @@ import static org.mockito.Mockito.when;
public final class SimpleQueryShardingEngineTest extends BaseShardingEngineTest {
@Mock
private StatementRoutingEngine routingEngine;
private ShardingRouter shardingRouter;
private SimpleQueryShardingEngine shardingEngine;
......@@ -60,13 +60,13 @@ public final class SimpleQueryShardingEngineTest extends BaseShardingEngineTest
@SneakyThrows
private void setRoutingEngine() {
Field field = SimpleQueryShardingEngine.class.getDeclaredField("routingEngine");
Field field = BaseShardingEngine.class.getDeclaredField("shardingRouter");
field.setAccessible(true);
field.set(shardingEngine, routingEngine);
field.set(shardingEngine, shardingRouter);
}
protected void assertShard() {
when(routingEngine.route(getSql())).thenReturn(createSQLRouteContext());
when(shardingRouter.route(getSql(), Collections.emptyList(), false)).thenReturn(createSQLRouteContext());
assertExecutionContext(shardingEngine.shard(getSql(), getParameters()));
}
}
/*
* 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.
*/
package org.apache.shardingsphere.core.route;
import org.apache.shardingsphere.core.route.router.masterslave.MasterSlaveRouteDecorator;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.MasterSlaveRule;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import java.util.List;
/**
* PreparedStatement routing engine.
*
* @author zhangliang
* @author panjuan
*/
public final class PreparedStatementRoutingEngine {
private final String logicSQL;
private final ShardingRule shardingRule;
private final ShardingRouter shardingRouter;
public PreparedStatementRoutingEngine(final String logicSQL, final ShardingRule shardingRule, final ShardingSphereMetaData metaData, final SQLParseEngine sqlParseEngine) {
this.logicSQL = logicSQL;
this.shardingRule = shardingRule;
shardingRouter = new ShardingRouter(shardingRule, metaData, sqlParseEngine);
}
/**
* SQL route.
*
* @param parameters SQL parameters
* @return route result
*/
public ShardingRouteContext route(final List<Object> parameters) {
ShardingRouteContext result = shardingRouter.route(logicSQL, parameters, true);
for (MasterSlaveRule each : shardingRule.getMasterSlaveRules()) {
result = (ShardingRouteContext) new MasterSlaveRouteDecorator(each).decorate(result);
}
return result;
}
}
/*
* 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.
*/
package org.apache.shardingsphere.core.route;
import org.apache.shardingsphere.core.route.router.masterslave.MasterSlaveRouteDecorator;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.MasterSlaveRule;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import java.util.Collections;
/**
* Statement routing engine.
*
* @author zhangliang
* @author panjuan
*/
public final class StatementRoutingEngine {
private final ShardingRule shardingRule;
private final ShardingRouter shardingRouter;
public StatementRoutingEngine(final ShardingRule shardingRule, final ShardingSphereMetaData metaData, final SQLParseEngine sqlParseEngine) {
this.shardingRule = shardingRule;
shardingRouter = new ShardingRouter(shardingRule, metaData, sqlParseEngine);
}
/**
* SQL route.
*
* @param logicSQL logic SQL
* @return route result
*/
public ShardingRouteContext route(final String logicSQL) {
ShardingRouteContext result = shardingRouter.route(logicSQL, Collections.emptyList(), false);
for (MasterSlaveRule each : shardingRule.getMasterSlaveRules()) {
result = (ShardingRouteContext) new MasterSlaveRouteDecorator(each).decorate(result);
}
return result;
}
}
......@@ -22,23 +22,25 @@ import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.strategy.HintShardingStrategyConfiguration;
import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.underlying.common.metadata.column.ColumnMetaData;
import org.apache.shardingsphere.underlying.common.metadata.datasource.DataSourceMetas;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetaData;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetas;
import org.apache.shardingsphere.sql.parser.relation.statement.impl.SelectSQLStatementContext;
import org.apache.shardingsphere.core.route.fixture.HintShardingAlgorithmFixture;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.spi.database.metadata.DataSourceMetaData;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.sql.parser.SQLParseEngineFactory;
import org.apache.shardingsphere.sql.parser.relation.statement.impl.SelectSQLStatementContext;
import org.apache.shardingsphere.underlying.common.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.underlying.common.metadata.column.ColumnMetaData;
import org.apache.shardingsphere.underlying.common.metadata.datasource.DataSourceMetas;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetaData;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetas;
import org.junit.Before;
import org.junit.Test;
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
......@@ -67,7 +69,7 @@ public final class DatabaseTest {
public void assertDatabaseAllRoutingSQL() {
String originSQL = "select * from tesT";
SQLParseEngine parseEngine = SQLParseEngineFactory.getSQLParseEngine("MySQL");
ShardingRouteContext actual = new StatementRoutingEngine(shardingRule, getMetaDataForAllRoutingSQL(), parseEngine).route(originSQL);
ShardingRouteContext actual = new ShardingRouter(shardingRule, getMetaDataForAllRoutingSQL(), parseEngine).route(originSQL, Collections.emptyList(), false);
assertThat(actual.getRouteResult().getRouteUnits().size(), is(1));
Collection<String> actualDataSources = actual.getRouteResult().getDataSourceNames();
assertThat(actualDataSources.size(), is(1));
......@@ -88,11 +90,11 @@ public final class DatabaseTest {
public void assertDatabaseSelectSQLPagination() {
String originSQL = "select user_id from tbl_pagination limit 0,5";
SQLParseEngine parseEngine = SQLParseEngineFactory.getSQLParseEngine("MySQL");
ShardingRouteContext actual = new StatementRoutingEngine(shardingRule, getMetaDataForPagination(), parseEngine).route(originSQL);
ShardingRouteContext actual = new ShardingRouter(shardingRule, getMetaDataForPagination(), parseEngine).route(originSQL, Collections.emptyList(), false);
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(0L));
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orNull(), is(5L));
originSQL = "select user_id from tbl_pagination limit 5,5";
actual = new StatementRoutingEngine(shardingRule, getMetaDataForPagination(), parseEngine).route(originSQL);
actual = new ShardingRouter(shardingRule, getMetaDataForPagination(), parseEngine).route(originSQL, Collections.emptyList(), false);
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(5L));
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orNull(), is(5L));
}
......@@ -127,12 +129,12 @@ public final class DatabaseTest {
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
when(metaData.getTables()).thenReturn(mock(TableMetas.class));
SQLParseEngine parseEngine = SQLParseEngineFactory.getSQLParseEngine("MySQL");
ShardingRouteContext actual = new PreparedStatementRoutingEngine(originSQL, rule, metaData, parseEngine).route(Lists.<Object>newArrayList(13, 173));
ShardingRouteContext actual = new ShardingRouter(rule, metaData, parseEngine).route(originSQL, Lists.<Object>newArrayList(13, 173), false);
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(5L));
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orNull(), is(10L));
assertThat(actual.getRouteResult().getRouteUnits().size(), is(1));
originSQL = "select city_id from t_user where city_id in (?,?) limit 5,10";
actual = new PreparedStatementRoutingEngine(originSQL, rule, metaData, parseEngine).route(Lists.<Object>newArrayList(89, 84));
actual = new ShardingRouter(rule, metaData, parseEngine).route(originSQL, Lists.<Object>newArrayList(89, 84), false);
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualOffset(), is(5L));
assertThat(((SelectSQLStatementContext) actual.getSqlStatementContext()).getPaginationContext().getActualRowCount().orNull(), is(10L));
}
......
......@@ -17,9 +17,9 @@
package org.apache.shardingsphere.core.route.type.standard;
import org.apache.shardingsphere.core.route.PreparedStatementRoutingEngine;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
import org.apache.shardingsphere.core.route.ShardingRouteContext;
import org.apache.shardingsphere.core.route.fixture.AbstractRoutingEngineTest;
import org.apache.shardingsphere.core.route.router.sharding.ShardingRouter;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.SQLParseEngine;
import org.apache.shardingsphere.sql.parser.SQLParseEngineFactory;
......@@ -30,6 +30,7 @@ import org.apache.shardingsphere.underlying.common.metadata.column.ColumnMetaDat
import org.apache.shardingsphere.underlying.common.metadata.datasource.DataSourceMetas;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetaData;
import org.apache.shardingsphere.underlying.common.metadata.table.TableMetas;
import org.apache.shardingsphere.underlying.route.context.RouteContext;
import java.util.Arrays;
import java.util.Collections;
......@@ -46,8 +47,8 @@ public abstract class AbstractSQLRouteTest extends AbstractRoutingEngineTest {
ShardingRule shardingRule = createAllShardingRule();
ShardingSphereMetaData metaData = new ShardingSphereMetaData(buildDataSourceMetas(), buildTableMetas());
SQLParseEngine parseEngine = SQLParseEngineFactory.getSQLParseEngine("MySQL");
PreparedStatementRoutingEngine engine = new PreparedStatementRoutingEngine(sql, shardingRule, metaData, parseEngine);
RouteContext result = engine.route(parameters);
ShardingRouter shardingRouter = new ShardingRouter(shardingRule, metaData, parseEngine);
ShardingRouteContext result = shardingRouter.route(sql, parameters, false);
assertThat(result.getRouteResult().getRouteUnits().size(), is(1));
return result;
}
......
......@@ -111,7 +111,7 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
this.connection = connection;
this.sql = sql;
ShardingRuntimeContext runtimeContext = connection.getRuntimeContext();
shardingEngine = new PreparedQueryShardingEngine(sql, runtimeContext.getRule(), runtimeContext.getProperties(), runtimeContext.getMetaData(), runtimeContext.getParseEngine());
shardingEngine = new PreparedQueryShardingEngine(runtimeContext.getRule(), runtimeContext.getProperties(), runtimeContext.getMetaData(), runtimeContext.getParseEngine());
preparedStatementExecutor = new PreparedStatementExecutor(resultSetType, resultSetConcurrency, resultSetHoldability, returnGeneratedKeys, connection);
batchPreparedStatementExecutor = new BatchPreparedStatementExecutor(resultSetType, resultSetConcurrency, resultSetHoldability, returnGeneratedKeys, connection);
}
......
......@@ -84,7 +84,7 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp
private ExecutionContext doShardingRoute(final String sql) {
PreparedQueryShardingEngine shardingEngine = new PreparedQueryShardingEngine(
sql, logicSchema.getShardingRule(), ShardingProxyContext.getInstance().getProperties(), logicSchema.getMetaData(), logicSchema.getParseEngine());
logicSchema.getShardingRule(), ShardingProxyContext.getInstance().getProperties(), logicSchema.getMetaData(), logicSchema.getParseEngine());
return shardingEngine.shard(sql, parameters);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册