提交 f0f01963 编写于 作者: T terrymanu

refactor merger into ShardingResultSet 17th version, refactor OrderByValue

上级 15a9b000
......@@ -49,7 +49,7 @@ public class OrderByStreamResultSetMerger extends AbstractStreamResultSetMerger
private void orderResultSetsToQueue(final Collection<ResultSet> resultSets) throws SQLException {
for (ResultSet each : resultSets) {
OrderByValue orderByValue = new OrderByValue(each, orderByItems);
if (orderByValue.next(false)) {
if (orderByValue.next()) {
orderByValuesQueue.offer(orderByValue);
}
}
......@@ -63,16 +63,14 @@ public class OrderByStreamResultSetMerger extends AbstractStreamResultSetMerger
if (orderByValuesQueue.isEmpty()) {
return false;
}
OrderByValue firstResultSet = orderByValuesQueue.poll();
setCurrentResultSet(firstResultSet.getResultSet());
if (firstResultSet.next(isFirstNext)) {
orderByValuesQueue.offer(firstResultSet);
if (isFirstNext) {
isFirstNext = false;
return true;
}
OrderByValue firstOrderByValue = orderByValuesQueue.poll();
if (firstOrderByValue.next()) {
orderByValuesQueue.offer(firstOrderByValue);
}
isFirstNext = false;
return hasNext();
}
private boolean hasNext() {
if (orderByValuesQueue.isEmpty()) {
return false;
}
......
......@@ -47,12 +47,11 @@ public final class OrderByValue implements Comparable<OrderByValue> {
/**
* 遍历下一个结果集游标.
*
* @param isFirstNext 是否第一次调用
* @return 是否有下一个结果集
* @throws SQLException SQL异常
*/
public boolean next(final boolean isFirstNext) throws SQLException {
boolean result = isFirstNext || resultSet.next();
public boolean next() throws SQLException {
boolean result = resultSet.next();
orderValues = result ? getOrderValues() : Collections.<Comparable<?>>emptyList();
return result;
}
......
......@@ -39,10 +39,10 @@ public final class OrderByValueTest {
public void assertCompareToForAsc() throws SQLException {
OrderByValue orderByValue1 = new OrderByValue(
createResultSet("order_1", "order_2", "other_1"), Arrays.asList(new OrderItem(1, OrderType.ASC), new OrderItem(2, OrderType.ASC)));
orderByValue1.next(false);
orderByValue1.next();
OrderByValue orderByValue2 = new OrderByValue(
createResultSet("order_3", "order_4", "other_2"), Arrays.asList(new OrderItem(1, OrderType.ASC), new OrderItem(2, OrderType.ASC)));
orderByValue2.next(false);
orderByValue2.next();
assertTrue(orderByValue1.compareTo(orderByValue2) < 0);
}
......@@ -50,10 +50,10 @@ public final class OrderByValueTest {
public void assertCompareToForDesc() throws SQLException {
OrderByValue orderByValue1 = new OrderByValue(
createResultSet("order_1", "order_2", "other_1"), Arrays.asList(new OrderItem(1, OrderType.DESC), new OrderItem(2, OrderType.DESC)));
orderByValue1.next(false);
orderByValue1.next();
OrderByValue orderByValue2 = new OrderByValue(
createResultSet("order_3", "order_4", "other_2"), Arrays.asList(new OrderItem(1, OrderType.DESC), new OrderItem(2, OrderType.DESC)));
orderByValue2.next(false);
orderByValue2.next();
assertTrue(orderByValue1.compareTo(orderByValue2) > 0);
}
......@@ -61,7 +61,7 @@ public final class OrderByValueTest {
public void assertCompareToWhenEqual() throws SQLException {
OrderByValue orderByValue = new OrderByValue(
createResultSet("order_1", "order_2", "other"), Arrays.asList(new OrderItem(1, OrderType.DESC), new OrderItem(2, OrderType.DESC)));
orderByValue.next(false);
orderByValue.next();
assertThat(orderByValue.compareTo(orderByValue), is(0));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册