提交 9250e29f 编写于 作者: T terrymanu

remove databaseType for MergeEngine

上级 056d9419
......@@ -86,8 +86,7 @@ public final class ShardingPreparedStatement extends AbstractPreparedStatementAd
Collection<PreparedStatementUnit> preparedStatementUnits = route();
List<ResultSet> resultSets = new PreparedStatementExecutor(
getShardingConnection().getShardingContext().getExecutorEngine(), getRouteResult().getSqlStatement().getType(), preparedStatementUnits, getParameters()).executeQuery();
result = new ShardingResultSet(resultSets, new MergeEngine(
getShardingConnection().getShardingContext().getDatabaseType(), resultSets, (SelectStatement) getRouteResult().getSqlStatement()).merge());
result = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) getRouteResult().getSqlStatement()).merge());
} finally {
clearBatch();
}
......
......@@ -107,7 +107,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
try {
List<ResultSet> resultSets = generateExecutor(sql).executeQuery();
result = new ShardingResultSet(
resultSets, new MergeEngine(shardingConnection.getShardingContext().getDatabaseType(), resultSets, (SelectStatement) getRouteResult().getSqlStatement()).merge());
resultSets, new MergeEngine(resultSets, (SelectStatement) getRouteResult().getSqlStatement()).merge());
} finally {
setCurrentResultSet(null);
}
......@@ -262,8 +262,7 @@ public class ShardingStatement extends AbstractStatementAdapter {
for (Statement each : routedStatements) {
resultSets.add(each.getResultSet());
}
currentResultSet = new ShardingResultSet(resultSets, new MergeEngine(
shardingConnection.getShardingContext().getDatabaseType(), resultSets, (SelectStatement) getRouteResult().getSqlStatement()).merge());
currentResultSet = new ShardingResultSet(resultSets, new MergeEngine(resultSets, (SelectStatement) getRouteResult().getSqlStatement()).merge());
return currentResultSet;
}
}
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.merger;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.merger.groupby.GroupByMemoryResultSetMerger;
import com.dangdang.ddframe.rdb.sharding.merger.groupby.GroupByStreamResultSetMerger;
import com.dangdang.ddframe.rdb.sharding.merger.iterator.IteratorStreamResultSetMerger;
......@@ -40,16 +39,13 @@ import java.util.TreeMap;
*/
public final class MergeEngine {
private final DatabaseType databaseType;
private final List<ResultSet> resultSets;
private final SelectStatement selectStatement;
private final Map<String, Integer> columnLabelIndexMap;
public MergeEngine(final DatabaseType databaseType, final List<ResultSet> resultSets, final SelectStatement selectStatement) throws SQLException {
this.databaseType = databaseType;
public MergeEngine(final List<ResultSet> resultSets, final SelectStatement selectStatement) throws SQLException {
this.resultSets = resultSets;
this.selectStatement = selectStatement;
columnLabelIndexMap = getColumnLabelIndexMap(resultSets.get(0));
......
......@@ -18,7 +18,6 @@
package com.dangdang.ddframe.rdb.sharding.merger;
import com.dangdang.ddframe.rdb.sharding.constant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.constant.OrderType;
import com.dangdang.ddframe.rdb.sharding.merger.groupby.GroupByMemoryResultSetMerger;
import com.dangdang.ddframe.rdb.sharding.merger.groupby.GroupByStreamResultSetMerger;
......@@ -66,14 +65,14 @@ public final class MergeEngineTest {
@Test
public void assertBuildIteratorStreamResultSetMerger() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
assertThat(mergeEngine.merge(), instanceOf(IteratorStreamResultSetMerger.class));
}
@Test
public void assertBuildIteratorStreamResultSetMergerWithLimit() throws SQLException {
selectStatement.setLimit(new Limit(true));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertThat(actual, instanceOf(LimitDecoratorResultSetMerger.class));
assertThat(((LimitDecoratorResultSetMerger) actual).getResultSetMerger(), instanceOf(IteratorStreamResultSetMerger.class));
......@@ -82,7 +81,7 @@ public final class MergeEngineTest {
@Test
public void assertBuildOrderByStreamResultSetMerger() throws SQLException {
selectStatement.getOrderByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
assertThat(mergeEngine.merge(), instanceOf(OrderByStreamResultSetMerger.class));
}
......@@ -90,7 +89,7 @@ public final class MergeEngineTest {
public void assertBuildOrderByStreamResultSetMergerWithLimit() throws SQLException {
selectStatement.setLimit(new Limit(true));
selectStatement.getOrderByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertThat(actual, instanceOf(LimitDecoratorResultSetMerger.class));
assertThat(((LimitDecoratorResultSetMerger) actual).getResultSetMerger(), instanceOf(OrderByStreamResultSetMerger.class));
......@@ -100,7 +99,7 @@ public final class MergeEngineTest {
public void assertBuildGroupByStreamResultSetMerger() throws SQLException {
selectStatement.getGroupByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
selectStatement.getOrderByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
assertThat(mergeEngine.merge(), instanceOf(GroupByStreamResultSetMerger.class));
}
......@@ -109,7 +108,7 @@ public final class MergeEngineTest {
selectStatement.setLimit(new Limit(true));
selectStatement.getGroupByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
selectStatement.getOrderByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertThat(actual, instanceOf(LimitDecoratorResultSetMerger.class));
assertThat(((LimitDecoratorResultSetMerger) actual).getResultSetMerger(), instanceOf(GroupByStreamResultSetMerger.class));
......@@ -118,7 +117,7 @@ public final class MergeEngineTest {
@Test
public void assertBuildGroupByMemoryResultSetMerger() throws SQLException {
selectStatement.getGroupByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
assertThat(mergeEngine.merge(), instanceOf(GroupByMemoryResultSetMerger.class));
}
......@@ -126,7 +125,7 @@ public final class MergeEngineTest {
public void assertBuildGroupByMemoryResultSetMergerWithLimit() throws SQLException {
selectStatement.setLimit(new Limit(true));
selectStatement.getGroupByItems().add(new OrderItem(1, OrderType.DESC, OrderType.ASC));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertThat(actual, instanceOf(LimitDecoratorResultSetMerger.class));
assertThat(((LimitDecoratorResultSetMerger) actual).getResultSetMerger(), instanceOf(GroupByMemoryResultSetMerger.class));
......@@ -135,7 +134,7 @@ public final class MergeEngineTest {
@Test
public void assertBuildGroupByMemoryResultSetMergerWithAggregationOnly() throws SQLException {
selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.<String>absent()));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
assertThat(mergeEngine.merge(), instanceOf(GroupByMemoryResultSetMerger.class));
}
......@@ -143,7 +142,7 @@ public final class MergeEngineTest {
public void assertBuildGroupByMemoryResultSetMergerWithAggregationOnlyWithLimit() throws SQLException {
selectStatement.setLimit(new Limit(true));
selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.<String>absent()));
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertThat(actual, instanceOf(LimitDecoratorResultSetMerger.class));
assertThat(((LimitDecoratorResultSetMerger) actual).getResultSetMerger(), instanceOf(GroupByMemoryResultSetMerger.class));
......
......@@ -18,7 +18,6 @@
package com.dangdang.ddframe.rdb.sharding.merger.groupby;
import com.dangdang.ddframe.rdb.sharding.constant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.constant.OrderType;
import com.dangdang.ddframe.rdb.sharding.merger.MergeEngine;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetMerger;
......@@ -86,14 +85,14 @@ public final class GroupByMemoryResultSetMergerTest {
@Test
public void assertNextForResultSetsAllEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertFalse(actual.next());
}
@Test
public void assertNextForSomeResultSetsEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
when(resultSets.get(0).next()).thenReturn(true, false);
when(resultSets.get(0).getObject(1)).thenReturn(20);
when(resultSets.get(0).getObject(2)).thenReturn(0);
......
......@@ -18,7 +18,6 @@
package com.dangdang.ddframe.rdb.sharding.merger.groupby;
import com.dangdang.ddframe.rdb.sharding.constant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.constant.OrderType;
import com.dangdang.ddframe.rdb.sharding.merger.MergeEngine;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetMerger;
......@@ -89,14 +88,14 @@ public final class GroupByStreamResultSetMergerTest {
@Test
public void assertNextForResultSetsAllEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertFalse(actual.next());
}
@Test
public void assertNextForSomeResultSetsEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
when(resultSets.get(0).next()).thenReturn(true, false);
when(resultSets.get(0).getObject(1)).thenReturn(20);
when(resultSets.get(0).getObject(2)).thenReturn(0);
......@@ -138,7 +137,7 @@ public final class GroupByStreamResultSetMergerTest {
@Test
public void assertNextForMix() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
when(resultSets.get(0).next()).thenReturn(true, false);
when(resultSets.get(0).getObject(1)).thenReturn(20);
when(resultSets.get(0).getObject(2)).thenReturn(0);
......
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.merger.iterator;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.merger.MergeEngine;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetMerger;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.SelectStatement;
......@@ -54,7 +53,7 @@ public final class IteratorStreamResultSetMergerTest {
@Test
public void assertNextForResultSetsAllEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertFalse(actual.next());
}
......@@ -64,7 +63,7 @@ public final class IteratorStreamResultSetMergerTest {
for (ResultSet each : resultSets) {
when(each.next()).thenReturn(true, false);
}
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertTrue(actual.next());
......@@ -75,7 +74,7 @@ public final class IteratorStreamResultSetMergerTest {
@Test
public void assertNextForFirstResultSetsNotEmptyOnly() throws SQLException {
when(resultSets.get(0).next()).thenReturn(true, false);
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertFalse(actual.next());
......@@ -84,7 +83,7 @@ public final class IteratorStreamResultSetMergerTest {
@Test
public void assertNextForMiddleResultSetsNotEmpty() throws SQLException {
when(resultSets.get(1).next()).thenReturn(true, false);
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertFalse(actual.next());
......@@ -93,7 +92,7 @@ public final class IteratorStreamResultSetMergerTest {
@Test
public void assertNextForLastResultSetsNotEmptyOnly() throws SQLException {
when(resultSets.get(2).next()).thenReturn(true, false);
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertFalse(actual.next());
......@@ -107,7 +106,7 @@ public final class IteratorStreamResultSetMergerTest {
when(resultSets.get(1).next()).thenReturn(true, false);
when(resultSets.get(3).next()).thenReturn(true, false);
when(resultSets.get(5).next()).thenReturn(true, false);
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertTrue(actual.next());
......
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.merger.limit;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.merger.MergeEngine;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetMerger;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.Limit;
......@@ -62,7 +61,7 @@ public final class LimitDecoratorResultSetMergerTest {
for (ResultSet each : resultSets) {
when(each.next()).thenReturn(true, true, false);
}
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertFalse(actual.next());
}
......@@ -75,7 +74,7 @@ public final class LimitDecoratorResultSetMergerTest {
for (ResultSet each : resultSets) {
when(each.next()).thenReturn(true, true, false);
}
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertTrue(actual.next());
......@@ -95,7 +94,7 @@ public final class LimitDecoratorResultSetMergerTest {
for (ResultSet each : resultSets) {
when(each.next()).thenReturn(true, true, false);
}
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertTrue(actual.next());
......@@ -111,7 +110,7 @@ public final class LimitDecoratorResultSetMergerTest {
for (ResultSet each : resultSets) {
when(each.next()).thenReturn(true, true, false);
}
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertTrue(actual.next());
assertTrue(actual.next());
......
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.merger.orderby;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.constant.OrderType;
import com.dangdang.ddframe.rdb.sharding.merger.MergeEngine;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetMerger;
......@@ -59,14 +58,14 @@ public final class OrderByStreamResultSetMergerTest {
@Test
public void assertNextForResultSetsAllEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
ResultSetMerger actual = mergeEngine.merge();
assertFalse(actual.next());
}
@Test
public void assertNextForSomeResultSetsEmpty() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
when(resultSets.get(0).next()).thenReturn(true, false);
when(resultSets.get(0).getObject(1)).thenReturn("2");
when(resultSets.get(2).next()).thenReturn(true, true, false);
......@@ -83,7 +82,7 @@ public final class OrderByStreamResultSetMergerTest {
@Test
public void assertNextForMix() throws SQLException {
mergeEngine = new MergeEngine(DatabaseType.MySQL, resultSets, selectStatement);
mergeEngine = new MergeEngine(resultSets, selectStatement);
when(resultSets.get(0).next()).thenReturn(true, false);
when(resultSets.get(0).getObject(1)).thenReturn("2");
when(resultSets.get(1).next()).thenReturn(true, true, true, false);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册