BATCH-1499, BATCH-1497: add alias in SqlPagingItemReader.

This commit is contained in:
dsyer
2010-01-31 18:43:53 +00:00
parent a699c5c4bd
commit 96e6286beb
12 changed files with 123 additions and 25 deletions

View File

@@ -251,7 +251,7 @@
<property key="velocimacro.library" value="src/main/sql/sqlserver.vpp" />
</engine>
</config>
<fileset dir="${basedir}/src/main/sql" includes="schema.sql.vpp" />
<fileset dir="${basedir}/src/main/sql" includes="schema*.sql.vpp" />
<mapper type="glob" from="*.sql.vpp" to="*-sqlserver.sql" />
</vppcopy>
<vppcopy todir="${basedir}/target/generated-resources" overwrite="true">
@@ -264,7 +264,7 @@
<property key="velocimacro.library" value="src/main/sql/sybase.vpp" />
</engine>
</config>
<fileset dir="${basedir}/src/main/sql" includes="schema.sql.vpp" />
<fileset dir="${basedir}/src/main/sql" includes="schema*.sql.vpp" />
<mapper type="glob" from="*.sql.vpp" to="*-sybase.sql" />
</vppcopy>
</tasks>

View File

@@ -0,0 +1,12 @@
-- Autogenerated: do not edit this file
DROP TABLE BATCH_STEP_EXECUTION_CONTEXT ;
DROP TABLE BATCH_JOB_EXECUTION_CONTEXT ;
DROP TABLE BATCH_STEP_EXECUTION ;
DROP TABLE BATCH_JOB_EXECUTION ;
DROP TABLE BATCH_JOB_PARAMS ;
DROP TABLE BATCH_JOB_INSTANCE ;
DROP TABLE BATCH_STEP_EXECUTION_SEQ ;
DROP TABLE BATCH_JOB_EXECUTION_SEQ ;
DROP TABLE BATCH_JOB_SEQ ;

View File

@@ -0,0 +1,12 @@
-- Autogenerated: do not edit this file
DROP TABLE BATCH_STEP_EXECUTION_CONTEXT ;
DROP TABLE BATCH_JOB_EXECUTION_CONTEXT ;
DROP TABLE BATCH_STEP_EXECUTION ;
DROP TABLE BATCH_JOB_EXECUTION ;
DROP TABLE BATCH_JOB_PARAMS ;
DROP TABLE BATCH_JOB_INSTANCE ;
DROP TABLE BATCH_STEP_EXECUTION_SEQ ;
DROP TABLE BATCH_JOB_EXECUTION_SEQ ;
DROP TABLE BATCH_JOB_SEQ ;

View File

@@ -17,9 +17,10 @@
package org.springframework.batch.item.database.support;
/**
* Sql Server implementation of a {@link org.springframework.batch.item.database.PagingQueryProvider} using
* Sql Server implementation of a
* {@link org.springframework.batch.item.database.PagingQueryProvider} using
* database specific features.
*
*
* @author Thomas Risberg
* @since 2.0
*/
@@ -35,6 +36,11 @@ public class SqlServerPagingQueryProvider extends SqlWindowingPagingQueryProvide
return SqlPagingQueryUtils.generateTopSqlQuery(this, true, buildTopClause(pageSize));
}
@Override
protected Object getSubQueryAlias() {
return "AS TMP_SUB ";
}
private String buildTopClause(int pageSize) {
return new StringBuilder().append("TOP ").append(pageSize).toString();
}

View File

@@ -29,14 +29,14 @@ public class SqlServerPagingQueryProviderTests extends AbstractSqlPagingQueryPro
@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 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 ROW_NUMBER = 100";
String s = pagingQueryProvider.generateJumpToItemQuery(145, pageSize);
Assert.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 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 ROW_NUMBER = 1";
String s = pagingQueryProvider.generateJumpToItemQuery(45, pageSize);
Assert.assertEquals("", sql, s);
}

View File

@@ -93,6 +93,12 @@
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>

View File

