Commit cd50bc44 authored by terrymanu's avatar terrymanu
Browse files

for #647 ResultSetMergerInput => QueryResult

parent ad56ddb1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -132,7 +132,7 @@ public final class MasterSlavePreparedStatement extends AbstractMasterSlavePrepa
    
    @Override
    public ResultSet getResultSet() throws SQLException {
        Preconditions.checkArgument(1 == routedStatements.size(), "Cannot support getCurrentResultSetMergerInput for DDL");
        Preconditions.checkArgument(1 == routedStatements.size(), "Cannot support getResultSet for DDL");
        return routedStatements.iterator().next().getResultSet();
    }
    
+10 −10
Original line number Diff line number Diff line
@@ -33,8 +33,8 @@ import io.shardingjdbc.core.jdbc.core.resultset.ShardingResultSet;
import io.shardingjdbc.core.merger.DALMergeEngine;
import io.shardingjdbc.core.merger.DQLMergeEngine;
import io.shardingjdbc.core.merger.MergeEngine;
import io.shardingjdbc.core.merger.ResultSetMergerInput;
import io.shardingjdbc.core.merger.jdbc.JDBCResultSetMergerInput;
import io.shardingjdbc.core.merger.QueryResult;
import io.shardingjdbc.core.merger.jdbc.JDBCQueryResult;
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
@@ -123,15 +123,15 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
            Collection<PreparedStatementUnit> preparedStatementUnits = route();
            List<ResultSet> resultSets = new PreparedStatementExecutor(
                    getConnection().getShardingContext().getExecutorEngine(), routeResult.getSqlStatement().getType(), preparedStatementUnits, getParameters()).executeQuery();
            List<ResultSetMergerInput> resultSetMergerInputs = new ArrayList<>(resultSets.size());
            List<QueryResult> queryResults = new ArrayList<>(resultSets.size());
            for (ResultSet each : resultSets) {
                resultSetMergerInputs.add(new JDBCResultSetMergerInput(each));
                queryResults.add(new JDBCQueryResult(each));
            }
            MergeEngine mergeEngine;
            if (routeResult.getSqlStatement() instanceof SelectStatement) {
                mergeEngine = new DQLMergeEngine(resultSetMergerInputs, (SelectStatement) routeResult.getSqlStatement());
                mergeEngine = new DQLMergeEngine(queryResults, (SelectStatement) routeResult.getSqlStatement());
            } else if (routeResult.getSqlStatement() instanceof DALStatement) {
                mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSetMergerInputs, (DALStatement) routeResult.getSqlStatement());
                mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), queryResults, (DALStatement) routeResult.getSqlStatement());
            } else {
                throw new UnsupportedOperationException(String.format("Cannot support type '%s'", routeResult.getSqlStatement().getType()));
            }
