From 164b3221738a4b2f26d3821154f7f939d7a1b8d7 Mon Sep 17 00:00:00 2001 From: dsyer Date: Thu, 4 Feb 2010 10:07:10 +0000 Subject: [PATCH] RESOLVED: BATCH-1501 - paging queries fixed for sort key not in first column of query --- .../batch/item/database/JdbcPagingItemReader.java | 10 ++++++++-- .../batch/item/database/PagingQueryProvider.java | 7 +++++++ .../support/AbstractSqlPagingQueryProvider.java | 2 +- .../src/main/resources/jobs/iosample/jdbcPaging.xml | 3 ++- .../iosample/JdbcPagingRestartIntegrationTests.java | 11 ++++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) 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 25896587b..f83358b1c 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 @@ -115,6 +115,12 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme this.fetchSize = fetchSize; } + /** + * A {@link PagingQueryProvider}. Supplies all the platform dependent query + * generation capabilities needed by the reader. + * + * @param queryProvider the {@link PagingQueryProvider} to use + */ public void setQueryProvider(PagingQueryProvider queryProvider) { this.queryProvider = queryProvider; } @@ -135,7 +141,7 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme * parameters then the key should be the name used in the query clause. If * you use "?" placeholders then the key should be the relative index that * the parameter appears in the query string built using the select, from - * and where cluases specified. + * and where clauses specified. * * @param parameterValues the values keyed by the parameter named/index used * in the query string. @@ -279,7 +285,7 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme @SuppressWarnings("unchecked") public void processRow(ResultSet rs) throws SQLException { - startAfterValue = rs.getObject(1); + startAfterValue = rs.getObject(queryProvider.getSortKey()); results.add((T) rowMapper.mapRow(rs, results.size())); } } diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/PagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/PagingQueryProvider.java index ce45d0a15..3a831ddea 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/PagingQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/PagingQueryProvider.java @@ -75,4 +75,11 @@ public interface PagingQueryProvider { */ boolean isUsingNamedParameters(); + /** + * The sort key (unique single column name). + * + * @return the sort key used to order the query + */ + String getSortKey(); + } 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 2bef62532..72615799c 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 @@ -141,7 +141,7 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi * * @return sortKey key to use to sort and limit page content */ - protected String getSortKey() { + public String getSortKey() { return sortKey; } diff --git a/spring-batch-samples/src/main/resources/jobs/iosample/jdbcPaging.xml b/spring-batch-samples/src/main/resources/jobs/iosample/jdbcPaging.xml index f6cc9b80f..bd090ddca 100644 --- a/spring-batch-samples/src/main/resources/jobs/iosample/jdbcPaging.xml +++ b/spring-batch-samples/src/main/resources/jobs/iosample/jdbcPaging.xml @@ -17,7 +17,8 @@ - + + diff --git a/spring-batch-samples/src/test/java/org/springframework/batch/sample/iosample/JdbcPagingRestartIntegrationTests.java b/spring-batch-samples/src/test/java/org/springframework/batch/sample/iosample/JdbcPagingRestartIntegrationTests.java index 7b3e38971..d5a1d215a 100644 --- a/spring-batch-samples/src/test/java/org/springframework/batch/sample/iosample/JdbcPagingRestartIntegrationTests.java +++ b/spring-batch-samples/src/test/java/org/springframework/batch/sample/iosample/JdbcPagingRestartIntegrationTests.java @@ -17,6 +17,7 @@ package org.springframework.batch.sample.iosample; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import org.junit.Test; import org.junit.runner.RunWith; @@ -57,7 +58,15 @@ public class JdbcPagingRestartIntegrationTests { ExecutionContext executionContext = new ExecutionContext(); executionContext.putInt("JdbcPagingItemReader.read.count", 2); ((ItemStream)reader).open(executionContext); - assertNotNull(reader.read()); + CustomerCredit item = reader.read(); + // System.err.println(item); + assertNotNull(item); + item = reader.read(); + // System.err.println(item); + assertNotNull(item); + item = reader.read(); + // System.err.println(item); + assertNull(item); } }