diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java index 0c4541b21ca20bfa0410c77062c8db06b81d2fc2..dac4859f60bda6cac38e7b825f8a87669b737b94 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/DQLMergeEngineTest.java @@ -90,13 +90,14 @@ public final class DQLMergeEngineTest { @Test public void assertBuildIteratorStreamMergedResultWithLimit() throws SQLException { + routeResult.setLimit(new Limit(null, null, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); 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, Collections.emptyList())); selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.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, Collections.emptyList())); selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.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, Collections.emptyList())); selectStatement.getItems().add(new AggregationSelectItem(AggregationType.COUNT, "(*)", Optional.absent())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java index abec519e589a580f47b90a61120f888562016245..390a8ca47702bb382bea50e1c663c9c0a99beeba 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/LimitDecoratorMergedResultTest.java @@ -35,6 +35,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static org.junit.Assert.assertFalse; @@ -65,14 +66,12 @@ public final class LimitDecoratorMergedResultTest { } SelectStatement selectStatement = new SelectStatement(); routeResult = new SQLRouteResult(selectStatement); - routeResult.setLimit(new Limit()); + routeResult.setLimit(new Limit(null, null, Collections.emptyList())); } @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, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertFalse(actual.next()); @@ -80,9 +79,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, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 6; i++) { @@ -93,10 +90,8 @@ 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)), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.MySQL, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java index 7a8ac5ddfc4c9327ed16f75dd29d050513fb6977..049e6220e8a5e2ca1b0ae431916fdcba87120f01 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java @@ -35,6 +35,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static org.junit.Assert.assertFalse; @@ -71,9 +72,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, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertFalse(actual.next()); @@ -81,7 +80,7 @@ public final class RowNumberDecoratorMergedResultTest { @Test public void assertNextWithoutOffsetWithoutRowCount() throws SQLException { - routeResult.setLimit(new Limit()); + routeResult.setLimit(new Limit(null, null, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 8; i++) { @@ -92,10 +91,8 @@ 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)), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); @@ -105,10 +102,8 @@ 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)), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.Oracle, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); diff --git a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java index 57633bab3213caaa8b4d8018b7fc1354e14fe3c1..0fd7d3c6a7193a8a7d88c8bf4d2e700c6a99106e 100644 --- a/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java +++ b/sharding-core/sharding-core-merge/src/test/java/org/apache/shardingsphere/core/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java @@ -35,6 +35,7 @@ import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static org.junit.Assert.assertFalse; @@ -71,9 +72,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, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertFalse(actual.next()); @@ -81,9 +80,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)), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 5; i++) { @@ -94,9 +91,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, Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); for (int i = 0; i < 7; i++) { @@ -107,10 +102,8 @@ 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)), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); @@ -120,10 +113,8 @@ 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)), Collections.emptyList())); mergeEngine = new DQLMergeEngine(DatabaseType.SQLServer, routeResult, queryResults); MergedResult actual = mergeEngine.merge(); assertTrue(actual.next()); diff --git a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java index 1a2de470c30bbf0b67123e2bd8cb513334de60ce..011a1d70c10c2570e6ce540afeda9a31c44224a1 100644 --- a/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java +++ b/sharding-core/sharding-core-rewrite/src/test/java/org/apache/shardingsphere/core/rewrite/rewriter/ShardingSQLRewriterTest.java @@ -353,10 +353,7 @@ public final class ShardingSQLRewriterTest { selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment)); selectStatement.getSqlSegments().add(new TableSegment(17, 23, "table_x")); 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), Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.MySQL, Collections.emptyList()); @@ -370,10 +367,7 @@ public final class ShardingSQLRewriterTest { selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment)); selectStatement.getSqlSegments().add(new TableSegment(68, 74, "table_x")); 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), Collections.emptyList())); 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()); @@ -388,10 +382,7 @@ public final class ShardingSQLRewriterTest { selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment)); selectStatement.getSqlSegments().add(new TableSegment(85, 91, "table_x")); 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), Collections.emptyList())); 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()); @@ -410,10 +401,7 @@ public final class ShardingSQLRewriterTest { selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment, OrderDirection.DESC, OrderDirection.ASC)); selectStatement.getSqlSegments().add(new TableSegment(17, 23, "table_x")); 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), Collections.emptyList())); routeResult.setRoutingResult(new RoutingResult()); selectStatement.setLogicSQL("SELECT x.id FROM table_x x LIMIT 2, 2"); SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(DatabaseType.MySQL, Collections.emptyList()); @@ -431,10 +419,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), Collections.emptyList())); 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()); @@ -453,10 +438,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), Collections.emptyList())); 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()); @@ -471,10 +453,7 @@ public final class ShardingSQLRewriterTest { selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment)); selectStatement.getSqlSegments().add(new TableSegment(17, 23, "table_x")); 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), Collections.emptyList())); RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); @@ -490,10 +469,7 @@ public final class ShardingSQLRewriterTest { selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment)); selectStatement.getSqlSegments().add(new TableSegment(68, 74, "table_x")); 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), Collections.emptyList())); RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); @@ -510,10 +486,7 @@ public final class ShardingSQLRewriterTest { selectStatement.setLimit(new LimitSegment(0, 0, offsetSQLSegment, rowCountSQLSegment)); selectStatement.getSqlSegments().add(new TableSegment(85, 91, "table_x")); 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), Collections.emptyList())); RoutingResult routingResult = new RoutingResult(); routingResult.getRoutingUnits().add(new RoutingUnit("ds")); routeResult.setRoutingResult(routingResult); diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java index b6c4ac14aa8c275c135f45a1e0ec11bb57e5dec9..f58630d50cc49b31dc5c1c754a1c6f1525fe6690 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/limit/Limit.java @@ -18,9 +18,7 @@ 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; import java.util.HashMap; @@ -35,13 +33,23 @@ import java.util.Map; * @author zhangyonglun */ @Getter -@Setter @ToString public final class Limit { - private LimitValue offset; + private final LimitValue offset; - private LimitValue rowCount; + private final LimitValue rowCount; + + public Limit(final LimitValue offset, final LimitValue rowCount, final List parameters) { + if (null != offset) { + offset.setValue(-1 == offset.getIndex() ? getOffsetValue() : NumberUtil.roundHalfUp(parameters.get(offset.getIndex()))); + } + this.offset = offset; + if (null != rowCount) { + rowCount.setValue(-1 == rowCount.getIndex() ? getRowCountValue() : NumberUtil.roundHalfUp(parameters.get(rowCount.getIndex()))); + } + this.rowCount = rowCount; + } /** * Get offset value. @@ -61,27 +69,6 @@ public final class Limit { return null != rowCount ? rowCount.getValue() : -1; } - /** - * Fill parameters. - * - * @param parameters SQL parameters - */ - public void fillParameters(final List parameters) { - int offset = 0; - if (null != this.offset) { - offset = -1 == this.offset.getIndex() ? getOffsetValue() : NumberUtil.roundHalfUp(parameters.get(this.offset.getIndex())); - this.offset.setValue(offset); - } - int rowCount = 0; - if (null != this.rowCount) { - rowCount = -1 == this.rowCount.getIndex() ? getRowCountValue() : NumberUtil.roundHalfUp(parameters.get(this.rowCount.getIndex())); - this.rowCount.setValue(rowCount); - } - if (offset < 0 || rowCount < 0) { - throw new SQLParsingException("LIMIT offset and row count can not be a negative value."); - } - } - /** * Revise parameters. * diff --git a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java index 10951d383e79ad5670f31697ed825acf68f39ca5..4169c7db63f66b0303e71eda68101c3acbaae5a9 100644 --- a/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java +++ b/sharding-core/sharding-core-route/src/main/java/org/apache/shardingsphere/core/route/router/sharding/ParsingSQLRouter.java @@ -109,7 +109,7 @@ public final class ParsingSQLRouter implements ShardingRouter { } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, optimizeResult).route(); if (sqlStatement instanceof SelectStatement && null != ((SelectStatement) sqlStatement).getLimit() && !routingResult.isSingleRouting()) { - result.setLimit(createLimit((SelectStatement) sqlStatement, parameters)); + result.setLimit(createLimit(((SelectStatement) sqlStatement).getLimit(), parameters)); } if (needMerge) { Preconditions.checkState(1 == routingResult.getRoutingUnits().size(), "Must have one sharding with subquery."); @@ -189,21 +189,16 @@ public final class ParsingSQLRouter implements ShardingRouter { } } - private Limit createLimit(final SelectStatement selectStatement, final List parameters) { - Limit result = createLimit(selectStatement.getLimit()); - result.fillParameters(parameters); - return result; - } - - private Limit createLimit(final LimitSegment limitSegment) { - Limit result = new Limit(); + private Limit createLimit(final LimitSegment limitSegment, final List parameters) { + 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, parameters); } private LimitValue createLimitValue(final LimitValueSegment limitValueSegment) { diff --git a/sharding-integration-test/sharding-jdbc-test/src/test/resources/logback-test.xml b/sharding-integration-test/sharding-jdbc-test/src/test/resources/logback-test.xml new file mode 100644 index 0000000000000000000000000000000000000000..9c8231634dd1986b44ef7689f1a292331100bf3f --- /dev/null +++ b/sharding-integration-test/sharding-jdbc-test/src/test/resources/logback-test.xml @@ -0,0 +1,34 @@ + + + + + + + [%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n + + + + + + + + + + + +