@@ -288,17 +288,17 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
            return currentResultSet;
        }
        List<ResultSet> resultSets = new ArrayList<>(routedStatements.size());
        List<ResultSetMergerInput> resultSetMergerInputs = new ArrayList<>(routedStatements.size());
        List<QueryResult> queryResults = new ArrayList<>(routedStatements.size());
        for (PreparedStatement each : routedStatements) {
            ResultSet resultSet = each.getResultSet();
            resultSets.add(resultSet);
            resultSetMergerInputs.add(new JDBCResultSetMergerInput(resultSet));
            queryResults.add(new JDBCQueryResult(resultSet));
        }
        MergeEngine mergeEngine = null;
        if (routeResult.getSqlStatement() instanceof SelectStatement) {
            mergeEngine = new DQLMergeEngine(resultSetMergerInputs, (SelectStatement) routeResult.getSqlStatement());
            mergeEngine = new DQLMergeEngine(queryResults, (SelectStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof DALStatement) {
            mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSetMergerInputs, (DALStatement) routeResult.getSqlStatement());
            mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), queryResults, (DALStatement) routeResult.getSqlStatement());
        }
        if (null != mergeEngine) {
            currentResultSet = new ShardingResultSet(resultSets, mergeEngine.merge(), this);
+11 −11
Original line number Diff line number Diff line
@@ -29,8 +29,8 @@ import io.shardingjdbc.core.jdbc.core.resultset.ShardingResultSet;
import io.shardingjdbc.core.merger.DALMergeEngine;
import io.shardingjdbc.core.merger.DQLMergeEngine;
import io.shardingjdbc.core.merger.MergeEngine;
import io.shardingjdbc.core.merger.ResultSetMergerInput;
import io.shardingjdbc.core.merger.jdbc.JDBCResultSetMergerInput;
import io.shardingjdbc.core.merger.QueryResult;
import io.shardingjdbc.core.merger.jdbc.JDBCQueryResult;
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
@@ -102,15 +102,15 @@ public class ShardingStatement extends AbstractStatementAdapter {
        ResultSet result;
        try {
            List<ResultSet> resultSets = generateExecutor(sql).executeQuery();
            List<ResultSetMergerInput> resultSetMergerInputs = new ArrayList<>(resultSets.size());
            List<QueryResult> queryResults = new ArrayList<>(resultSets.size());
            for (ResultSet each : resultSets) {
                resultSetMergerInputs.add(new JDBCResultSetMergerInput(each));
                queryResults.add(new JDBCQueryResult(each));
            }
            MergeEngine mergeEngine;
            if (routeResult.getSqlStatement() instanceof SelectStatement) {
                mergeEngine = new DQLMergeEngine(resultSetMergerInputs, (SelectStatement) routeResult.getSqlStatement());
                mergeEngine = new DQLMergeEngine(queryResults, (SelectStatement) routeResult.getSqlStatement());
            } else if (routeResult.getSqlStatement() instanceof DALStatement) {
                mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSetMergerInputs, (DALStatement) routeResult.getSqlStatement());
                mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), queryResults, (DALStatement) routeResult.getSqlStatement());
            } else {
                throw new UnsupportedOperationException(String.format("Cannot support type '%s'", routeResult.getSqlStatement().getType()));
            }
@@ -263,17 +263,17 @@ public class ShardingStatement extends AbstractStatementAdapter {
            return currentResultSet;
        }
        List<ResultSet> resultSets = new ArrayList<>(routedStatements.size());
        List<ResultSetMergerInput> resultSetMergerInputs = new ArrayList<>(routedStatements.size());
        List<QueryResult> queryResults = new ArrayList<>(routedStatements.size());
        for (Statement each : routedStatements) {
            ResultSet resultSet = each.getResultSet();
            resultSets.add(resultSet);
            resultSetMergerInputs.add(new JDBCResultSetMergerInput(resultSet));
            queryResults.add(new JDBCQueryResult(resultSet));
        }
        MergeEngine mergeEngine = null;
        if (routeResult.getSqlStatement() instanceof SelectStatement) {
            mergeEngine = new DQLMergeEngine(resultSetMergerInputs, (SelectStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof DALStatement && !resultSetMergerInputs.isEmpty()) {
            mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), resultSetMergerInputs, (DALStatement) routeResult.getSqlStatement());
            mergeEngine = new DQLMergeEngine(queryResults, (SelectStatement) routeResult.getSqlStatement());
        } else if (routeResult.getSqlStatement() instanceof DALStatement && !queryResults.isEmpty()) {
            mergeEngine = new DALMergeEngine(connection.getShardingContext().getShardingRule(), queryResults, (DALStatement) routeResult.getSqlStatement());
        }
        if (null != mergeEngine) {
            currentResultSet = new ShardingResultSet(resultSets, mergeEngine.merge(), this);
+4 −4
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ public final class DALMergeEngine implements MergeEngine {
    
    private final ShardingRule shardingRule;
    
    private final List<ResultSetMergerInput> resultSetMergerInputs;
    private final List<QueryResult> queryResults;
    
    private final DALStatement dalStatement;
    
@@ -51,11 +51,11 @@ public final class DALMergeEngine implements MergeEngine {
            return new ShowDatabasesResultSetMerger();
        }
        if (dalStatement instanceof ShowTablesStatement) {
            return new ShowTablesResultSetMerger(shardingRule, resultSetMergerInputs);
            return new ShowTablesResultSetMerger(shardingRule, queryResults);
        }
        if (dalStatement instanceof ShowCreateTableStatement) {
            return new ShowCreateTableResultSetMerger(shardingRule, resultSetMergerInputs);
            return new ShowCreateTableResultSetMerger(shardingRule, queryResults);
        }
        return new ShowOtherResultSetMerger(resultSetMergerInputs.get(0));
        return new ShowOtherResultSetMerger(queryResults.get(0));
    }
}
+11 −11
Original line number Diff line number Diff line
@@ -41,22 +41,22 @@ import java.util.TreeMap;
 */
