diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java
index d96518f9f..bd98a32d3 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@ import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
+import org.springframework.util.StringUtils;
/**
*
@@ -70,6 +71,7 @@ import org.springframework.util.ClassUtils;
*
* @author Thomas Risberg
* @author Dave Syer
+ * @author Michael Minella
* @since 2.0
*/
public class JdbcPagingItemReader extends AbstractPagingItemReader implements InitializingBean {
@@ -157,6 +159,7 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme
* Check mandatory properties.
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
+ @Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
Assert.notNull(dataSource);
@@ -305,7 +308,13 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme
private class PagingRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
- startAfterValue = rs.getObject(queryProvider.getSortKeyWithoutAlias());
+ if(StringUtils.hasText(queryProvider.getSortKey())) {
+ startAfterValue = rs.getObject(queryProvider.getSortKey());
+ }
+ else {
+ startAfterValue = rs.getObject(queryProvider.getSortKeyWithoutAlias());
+ }
+
return rowMapper.mapRow(rs, rowNum);
}
}
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProvider.java
index fc5e78025..2e6619dd6 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProvider.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@ import java.util.ArrayList;
*
* @author Thomas Risberg
* @author Dave Syer
+ * @author Michael Minella
* @since 2.0
*/
public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvider {
@@ -54,12 +55,32 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
private String whereClause;
private String sortKey;
+
+ private String groupClause;
private boolean ascending = true;
private int parameterCount;
private boolean usingNamedParameters;
+
+ /**
+ * The setter for the group by clause
+ *
+ * @param SQL GROUP BY clause part of the SQL query string
+ */
+ public void setGroupClause(String groupClause) {
+ this.groupClause = groupClause;
+ }
+
+ /**
+ * The getter for the group by clause
+ *
+ * @return SQL GROUP BY clause part of the SQL query string
+ */
+ public String getGroupClause() {
+ return this.groupClause;
+ }
/**
* @param selectClause SELECT clause part of SQL query string
@@ -194,6 +215,9 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
if (whereClause != null) {
sql.append(" WHERE ").append(whereClause);
}
+ if(groupClause != null) {
+ sql.append(" GROUP BY ").append(groupClause);
+ }
List namedParameters = new ArrayList();
parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql.toString(), namedParameters);
if (namedParameters.size() > 0) {
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 e1ce7c41f..b92603575 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
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,8 +18,12 @@ package org.springframework.batch.item.database.support;
/**
* Postgres implementation of a {@link org.springframework.batch.item.database.PagingQueryProvider} using database specific features.
+ *
+ * When using the groupClause, this implementation expects all select fields not used in aggregate functions to be included in the
+ * groupClause (the provider does not add them for you).
*
* @author Thomas Risberg
+ * @author Michael Minella
* @since 2.0
*/
public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider {
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java
index 42ae64509..c0963aba7 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,6 +44,7 @@ import org.springframework.util.StringUtils;
* types are given by the {@link DatabaseType} enum.
*
* @author Dave Syer
+ * @author Michael Minella
*/
public class SqlPagingQueryProviderFactoryBean implements FactoryBean {
@@ -56,6 +57,8 @@ public class SqlPagingQueryProviderFactoryBean implements FactoryBean {
private String whereClause;
private String selectClause;
+
+ private String groupClause;
private String sortKey;
@@ -76,6 +79,13 @@ public class SqlPagingQueryProviderFactoryBean implements FactoryBean {
providers.put(SQLSERVER,new SqlServerPagingQueryProvider());
providers.put(SYBASE,new SybasePagingQueryProvider());
}
+
+ /**
+ * @param SQL GROUP BY clause part of the SQL query string
+ */
+ public void setGroupClause(String groupClause) {
+ this.groupClause = groupClause;
+ }
/**
* @param databaseType the databaseType to set
@@ -154,6 +164,9 @@ public class SqlPagingQueryProviderFactoryBean implements FactoryBean {
if (StringUtils.hasText(selectClause)) {
provider.setSelectClause(selectClause);
}
+ if(StringUtils.hasText(groupClause)) {
+ provider.setGroupClause(groupClause);
+ }
provider.init(dataSource);
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryUtils.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryUtils.java
index adfea3654..093f834c8 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryUtils.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,12 +16,15 @@
package org.springframework.batch.item.database.support;
+import org.springframework.util.StringUtils;
+
/**
* Utility class that generates the actual SQL statements used by query
* providers.
*
* @author Thomas Risberg
* @author Dave Syer
+ * @author Michael Minella
* @since 2.0
*/
public class SqlPagingQueryUtils {
@@ -42,6 +45,7 @@ public class SqlPagingQueryUtils {
sql.append("SELECT ").append(provider.getSelectClause());
sql.append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
+ buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
buildAscendingClause(provider, sql);
sql.append(" " + limitClause);
@@ -65,6 +69,7 @@ public class SqlPagingQueryUtils {
sql.append("SELECT ").append(topClause).append(" ").append(provider.getSelectClause());
sql.append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
+ buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
buildAscendingClause(provider, sql);
@@ -104,6 +109,7 @@ public class SqlPagingQueryUtils {
sql.append("SELECT * FROM (SELECT ").append(selectClause).append(", ROWNUM as TMP_ROW_NUM");
sql.append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
+ buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
buildAscendingClause(provider, sql);
sql.append(") WHERE ").append(rowNumClause);
@@ -125,6 +131,7 @@ public class SqlPagingQueryUtils {
.append(", ROWNUM as TMP_ROW_NUM");
sql.append(" FROM (SELECT ").append(innerSelectClause).append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
+ buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
buildAscendingClause(provider, sql);
sql.append(")) WHERE ").append(rowNumClause);
@@ -146,6 +153,7 @@ public class SqlPagingQueryUtils {
sql.append("SELECT ").append(provider.getSortKey()).append(" AS SORT_KEY");
sql.append(" FROM ").append(provider.getFromClause());
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
+ buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
buildAscendingClause(provider, sql);
sql.append(" " + limitClause);
@@ -166,6 +174,7 @@ public class SqlPagingQueryUtils {
sql.append("SELECT ").append(topClause).append(" ").append(provider.getSortKey()).append(" AS SORT_KEY");
sql.append(" FROM ").append(provider.getFromClause());
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
+ buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
buildAscendingClause(provider, sql);
@@ -202,5 +211,12 @@ public class SqlPagingQueryUtils {
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
}
}
+
+ private static void buildGroupByClause(AbstractSqlPagingQueryProvider provider, StringBuilder sql) {
+ if(StringUtils.hasText(provider.getGroupClause())) {
+ sql.append(" GROUP BY ");
+ sql.append(provider.getGroupClause());
+ }
+ }
}
diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProvider.java
index e3f869619..3aaa72b41 100644
--- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProvider.java
+++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import org.springframework.util.StringUtils;
* Apache Derby version 10.4.1.3
*
* @author Thomas Risberg
+ * @author Michael Minella
* @since 2.0
*/
public class SqlWindowingPagingQueryProvider extends AbstractSqlPagingQueryProvider {
@@ -38,6 +39,7 @@ public class SqlWindowingPagingQueryProvider extends AbstractSqlPagingQueryProvi
sql.append(getOverSubstituteClauseStart());
sql.append(" FROM ").append(getFromClause()).append(
getWhereClause() == null ? "" : " WHERE " + getWhereClause());
+ sql.append(getGroupClause() == null ? "" : " GROUP BY " + getGroupClause());
sql.append(getOverSubstituteClauseEnd());
sql.append(") ").append(getSubQueryAlias()).append("WHERE ").append(extractTableAlias()).append(
"ROW_NUMBER <= ").append(pageSize);
@@ -79,6 +81,7 @@ public class SqlWindowingPagingQueryProvider extends AbstractSqlPagingQueryProvi
sql.append(" < ");
}
sql.append(getSortKeyPlaceHolder());
+ sql.append(getGroupClause() == null ? "" : " GROUP BY " + getGroupClause());
sql.append(getOverSubstituteClauseEnd());
sql.append(") ").append(getSubQueryAlias()).append("WHERE ").append(extractTableAlias()).append(
"ROW_NUMBER <= ").append(pageSize);
@@ -102,6 +105,7 @@ public class SqlWindowingPagingQueryProvider extends AbstractSqlPagingQueryProvi
sql.append(getOverSubstituteClauseStart());
sql.append(" FROM ").append(getFromClause());
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
+ sql.append(getGroupClause() == null ? "" : " GROUP BY " + getGroupClause());
sql.append(getOverSubstituteClauseEnd());
sql.append(") ").append(getSubQueryAlias()).append("WHERE ").append(extractTableAlias()).append(
"ROW_NUMBER = ").append(lastRowNum);
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 0ffc0e4bb..27c0a62c0 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
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import org.junit.Test;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public abstract class AbstractSqlPagingQueryProviderTests {
@@ -66,5 +67,17 @@ public abstract class AbstractSqlPagingQueryProviderTests {
@Test
public abstract void testGenerateJumpToItemQueryForFirstPage();
+
+ @Test
+ public abstract void testGenerateFirstPageQueryWithGroupBy();
+
+ @Test
+ public abstract void testGenerateRemainingPagesQueryWithGroupBy();
+
+ @Test
+ public abstract void testGenerateJumpToItemQueryWithGroupBy();
+
+ @Test
+ public abstract void testGenerateJumpToItemQueryForFirstPageWithGroupBy();
}
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 a406f1166..90fad6d75 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
@@ -1,10 +1,11 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class Db2PagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -17,28 +18,63 @@ public class Db2PagingQueryProviderTests extends AbstractSqlPagingQueryProviderT
public void testGenerateFirstPageQuery() {
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC FETCH FIRST 100 ROWS ONLY";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQuery() {
String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 100";
String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 1";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC FETCH FIRST 100 ROWS ONLY";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC FETCH FIRST 100 ROWS ONLY";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 100";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ assertEquals(sql, s);
+ }
}
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DerbyPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DerbyPagingQueryProviderTests.java
index f1da15da3..0654aa1fc 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DerbyPagingQueryProviderTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DerbyPagingQueryProviderTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -33,6 +34,7 @@ import org.springframework.dao.InvalidDataAccessResourceUsageException;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class DerbyPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -133,4 +135,39 @@ public class DerbyPagingQueryProviderTests extends AbstractSqlPagingQueryProvide
assertTrue("Wrong query: " + s, s.contains("id desc"));
}
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT * FROM ( SELECT id, name, age, ROW_NUMBER() OVER () AS ROW_NUMBER FROM (SELECT id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC) AS TMP_ORDERED) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER <= 100";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT * FROM ( SELECT id, name, age, ROW_NUMBER() OVER () AS ROW_NUMBER FROM (SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC) AS TMP_ORDERED) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER <= 100";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER () AS ROW_NUMBER FROM (SELECT id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC) AS TMP_ORDERED) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 100";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER () AS ROW_NUMBER FROM (SELECT id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC) AS TMP_ORDERED) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ assertEquals(sql, s);
+ }
}
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/H2PagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/H2PagingQueryProviderTests.java
index 6cd942ef3..e4df91051 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/H2PagingQueryProviderTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/H2PagingQueryProviderTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,11 +16,12 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
* @author Dave Syer
+ * @author Michael Minella
*/
public class H2PagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -33,27 +34,63 @@ public class H2PagingQueryProviderTests extends AbstractSqlPagingQueryProviderTe
public void testGenerateFirstPageQuery() {
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQuery() {
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT LIMIT 0 1 id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT LIMIT 99 1 id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT LIMIT 0 1 id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ 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 196cee342..43753acbb 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
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,10 +16,12 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class HsqlPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -32,27 +34,63 @@ public class HsqlPagingQueryProviderTests extends AbstractSqlPagingQueryProvider
public void testGenerateFirstPageQuery() {
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQuery() {
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT LIMIT 0 1 id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT LIMIT 99 1 id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT LIMIT 0 1 id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ 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 af51b9552..8d5dd5fbc 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
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,10 +16,11 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class MySqlPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -32,27 +33,63 @@ public class MySqlPagingQueryProviderTests extends AbstractSqlPagingQueryProvide
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC LIMIT 100";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ 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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC LIMIT 0, 1";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC LIMIT 100";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC LIMIT 100";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC LIMIT 99, 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC LIMIT 0, 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ 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 fe2fff029..d8a410079 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
@@ -1,10 +1,11 @@
package org.springframework.batch.item.database.support;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class OraclePagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -17,31 +18,67 @@ public class OraclePagingQueryProviderTests extends AbstractSqlPagingQueryProvid
public void testGenerateFirstPageQuery() {
String sql = "SELECT * FROM (SELECT id, name, age, ROWNUM as TMP_ROW_NUM FROM foo WHERE bar = 1 ORDER BY id ASC) WHERE ROWNUM <= 100";
String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
pagingQueryProvider.setWhereClause("");
String sql2 = "SELECT * FROM (SELECT id, name, age, ROWNUM as TMP_ROW_NUM FROM foo ORDER BY id ASC) WHERE ROWNUM <= 100";
String s2 = pagingQueryProvider.generateFirstPageQuery(pageSize);
- Assert.assertEquals("", sql2, s2);
+ assertEquals(sql2, s2);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT * FROM (SELECT id, name, age, ROWNUM as TMP_ROW_NUM FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC) WHERE ROWNUM <= 100";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQuery() {
String sql = "SELECT SORT_KEY FROM (SELECT SORT_KEY, ROWNUM as TMP_ROW_NUM FROM (SELECT id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC)) WHERE TMP_ROW_NUM = 100";
String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
- Assert.assertEquals(sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT SORT_KEY FROM (SELECT SORT_KEY, ROWNUM as TMP_ROW_NUM FROM (SELECT id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC)) WHERE TMP_ROW_NUM = 1";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals(sql, s);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT * FROM (SELECT id, name, age, ROWNUM as TMP_ROW_NUM FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC) WHERE ROWNUM <= 100";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT * FROM (SELECT id, name, age, ROWNUM as TMP_ROW_NUM FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC) WHERE ROWNUM <= 100";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM (SELECT SORT_KEY, ROWNUM as TMP_ROW_NUM FROM (SELECT id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC)) WHERE TMP_ROW_NUM = 100";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM (SELECT SORT_KEY, ROWNUM as TMP_ROW_NUM FROM (SELECT id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC)) WHERE TMP_ROW_NUM = 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ 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
index 9b4d266c7..53d841807 100644
--- 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
@@ -1,10 +1,11 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class PostgresPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -17,28 +18,63 @@ public class PostgresPagingQueryProviderTests extends AbstractSqlPagingQueryProv
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC LIMIT 100";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ 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 1 OFFSET 99";
String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
- Assert.assertEquals("Wrong SQL for jump to", sql, s);
+ assertEquals("Wrong SQL for jump to", sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 ORDER BY id ASC LIMIT 1 OFFSET 0";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("Wrong SQL for first page", sql, s);
+ assertEquals("Wrong SQL for first page", sql, s);
}
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("id, dep");
+ String sql = "SELECT id, name, age FROM foo WHERE bar = 1 GROUP BY id, dep ORDER BY id ASC LIMIT 100";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("id, dep");
+ String sql = "SELECT id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY id, dep ORDER BY id ASC LIMIT 100";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("id, dep");
+ String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY id, dep ORDER BY id ASC LIMIT 1 OFFSET 99";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("id, dep");
+ String sql = "SELECT id AS SORT_KEY FROM foo WHERE bar = 1 GROUP BY id, dep ORDER BY id ASC LIMIT 1 OFFSET 0";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ 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 e71229b1d..b0b7f7007 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
@@ -1,10 +1,11 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class SqlServerPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -17,28 +18,63 @@ public class SqlServerPagingQueryProviderTests extends AbstractSqlPagingQueryPro
public void testGenerateFirstPageQuery() {
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);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQuery() {
String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 100";
String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 1";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals(sql, s);
}
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 100";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ assertEquals(sql, s);
+ }
}
diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProviderTests.java
index 2245c4651..7f2605256 100644
--- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProviderTests.java
+++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SqlWindowingPagingQueryProviderTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2008 the original author or authors.
+ * Copyright 2006-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,13 +15,14 @@
*/
package org.springframework.batch.item.database.support;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class SqlWindowingPagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -57,4 +58,39 @@ public class SqlWindowingPagingQueryProviderTests extends AbstractSqlPagingQuery
Assert.assertEquals("", sql, s);
}
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT * FROM ( SELECT id, name, age, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER <= 100";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT * FROM ( SELECT id, name, age, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 AND id > ? GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER <= 100";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 100";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) AS TMP_SUB WHERE TMP_SUB.ROW_NUMBER = 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ 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 1503798be..c31c764c3 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
@@ -1,10 +1,11 @@
package org.springframework.batch.item.database.support;
import org.junit.Test;
-import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
/**
* @author Thomas Risberg
+ * @author Michael Minella
*/
public class SybasePagingQueryProviderTests extends AbstractSqlPagingQueryProviderTests {
@@ -17,27 +18,63 @@ public class SybasePagingQueryProviderTests extends AbstractSqlPagingQueryProvid
public void testGenerateFirstPageQuery() {
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);
+ assertEquals("", sql, s);
}
@Test @Override
public void testGenerateRemainingPagesQuery() {
String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? ORDER BY id ASC";
String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals("", sql, s);
}
@Test @Override
public void testGenerateJumpToItemQuery() {
String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1) WHERE ROW_NUMBER = 100";
String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals("", sql, s);
}
@Test @Override
public void testGenerateJumpToItemQueryForFirstPage() {
String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1) WHERE ROW_NUMBER = 1";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
- Assert.assertEquals("", sql, s);
+ assertEquals("", sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateFirstPageQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateFirstPageQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateRemainingPagesQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT TOP 100 id, name, age FROM foo WHERE bar = 1 AND id > ? GROUP BY dep ORDER BY id ASC";
+ String s = pagingQueryProvider.generateRemainingPagesQuery(pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) WHERE ROW_NUMBER = 100";
+ String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
+ assertEquals(sql, s);
+ }
+
+ @Override
+ @Test
+ public void testGenerateJumpToItemQueryForFirstPageWithGroupBy() {
+ pagingQueryProvider.setGroupClause("dep");
+ String sql = "SELECT SORT_KEY FROM ( SELECT id AS SORT_KEY, ROW_NUMBER() OVER (ORDER BY id ASC) AS ROW_NUMBER FROM foo WHERE bar = 1 GROUP BY dep) WHERE ROW_NUMBER = 1";
+ String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
+ assertEquals(sql, s);
}
}