Commit 2ede57ec authored by terrymanu's avatar terrymanu
Browse files

split router to routerEngine and 2 diff router

parent 7bc3de4d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.dangdang.ddframe.rdb.sharding.jdbc;

import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouteEngine;
import com.dangdang.ddframe.rdb.sharding.router.RouteEngine;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@@ -34,7 +34,7 @@ public final class ShardingContext {
    
    private final ShardingRule shardingRule;
    
    private final SQLRouteEngine sqlRouteEngine;
    private final RouteEngine routeEngine;
    
    private final ExecutorEngine executorEngine;
}
+2 −2
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import com.dangdang.ddframe.rdb.sharding.exception.ShardingJdbcException;
import com.dangdang.ddframe.rdb.sharding.executor.ExecutorEngine;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractDataSourceAdapter;
import com.dangdang.ddframe.rdb.sharding.metrics.MetricsContext;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouteEngine;
import com.dangdang.ddframe.rdb.sharding.router.RouteEngine;
import com.google.common.base.Preconditions;

import javax.sql.DataSource;
@@ -55,7 +55,7 @@ public class ShardingDataSource extends AbstractDataSourceAdapter {
        shardingProperties = new ShardingProperties(props);
        executorEngine = new ExecutorEngine(shardingProperties);
        try {
            shardingContext = new ShardingContext(shardingRule, new SQLRouteEngine(shardingRule, DatabaseType.valueFrom(getDatabaseProductName(shardingRule))), executorEngine);
            shardingContext = new ShardingContext(shardingRule, new RouteEngine(shardingRule, DatabaseType.valueFrom(getDatabaseProductName(shardingRule))), executorEngine);
        } catch (final SQLException ex) {
            throw new ShardingJdbcException(ex);
        }
+3 −3
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractPreparedStatementA
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetFactory;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.InsertSQLContext;
import com.dangdang.ddframe.rdb.sharding.router.PreparedSQLRouteEngine;
import com.dangdang.ddframe.rdb.sharding.router.PreparedSQLRouter;
import com.dangdang.ddframe.rdb.sharding.router.SQLExecutionUnit;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouteResult;
import com.google.common.base.Optional;
@@ -46,7 +46,7 @@ import java.util.Objects;
 */
public final class ShardingPreparedStatement extends AbstractPreparedStatementAdapter {
    
    private final PreparedSQLRouteEngine preparedSQLRouteEngine;
    private final PreparedSQLRouter preparedSQLRouteEngine;
    
    private final List<PreparedStatementExecutorWrapper> cachedPreparedStatementWrappers = new ArrayList<>();
    
@@ -70,7 +70,7 @@ public final class ShardingPreparedStatement extends AbstractPreparedStatementAd
    ShardingPreparedStatement(final ShardingConnection shardingConnection, 
            final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) {
        super(shardingConnection, resultSetType, resultSetConcurrency, resultSetHoldability);
        preparedSQLRouteEngine = new PreparedSQLRouteEngine(sql, shardingConnection.getShardingContext());
        preparedSQLRouteEngine = new PreparedSQLRouter(sql, shardingConnection.getShardingContext());
    }
    
    ShardingPreparedStatement(final ShardingConnection shardingConnection, final String sql, final int autoGeneratedKeys) {
+2 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.GeneratedKeyCont
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.InsertSQLContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLContext;
import com.dangdang.ddframe.rdb.sharding.router.SQLExecutionUnit;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouter;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouteResult;
import com.google.common.base.Function;
import com.google.common.collect.Iterators;
@@ -274,7 +275,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
    
    private StatementExecutor generateExecutor(final String sql) throws SQLException {
        StatementExecutor result = new StatementExecutor(shardingConnection.getShardingContext().getExecutorEngine());
        SQLRouteResult sqlRouteResult = shardingConnection.getShardingContext().getSqlRouteEngine().route(sql);
        SQLRouteResult sqlRouteResult = new SQLRouter(shardingConnection.getShardingContext().getRouteEngine()).route(sql);
        if (sqlRouteResult.getSqlContext() instanceof InsertSQLContext) {
            generatedKeyContext = ((InsertSQLContext) sqlRouteResult.getSqlContext()).getGeneratedKeyContext();
        } else {
+9 −9
Original line number Diff line number Diff line
@@ -30,23 +30,23 @@ import java.util.Collections;
import java.util.List;

/**
 * 预解析的SQL路由引擎..
 * 预解析的SQL路由.
 * 
 * @author gaohongtao
 */
public final class PreparedSQLRouteEngine {
public final class PreparedSQLRouter {
    
    private final String logicSql;
    private final String logicSQL;
    
    private final SQLRouteEngine engine;
    private final RouteEngine routeEngine;
    
    private final ShardingRule shardingRule;
    
    private SQLContext sqlContext;
    
    public PreparedSQLRouteEngine(final String logicSql, final ShardingContext shardingContext) {
        this.logicSql = logicSql;
        engine = shardingContext.getSqlRouteEngine();
    public PreparedSQLRouter(final String logicSQL, final ShardingContext shardingContext) {
        this.logicSQL = logicSQL;
        routeEngine = shardingContext.getRouteEngine();
        shardingRule = shardingContext.getShardingRule();
    }
    
@@ -59,12 +59,12 @@ public final class PreparedSQLRouteEngine {
     */
    public SQLRouteResult route(final List<Object> parameters) {
        if (null == sqlContext) {
            sqlContext = engine.parseSQL(logicSql, parameters);
            sqlContext = routeEngine.parse(logicSQL, parameters);
        } else {
            List<Number> generatedIds = generateId();
            parameters.addAll(generatedIds);
        }
        return engine.route(logicSql, sqlContext, parameters);
        return routeEngine.route(logicSQL, sqlContext, parameters);
    }
    
    private List<Number> generateId() {
Loading