public final class DQLMergeEngine implements MergeEngine {
    
    private final List<ResultSetMergerInput> resultSetMergerInputs;
    private final List<QueryResult> queryResults;
    
    private final SelectStatement selectStatement;
    
    private final Map<String, Integer> columnLabelIndexMap;
    
    public DQLMergeEngine(final List<ResultSetMergerInput> resultSetMergerInputs, final SelectStatement selectStatement) throws SQLException {
        this.resultSetMergerInputs = resultSetMergerInputs;
    public DQLMergeEngine(final List<QueryResult> queryResults, final SelectStatement selectStatement) throws SQLException {
        this.queryResults = queryResults;
        this.selectStatement = selectStatement;
        columnLabelIndexMap = getColumnLabelIndexMap(resultSetMergerInputs.get(0));
        columnLabelIndexMap = getColumnLabelIndexMap(queryResults.get(0));
    }
    
    private Map<String, Integer> getColumnLabelIndexMap(final ResultSetMergerInput resultSetMergerInput) throws SQLException {
    private Map<String, Integer> getColumnLabelIndexMap(final QueryResult queryResult) throws SQLException {
        Map<String, Integer> result = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
        for (int i = 1; i <= resultSetMergerInput.getColumnCount(); i++) {
            result.put(SQLUtil.getExactlyValue(resultSetMergerInput.getColumnLabel(i)), i);
        for (int i = 1; i <= queryResult.getColumnCount(); i++) {
            result.put(SQLUtil.getExactlyValue(queryResult.getColumnLabel(i)), i);
        }
        return result;
    }
@@ -70,15 +70,15 @@ public final class DQLMergeEngine implements MergeEngine {
    private ResultSetMerger build() throws SQLException {
        if (!selectStatement.getGroupByItems().isEmpty() || !selectStatement.getAggregationSelectItems().isEmpty()) {
            if (selectStatement.isSameGroupByAndOrderByItems()) {
                return new GroupByStreamResultSetMerger(columnLabelIndexMap, resultSetMergerInputs, selectStatement);
                return new GroupByStreamResultSetMerger(columnLabelIndexMap, queryResults, selectStatement);
            } else {
                return new GroupByMemoryResultSetMerger(columnLabelIndexMap, resultSetMergerInputs, selectStatement);
                return new GroupByMemoryResultSetMerger(columnLabelIndexMap, queryResults, selectStatement);
            }
        }
        if (!selectStatement.getOrderByItems().isEmpty()) {
            return new OrderByStreamResultSetMerger(resultSetMergerInputs, selectStatement.getOrderByItems());
            return new OrderByStreamResultSetMerger(queryResults, selectStatement.getOrderByItems());
        }
        return new IteratorStreamResultSetMerger(resultSetMergerInputs);
        return new IteratorStreamResultSetMerger(queryResults);
    }
    
    private ResultSetMerger decorate(final ResultSetMerger resultSetMerger) throws SQLException {
Loading