diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/Db2PagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/Db2PagingQueryProvider.java index 721c4fb64..8ebd2a831 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/Db2PagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/Db2PagingQueryProvider.java @@ -15,6 +15,7 @@ public class Db2PagingQueryProvider extends SqlWindowingPagingQueryProvider { sql.append("SELECT ").append(getSelectClause()); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" FETCH FIRST ").append(pageSize).append(" ROWS ONLY"); return sql.toString(); @@ -27,6 +28,7 @@ public class Db2PagingQueryProvider extends SqlWindowingPagingQueryProvider { sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" FETCH FIRST ").append(pageSize).append(" ROWS ONLY"); return sql.toString(); diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/HsqlPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/HsqlPagingQueryProvider.java index d5f02940a..2b34c3206 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/HsqlPagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/HsqlPagingQueryProvider.java @@ -29,6 +29,7 @@ public class HsqlPagingQueryProvider extends AbstractSqlPagingQueryProvider { sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause()); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } @@ -40,6 +41,7 @@ public class HsqlPagingQueryProvider extends AbstractSqlPagingQueryProvider { sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } @@ -53,6 +55,7 @@ public class HsqlPagingQueryProvider extends AbstractSqlPagingQueryProvider { sql.append("SELECT LIMIT ").append(offset).append(" 1 ").append(getSortKey()).append(" AS SORT_KEY"); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/MySqlPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/MySqlPagingQueryProvider.java index 27937d88e..3a47ec90f 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/MySqlPagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/MySqlPagingQueryProvider.java @@ -29,6 +29,7 @@ public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider { sql.append("SELECT ").append(getSelectClause()); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" LIMIT ").append(pageSize); return sql.toString(); @@ -41,6 +42,7 @@ public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider { sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" LIMIT ").append(pageSize); return sql.toString(); @@ -53,7 +55,9 @@ public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider { StringBuilder sql = new StringBuilder(); sql.append("SELECT ").append(getSortKey()).append(" AS SORT_KEY"); - sql.append(" FROM ").append(getFromClause()).append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" FROM ").append(getFromClause()); + sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" LIMIT ").append(offset).append(" 1"); return sql.toString(); diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/OraclePagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/OraclePagingQueryProvider.java index 1b278ab1f..5c78c433d 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/OraclePagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/OraclePagingQueryProvider.java @@ -16,6 +16,7 @@ public class OraclePagingQueryProvider extends SqlWindowingPagingQueryProvider { sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ROWNUM <= ").append(pageSize); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } @@ -28,6 +29,7 @@ public class OraclePagingQueryProvider extends SqlWindowingPagingQueryProvider { sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(" AND ROWNUM <= ").append(pageSize); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/PostgresPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/PostgresPagingQueryProvider.java index 419dc2367..96a60abf9 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/PostgresPagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/PostgresPagingQueryProvider.java @@ -14,6 +14,7 @@ public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider sql.append("SELECT ").append(getSelectClause()); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" LIMIT ").append(pageSize); return sql.toString(); @@ -26,6 +27,7 @@ public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" LIMIT ").append(pageSize); return sql.toString(); @@ -38,7 +40,9 @@ public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider StringBuilder sql = new StringBuilder(); sql.append("SELECT ").append(getSortKey()).append(" AS SORT_KEY"); - sql.append(" FROM ").append(getFromClause()).append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" FROM ").append(getFromClause()); + sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); sql.append(" LIMIT ").append(offset).append(" 1"); return sql.toString(); diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProvider.java index 720437756..02acc7cd3 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProvider.java @@ -15,6 +15,7 @@ public class SqlServerPagingQueryProvider extends SqlWindowingPagingQueryProvide sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause()); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } @@ -26,6 +27,7 @@ public class SqlServerPagingQueryProvider extends SqlWindowingPagingQueryProvide sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SybasePagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SybasePagingQueryProvider.java index cabf87de8..24bcf39eb 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SybasePagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SybasePagingQueryProvider.java @@ -15,6 +15,7 @@ public class SybasePagingQueryProvider extends SqlWindowingPagingQueryProvider { sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause()); sql.append(" FROM ").append(getFromClause()); sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } @@ -26,6 +27,7 @@ public class SybasePagingQueryProvider extends SqlWindowingPagingQueryProvider { sql.append(" FROM ").append(getFromClause()); sql.append(" WHERE ").append(getSortKey()).append(" > ?"); sql.append(getWhereClause() == null ? "" : " AND " + getWhereClause()); + sql.append(" ORDER BY ").append(getSortKey()).append(" ASC"); return sql.toString(); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProviderTests.java index c25f85f76..cbfdeaac1 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProviderTests.java @@ -28,7 +28,7 @@ public abstract class AbstractSqlPagingQueryProviderTests { @Before - public void onSetUp() { + public void setUp() { if (pagingQueryProvider == null) { throw new IllegalArgumentException("pagingQuery{rovider can't be null"); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/Db2PagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/Db2PagingQueryProviderTests.java index 226ead6bb..153d1ae17 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/Db2PagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/Db2PagingQueryProviderTests.java @@ -15,14 +15,14 @@ public class Db2PagingQueryProviderTests extends AbstractSqlPagingQueryProviderT @Test @Override public void testGenerateFirstPageQuery() { - String sql = "SELECT id, name, age FROM foo WHERE bar = 1 FETCH FIRST 100 ROWS ONLY"; + String sql = "SELECT id, name, age FROM foo WHERE bar = 1 ORDER BY id ASC FETCH FIRST 100 ROWS ONLY"; String s = pagingQueryProvider.generateFirstPageQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateRemainingPagesQuery() { - String sql = "SELECT id, name, age FROM foo WHERE id > ? AND bar = 1 FETCH FIRST 100 ROWS ONLY"; + String sql = "SELECT id, name, age FROM foo WHERE id > ? AND bar = 1 ORDER BY id ASC FETCH FIRST 100 ROWS ONLY"; String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); Assert.assertEquals("", sql, s); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/HsqlPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/HsqlPagingQueryProviderTests.java index dd2877d1f..cc3e13db1 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/HsqlPagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/HsqlPagingQueryProviderTests.java @@ -30,21 +30,21 @@ public class HsqlPagingQueryProviderTests extends AbstractSqlPagingQueryProvider @Test @Override public void testGenerateFirstPageQuery() { - String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1"; + String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateFirstPageQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateRemainingPagesQuery() { - String sql = "SELECT TOP 100 id, name, age FROM foo WHERE id > ? AND bar = 1"; + String sql = "SELECT TOP 100 id, name, age FROM foo WHERE id > ? AND bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateJumpToItemQuery() { - String sql = "SELECT LIMIT 99 1 id AS SORT_KEY FROM foo WHERE bar = 1"; + String sql = "SELECT LIMIT 99 1 id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize); Assert.assertEquals("", sql, s); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/MySqlPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/MySqlPagingQueryProviderTests.java index 486153b74..2e928c575 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/MySqlPagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/MySqlPagingQueryProviderTests.java @@ -30,21 +30,21 @@ public class MySqlPagingQueryProviderTests extends AbstractSqlPagingQueryProvide @Test @Override public void testGenerateFirstPageQuery() { - String sql = "SELECT id, name, age FROM foo WHERE bar = 1 LIMIT 100"; + String sql = "SELECT id, name, age FROM foo WHERE bar = 1 ORDER BY id ASC LIMIT 100"; String s = pagingQueryProvider.generateFirstPageQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateRemainingPagesQuery() { - String sql = "SELECT id, name, age FROM foo WHERE id > ? AND bar = 1 LIMIT 100"; + String sql = "SELECT id, name, age FROM foo WHERE id > ? AND bar = 1 ORDER BY id ASC LIMIT 100"; String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateJumpToItemQuery() { - String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 LIMIT 99 1"; + String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC LIMIT 99 1"; String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize); Assert.assertEquals("", sql, s); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/OraclePagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/OraclePagingQueryProviderTests.java index 5976fadfe..a38037c9d 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/OraclePagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/OraclePagingQueryProviderTests.java @@ -15,14 +15,14 @@ public class OraclePagingQueryProviderTests extends AbstractSqlPagingQueryProvid @Test @Override public void testGenerateFirstPageQuery() { - String sql = "SELECT id, name, age FROM foo WHERE ROWNUM <= 100 AND bar = 1"; + String sql = "SELECT id, name, age FROM foo WHERE ROWNUM <= 100 AND bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateFirstPageQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateRemainingPagesQuery() { - String sql = "SELECT id, name, age FROM foo WHERE id > ? AND ROWNUM <= 100 AND bar = 1"; + String sql = "SELECT id, name, age FROM foo WHERE id > ? AND ROWNUM <= 100 AND bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); Assert.assertEquals("", sql, s); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/PostgresPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/PostgresPagingQueryProviderTests.java new file mode 100644 index 000000000..7672d791c --- /dev/null +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/PostgresPagingQueryProviderTests.java @@ -0,0 +1,36 @@ +package org.springframework.batch.item.database.support; + +import org.junit.Test; +import org.junit.Assert; + +/** + * @author Thomas Risberg + */ +public class PostgresPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests { + + public PostgresPagingQueryProviderTests() { + pagingQueryProvider = new PostgresPagingQueryProvider(); + } + + @Test + @Override + public void testGenerateFirstPageQuery() { + String sql = "SELECT id, name, age FROM foo WHERE bar = 1 ORDER BY id ASC LIMIT 100"; + String s = pagingQueryProvider.generateFirstPageQuery(pageSize); + Assert.assertEquals("", sql, s); + } + + @Test @Override + public void testGenerateRemainingPagesQuery() { + String sql = "SELECT id, name, age FROM foo WHERE id > ? AND bar = 1 ORDER BY id ASC LIMIT 100"; + String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); + Assert.assertEquals("", sql, s); + } + + @Test @Override + public void testGenerateJumpToItemQuery() { + String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC LIMIT 99 1"; + String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize); + Assert.assertEquals("", sql, s); + } +} diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProviderTests.java index bd70aa505..50f17fa04 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlServerPagingQueryProviderTests.java @@ -15,14 +15,14 @@ public class SqlServerPagingQueryProviderTests extends AbstractSqlPagingQueryPro @Test @Override public void testGenerateFirstPageQuery() { - String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1"; + String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateFirstPageQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateRemainingPagesQuery() { - String sql = "SELECT TOP 100 id, name, age FROM foo WHERE id > ? AND bar = 1"; + String sql = "SELECT TOP 100 id, name, age FROM foo WHERE id > ? AND bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); Assert.assertEquals("", sql, s); } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SybasePagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SybasePagingQueryProviderTests.java index 94bbc2dce..111b7cf73 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SybasePagingQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SybasePagingQueryProviderTests.java @@ -15,14 +15,14 @@ public class SybasePagingQueryProviderTests extends AbstractSqlPagingQueryProvid @Test @Override public void testGenerateFirstPageQuery() { - String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1"; + String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateFirstPageQuery(pageSize); Assert.assertEquals("", sql, s); } @Test @Override public void testGenerateRemainingPagesQuery() { - String sql = "SELECT TOP 100 id, name, age FROM foo WHERE id > ? AND bar = 1"; + String sql = "SELECT TOP 100 id, name, age FROM foo WHERE id > ? AND bar = 1 ORDER BY id ASC"; String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize); Assert.assertEquals("", sql, s); }