Commit 94cf835b authored by terrymanu's avatar terrymanu
Browse files

fix #491

parent 099b4dbc
Loading
Loading
Loading
Loading
+15 −17
Original line number Diff line number Diff line
@@ -17,8 +17,8 @@

package io.shardingjdbc.core.jdbc.adapter;

import io.shardingjdbc.core.jdbc.unsupported.AbstractUnsupportedOperationResultSet;
import com.google.common.base.Preconditions;
import io.shardingjdbc.core.jdbc.unsupported.AbstractUnsupportedOperationResultSet;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

@@ -42,27 +42,25 @@ public abstract class AbstractResultSetAdapter extends AbstractUnsupportedOperat
    @Getter
    private final List<ResultSet> resultSets;
    
    @Getter
    private final Statement statement;
    
    private boolean closed;
    
    public AbstractResultSetAdapter(final List<ResultSet> resultSets) {
    public AbstractResultSetAdapter(final List<ResultSet> resultSets, final Statement statement) {
        Preconditions.checkArgument(!resultSets.isEmpty());
        this.resultSets = resultSets;
    }
    
    @Override
    // TODO should return sharding statement in future
    public final Statement getStatement() throws SQLException {
        return getResultSets().get(0).getStatement();
        this.statement = statement;
    }
    
    @Override
    public final ResultSetMetaData getMetaData() throws SQLException {
        return getResultSets().get(0).getMetaData();
        return resultSets.get(0).getMetaData();
    }
    
    @Override
    public int findColumn(final String columnLabel) throws SQLException {
        return getResultSets().get(0).findColumn(columnLabel);
        return resultSets.get(0).findColumn(columnLabel);
    }
    
    @Override
@@ -99,7 +97,7 @@ public abstract class AbstractResultSetAdapter extends AbstractUnsupportedOperat
    
    @Override
    public final int getFetchDirection() throws SQLException {
        return getResultSets().get(0).getFetchDirection();
        return resultSets.get(0).getFetchDirection();
    }
    
    @Override
@@ -117,28 +115,28 @@ public abstract class AbstractResultSetAdapter extends AbstractUnsupportedOperat
    
    @Override
    public final int getFetchSize() throws SQLException {
        return getResultSets().get(0).getFetchSize();
        return resultSets.get(0).getFetchSize();
    }
    
    @Override
    public final int getType() throws SQLException {
        return getResultSets().get(0).getType();
        return resultSets.get(0).getType();
    }
    
    @Override
    public final int getConcurrency() throws SQLException {
        return getResultSets().get(0).getConcurrency();
        return resultSets.get(0).getConcurrency();
    }
    
    @Override
    public final SQLWarning getWarnings() throws SQLException {
        return getResultSets().get(0).getWarnings();
        return resultSets.get(0).getWarnings();
    }
    
    @Override
    public final void clearWarnings() throws SQLException {
        Collection<SQLException> exceptions = new LinkedList<>();
        for (ResultSet each : getResultSets()) {
        for (ResultSet each : resultSets) {
            try {
                each.clearWarnings();
            } catch (final SQLException ex) {
+3 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLXML;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
@@ -45,8 +46,8 @@ public final class ShardingResultSet extends AbstractResultSetAdapter {
    
    private final ResultSetMerger mergeResultSet;
    
    public ShardingResultSet(final List<ResultSet> resultSets, final ResultSetMerger mergeResultSet) {
        super(resultSets);
    public ShardingResultSet(final List<ResultSet> resultSets, final ResultSetMerger mergeResultSet, final Statement statement) {
        super(resultSets, statement);
        this.mergeResultSet = mergeResultSet;
    }
    
+2 −2
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
            Collection<PreparedStatementUnit> preparedStatementUnits = route();
            List<ResultSet> resultSets = new PreparedStatementExecutor(
                    getConnection().getShardingContext().getExecutorEngine(), routeResult.getSqlStatement().getType(), preparedStatementUnits, getParameters()).executeQuery();
            result = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge());
            result = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge(), this);
        } finally {
            clearBatch();
        }
@@ -271,7 +271,7 @@ public final class ShardingPreparedStatement extends AbstractShardingPreparedSta
        for (PreparedStatement each : routedStatements) {
            resultSets.add(each.getResultSet());
        }
        currentResultSet = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge());
        currentResultSet = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge(), this);
        return currentResultSet;
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
        try {
            List<ResultSet> resultSets = generateExecutor(sql).executeQuery();
            result = new ShardingResultSet(
                    resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge());
                    resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge(), this);
        } finally {
            currentResultSet = null;
        }
@@ -247,7 +247,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
        for (Statement each : routedStatements) {
            resultSets.add(each.getResultSet());
        }
        currentResultSet = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge());
        currentResultSet = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) routeResult.getSqlStatement()).merge(), this);
        return currentResultSet;
    }
}
+5 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLXML;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
@@ -53,11 +54,14 @@ public final class ShardingResultSetTest {
    @Mock
    private ResultSetMerger mergeResultSet;
    
    @Mock
    private Statement statement;
    
    private ShardingResultSet shardingResultSet;
    
    @Before
    public void setUp() {
        shardingResultSet = new ShardingResultSet(Collections.singletonList(mock(ResultSet.class)), mergeResultSet);
        shardingResultSet = new ShardingResultSet(Collections.singletonList(mock(ResultSet.class)), mergeResultSet, statement);
    }
    
    @Test
Loading