Commit bd33f07b authored by terrymanu's avatar terrymanu
Browse files

refactor JDBCStatementBackendHandler & JDBCTextBackendHandler

parent d4a07d3f
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -43,6 +43,10 @@ public final class SQLRouteResult {
    
    private final Set<SQLExecutionUnit> executionUnits = new LinkedHashSet<>();
    
    public SQLRouteResult(final SQLStatement sqlStatement) {
        this(sqlStatement, null);
    }

    /**
     * whether SQLRouteResult can refresh table metadata.
     *
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ public final class DatabaseHintSQLRouter implements ShardingRouter {
    @Override
    // TODO insert SQL need parse gen key
    public SQLRouteResult route(final String logicSQL, final List<Object> parameters, final SQLStatement sqlStatement) {
        SQLRouteResult result = new SQLRouteResult(sqlStatement, null);
        SQLRouteResult result = new SQLRouteResult(sqlStatement);
        RoutingResult routingResult = new DatabaseHintRoutingEngine(
                shardingRule.getShardingDataSourceNames().getDataSourceNames(), (HintShardingStrategy) shardingRule.getDefaultDatabaseShardingStrategy()).route();
        for (TableUnit each : routingResult.getTableUnits().getTableUnits()) {
+3 −3
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public final class ParsingSQLRouter implements ShardingRouter {
        if (null != generatedKey) {
            setGeneratedKeys(result, generatedKey);
        }
        RoutingResult routingResult = route(parameters, sqlStatement, shardingConditions);
        RoutingResult routingResult = route(sqlStatement, shardingConditions);
        SQLRewriteEngine rewriteEngine = new SQLRewriteEngine(shardingRule, logicSQL, databaseType, sqlStatement, shardingConditions, parameters);
        boolean isSingleRouting = routingResult.isSingleRouting();
        if (sqlStatement instanceof SelectStatement && null != ((SelectStatement) sqlStatement).getLimit()) {
@@ -112,7 +112,7 @@ public final class ParsingSQLRouter implements ShardingRouter {
        return result;
    }
    
    private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement, final ShardingConditions shardingConditions) {
    private RoutingResult route(final SQLStatement sqlStatement, final ShardingConditions shardingConditions) {
        Collection<String> tableNames = sqlStatement.getTables().getTableNames();
        RoutingEngine routingEngine;
        if (sqlStatement instanceof UseStatement) {
@@ -135,7 +135,7 @@ public final class ParsingSQLRouter implements ShardingRouter {
            routingEngine = new StandardRoutingEngine(shardingRule, tableNames.iterator().next(), shardingConditions);
        } else {
            // TODO config for cartesian set
            routingEngine = new ComplexRoutingEngine(shardingRule, parameters, tableNames, shardingConditions);
            routingEngine = new ComplexRoutingEngine(shardingRule, tableNames, shardingConditions);
        }
        return routingEngine.route();
    }
+0 −3
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.TreeSet;

/**
@@ -48,8 +47,6 @@ public final class ComplexRoutingEngine implements RoutingEngine {
    
    private final ShardingRule shardingRule;
    
    private final List<Object> parameters;
    
    private final Collection<String> logicTables;
    
    private final ShardingConditions shardingConditions;
+11 −11
Original line number Diff line number Diff line
@@ -75,6 +75,8 @@ public abstract class JDBCBackendHandler implements BackendHandler {
    
    private final String sql;
    
    private final BaseJDBCResource jdbcResource;
    
    private MergedResult mergedResult;
    
    private int currentSequenceId;
@@ -86,25 +88,23 @@ public abstract class JDBCBackendHandler implements BackendHandler {
    
    private boolean hasMoreResultValueFlag;
    
    private final BaseJDBCResource jdbcResource;
    private final List<ResultList> resultLists;
    
    private final RuleRegistry ruleRegistry;
    
    private final List<ResultList> resultLists;
    
    public JDBCBackendHandler(final String sql, final BaseJDBCResource jdbcResource) {
        this.sql = sql;
        this.jdbcResource = jdbcResource;
        isMerged = false;
        hasMoreResultValueFlag = true;
        this.jdbcResource = jdbcResource;
        ruleRegistry = RuleRegistry.getInstance();
        resultLists = new CopyOnWriteArrayList<>();
        ruleRegistry = RuleRegistry.getInstance();
    }
    
    @Override
    public CommandResponsePackets execute() {
        try {
            return doExecuteInternal(ruleRegistry.isMasterSlaveOnly() ? doMasterSlaveRoute() : doSqlShardingRoute());
            return doExecuteInternal(ruleRegistry.isMasterSlaveOnly() ? doMasterSlaveRoute() : doShardingRoute());
        } catch (final Exception ex) {
            log.error("ExecuteBackendHandler", ex);
            return new CommandResponsePackets(new ErrPacket(1, new SQLException(ex)));
@@ -139,14 +139,14 @@ public abstract class JDBCBackendHandler implements BackendHandler {
    
    private SQLRouteResult doMasterSlaveRoute() {
        SQLStatement sqlStatement = new SQLJudgeEngine(sql).judge();
        SQLRouteResult result = new SQLRouteResult(sqlStatement, null);
        String dataSourceName = new MasterSlaveRouter(ruleRegistry.getMasterSlaveRule()).route(sqlStatement.getType()).iterator().next();
        SQLUnit sqlUnit = new SQLUnit(sql, Collections.<List<Object>>emptyList());
        result.getExecutionUnits().add(new SQLExecutionUnit(dataSourceName, sqlUnit));
        SQLRouteResult result = new SQLRouteResult(sqlStatement);
        for (String each : new MasterSlaveRouter(ruleRegistry.getMasterSlaveRule()).route(sqlStatement.getType())) {
            result.getExecutionUnits().add(new SQLExecutionUnit(each, new SQLUnit(sql, Collections.<List<Object>>emptyList())));
        }
        return result;
    }
    
    protected abstract SQLRouteResult doSqlShardingRoute();
    protected abstract SQLRouteResult doShardingRoute();
    
    protected abstract Statement prepareResource(String dataSourceName, String unitSQL, SQLStatement sqlStatement) throws SQLException;
    
Loading