@@ -1,18 +1,17 @@
# Placeholders batch.*
# for MS SQLServer:
batch.jdbc.driver=net.sourceforge.jtds.jdbc.Driver
batch.jdbc.url=jdbc:jtds:sqlserver://dbhost:1433;databaseName=test
batch.jdbc.user=spring
batch.jdbc.password=spring
batch.schema=
batch.jndi.name=
batch.naming.factory.initial=
batch.naming.provider.url=
batch.jdbc.url=jdbc:jtds:sqlserver://localhost:1433;instance=SQLEXPRESS
batch.jdbc.user=sa
batch.jdbc.password=sa
batch.jdbc.testWhileIdle=false
batch.jdbc.validationQuery=
batch.drop.script=/org/springframework/batch/core/schema-drop-sqlserver.sql
batch.schema.script=/org/springframework/batch/core/schema-sqlserver.sql
batch.business.schema.script=business-schema-sqlserver.sql
batch.data.source.init=true
batch.database.incrementer.class=org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer
batch.lob.handler.class=org.springframework.jdbc.support.lob.DefaultLobHandler
# Bean Properties for override
# when not using sequences:
incrementerParent.columnName=ID
batch.database.incrementer.parent=columnIncrementerParent
batch.grid.size=2
batch.verify.cursor.position=true

View File

@@ -12,12 +12,11 @@ DROP TABLE ERROR_LOG ;
-- Autogenerated: do not edit this file
CREATE TABLE CUSTOMER_SEQ (ID BIGINT IDENTITY);
INSERT INTO CUSTOMER_SEQ (ID) values (5);
CREATE TABLE BATCH_STAGING_SEQ (ID BIGINT IDENTITY);
INSERT INTO BATCH_STAGING_SEQ (ID) values (0);
CREATE TABLE TRADE_SEQ (ID BIGINT IDENTITY);
INSERT INTO TRADE_SEQ (ID) values (0);
CREATE TABLE CUSTOMER_SEQ (ID BIGINT IDENTITY);
SET IDENTITY_INSERT CUSTOMER_SEQ ON;
INSERT INTO CUSTOMER_SEQ (ID) values (5);
CREATE TABLE BATCH_STAGING_SEQ (ID BIGINT IDENTITY);
CREATE TABLE TRADE_SEQ (ID BIGINT IDENTITY);
CREATE TABLE BATCH_STAGING (
ID BIGINT NOT NULL PRIMARY KEY ,

View File

@@ -22,7 +22,7 @@
<property name="whereClause" value="WHERE CREDIT > :credit" />
</bean>
</property>
<property name="pageSize" value="10" />
<property name="pageSize" value="2" />
<property name="parameterValues">
<map>
<entry key="statusCode" value="PE" />

View File

@@ -24,7 +24,7 @@ log4j.appender.chainsaw.layout=org.apache.log4j.xml.XMLLayout
### enable spring
#log4j.logger.org.springframework=info
#log4j.logger.org.springframework.transaction=debug
#log4j.logger.org.springframework.jdbc.core=debug
log4j.logger.org.springframework.jdbc.core=debug
#log4j.logger.org.springframework.orm=debug
### debug your specific package or classes with the following example

View File

@@ -1,4 +1,5 @@
#macro (sequence $name $value)CREATE TABLE ${name} (ID BIGINT IDENTITY);
SET IDENTITY_INSERT ${name} ON;
INSERT INTO ${name} (ID) values (${value});
#end
#macro (notnull $name $type)ALTER COLUMN ${name} ${type} NOT NULL#end

View File

@@ -0,0 +1,63 @@
/*
* Copyright 2006-2007 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.sample.iosample;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.sample.domain.trade.CustomerCredit;
import org.springframework.batch.test.MetaDataInstanceFactory;
import org.springframework.batch.test.StepScopeTestExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
/**
* @author Dave Syer
* @since 2.1
*/
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class })
@ContextConfiguration(locations = { "/simple-job-launcher-context.xml", "/jobs/ioSampleJob.xml",
"/jobs/iosample/jdbcPaging.xml" })
public class JdbcPagingRestartIntegrationTests {
@Autowired
private ItemReader<CustomerCredit> reader;
public StepExecution getStepExecution() {
return MetaDataInstanceFactory.createStepExecution(new JobParametersBuilder().addDouble("credit", 10000.)
.toJobParameters());
}
@Test
public void testReader() throws Exception {
ExecutionContext executionContext = new ExecutionContext();
executionContext.putInt("JdbcPagingItemReader.read.count", 2);
((ItemStream)reader).open(executionContext);
assertNotNull(reader.read());
}
}