提交 d5176d1a 编写于 作者: T terrymanu

for #2441, refactor limit's constructor

上级 f57ab04c
......@@ -90,13 +90,14 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildIteratorStreamMergedResultWithLimit() throws SQLException {
routeResult.setLimit(new Limit(null, null));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, singleQueryResult);
assertThat(mergeEngine.merge(), instanceOf(IteratorStreamMergedResult.class));
}
@Test
public void assertBuildIteratorStreamMergedResultWithMySQLLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertThat(actual, instanceOf(LimitDecoratorMergedResult.class));
......@@ -105,7 +106,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildIteratorStreamMergedResultWithOracleLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class));
......@@ -114,7 +115,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildIteratorStreamMergedResultWithSQLServerLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertThat(actual, instanceOf(TopAndRowNumberDecoratorMergedResult.class));
......@@ -130,7 +131,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildOrderByStreamMergedResultWithMySQLLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......@@ -140,7 +141,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildOrderByStreamMergedResultWithOracleLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......@@ -150,7 +151,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildOrderByStreamMergedResultWithSQLServerLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......@@ -168,7 +169,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByStreamMergedResultWithMySQLLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
......@@ -179,7 +180,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByStreamMergedResultWithOracleLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
......@@ -190,7 +191,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByStreamMergedResultWithSQLServerLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
......@@ -208,7 +209,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByMemoryMergedResultWithMySQLLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......@@ -218,7 +219,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByMemoryMergedResultWithOracleLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getOrderByItems().add(new IndexOrderByItemSegment(0, 0, 2, OrderDirection.DESC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
......@@ -229,7 +230,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByMemoryMergedResultWithSQLServerLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getGroupByItems().add(new IndexOrderByItemSegment(0, 0, 1, OrderDirection.ASC, OrderDirection.ASC));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
......@@ -247,7 +248,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithMySQLLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.<String>absent()));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......@@ -257,7 +258,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithOracleLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.<String>absent()));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......@@ -267,7 +268,7 @@ public final class DQLMergeEngineTest {
@Test
public void assertBuildGroupByMemoryMergedResultWithAggregationOnlyWithSQLServerLimit() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.<String>absent()));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
......
......@@ -65,14 +65,12 @@ public final class LimitDecoratorMergedResultTest {
}
SelectStatement selectStatement = new SelectStatement();
routeResult = new SQLRouteResult(selectStatement);
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
}
@Test
public void assertNextForSkipAll() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(Integer.MAX_VALUE, -1, new NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE, true)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(Integer.MAX_VALUE, -1, new NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE, true)), null));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertFalse(actual.next());
......@@ -80,9 +78,7 @@ public final class LimitDecoratorMergedResultTest {
@Test
public void assertNextWithoutRowCount() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), null));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
for (int i = 0; i < 6; i++) {
......@@ -93,10 +89,7 @@ public final class LimitDecoratorMergedResultTest {
@Test
public void assertNextWithRowCount() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
limit.setRowCount(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, false)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, false))));
mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertTrue(actual.next());
......
......@@ -71,9 +71,7 @@ public final class RowNumberDecoratorMergedResultTest {
@Test
public void assertNextForSkipAll() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(Integer.MAX_VALUE, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(Integer.MAX_VALUE, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), null));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertFalse(actual.next());
......@@ -81,7 +79,7 @@ public final class RowNumberDecoratorMergedResultTest {
@Test
public void assertNextWithoutOffsetWithoutRowCount() throws SQLException {
routeResult.setLimit(new Limit());
routeResult.setLimit(new Limit(null, null));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
for (int i = 0; i < 8; i++) {
......@@ -92,10 +90,7 @@ public final class RowNumberDecoratorMergedResultTest {
@Test
public void assertNextForRowCountBoundOpenedFalse() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
limit.setRowCount(new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, false)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, false))));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertTrue(actual.next());
......@@ -105,10 +100,7 @@ public final class RowNumberDecoratorMergedResultTest {
@Test
public void assertNextForRowCountBoundOpenedTrue() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
limit.setRowCount(new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, true)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, true))));
mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertTrue(actual.next());
......
......@@ -71,9 +71,7 @@ public final class TopAndRowNumberDecoratorMergedResultTest {
@Test
public void assertNextForSkipAll() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(Integer.MAX_VALUE, -1, new NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE, true)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(Integer.MAX_VALUE, -1, new NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE, true)), null));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertFalse(actual.next());
......@@ -81,9 +79,7 @@ public final class TopAndRowNumberDecoratorMergedResultTest {
@Test
public void assertNextWithoutOffsetWithRowCount() throws SQLException {
Limit limit = new Limit();
limit.setRowCount(new LimitValue(5, -1, new NumberLiteralLimitValueSegment(0, 0, 2, false)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(null, new LimitValue(5, -1, new NumberLiteralLimitValueSegment(0, 0, 2, false))));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
for (int i = 0; i < 5; i++) {
......@@ -94,9 +90,7 @@ public final class TopAndRowNumberDecoratorMergedResultTest {
@Test
public void assertNextWithOffsetWithoutRowCount() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), null));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
for (int i = 0; i < 7; i++) {
......@@ -107,10 +101,7 @@ public final class TopAndRowNumberDecoratorMergedResultTest {
@Test
public void assertNextWithOffsetBoundOpenedFalse() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, false)));
limit.setRowCount(new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, false)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, false)), new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, false))));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertTrue(actual.next());
......@@ -120,10 +111,7 @@ public final class TopAndRowNumberDecoratorMergedResultTest {
@Test
public void assertNextWithOffsetBoundOpenedTrue() throws SQLException {
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)));
limit.setRowCount(new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, false)));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, new NumberLiteralLimitValueSegment(0, 0, 2, true)), new LimitValue(4, -1, new NumberLiteralLimitValueSegment(0, 0, 4, false))));
mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults);
MergedResult actual = mergeEngine.merge();
assertTrue(actual.next());
......
......@@ -344,10 +344,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment));
selectStatement.addSQLToken(new TableToken(17, 23, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(2, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(2, -1, rowCountSQLSegment)));
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.MySQL, Collections.emptyList());
......@@ -361,10 +358,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment));
selectStatement.addSQLToken(new TableToken(68, 74, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.Oracle, Collections.emptyList());
......@@ -379,10 +373,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment));
selectStatement.addSQLToken(new TableToken(85, 91, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.SQLServer, Collections.emptyList());
......@@ -401,10 +392,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.addSQLToken(new TableToken(17, 23, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.MySQL, Collections.emptyList());
......@@ -422,10 +410,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.getOrderByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.ASC, OrderDirection.ASC));
selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT * FROM (SELECT row_.*, rownum rownum_ FROM (SELECT x.id FROM table_x x) row_ WHERE rownum<=4) t WHERE t.rownum_>2");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.Oracle, Collections.emptyList());
......@@ -444,10 +429,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.getOrderByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.ASC, OrderDirection.ASC));
selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT * FROM (SELECT TOP(4) row_number() OVER (ORDER BY x.id) AS rownum_, x.id FROM table_x x) AS row_ WHERE row_.rownum_>2");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.SQLServer, Collections.emptyList());
......@@ -462,10 +444,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment));
selectStatement.addSQLToken(new TableToken(17, 23, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
RoutingResult routingResult = new RoutingResult();
routingResult.getRoutingUnits().add(new RoutingUnit("ds"));
routeResult.setRoutingResult(routingResult);
......@@ -481,10 +460,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment));
selectStatement.addSQLToken(new TableToken(68, 74, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
RoutingResult routingResult = new RoutingResult();
routingResult.getRoutingUnits().add(new RoutingUnit("ds"));
routeResult.setRoutingResult(routingResult);
......@@ -501,10 +477,7 @@ public final class ShardingSQLRewriterTest {
selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment));
selectStatement.addSQLToken(new TableToken(85, 91, "table_x", QuoteCharacter.NONE));
routeResult = new SQLRouteResult(selectStatement);
Limit limit = new Limit();
limit.setOffset(new LimitValue(2, -1, offsetSQLSegment));
limit.setRowCount(new LimitValue(4, -1, rowCountSQLSegment));
routeResult.setLimit(limit);
routeResult.setLimit(new Limit(new LimitValue(2, -1, offsetSQLSegment), new LimitValue(4, -1, rowCountSQLSegment)));
RoutingResult routingResult = new RoutingResult();
routingResult.getRoutingUnits().add(new RoutingUnit("ds"));
routeResult.setRoutingResult(routingResult);
......
......@@ -18,7 +18,6 @@
package org.apache.shardingsphere.core.route.limit;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.apache.shardingsphere.core.parse.exception.SQLParsingException;
import org.apache.shardingsphere.core.util.NumberUtil;
......@@ -35,7 +34,6 @@ import java.util.Map;
* @author zhangyonglun
*/
@Getter
@Setter
@ToString
public final class Limit {
......@@ -43,6 +41,11 @@ public final class Limit {
private LimitValue rowCount;
public Limit(final LimitValue offset, final LimitValue rowCount) {
this.offset = offset;
this.rowCount = rowCount;
}
/**
* Get offset value.
*
......
......@@ -196,14 +196,15 @@ public final class ParsingSQLRouter implements ShardingRouter {
}
private Limit createLimit(final LimitSegment limitSegment) {
Limit result = new Limit();
LimitValue offset = null;
if (limitSegment.getOffset().isPresent()) {
result.setOffset(createLimitValue(limitSegment.getOffset().get()));
offset = createLimitValue(limitSegment.getOffset().get());
}
LimitValue rowCount = null;
if (limitSegment.getRowCount().isPresent()) {
result.setRowCount(createLimitValue(limitSegment.getRowCount().get()));
rowCount = createLimitValue(limitSegment.getRowCount().get());
}
return result;
return new Limit(offset, rowCount);
}
private LimitValue createLimitValue(final LimitValueSegment limitValueSegment) {
......
<?xml version="1.0"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.shardingsphere" level="info" additivity="false">
<appender-ref ref="console"/>
</logger>
<logger name="org.apache.shardingsphere.core.execute.sql.execute.threadlocal.ExecutorExceptionHandler" level="off" />
<root>
<level value="error" />
<appender-ref ref="console" />
</root>
</configuration>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册