From f4274270e7b156d35213b9de0a056386f58f6c1a Mon Sep 17 00:00:00 2001 From: dsyer Date: Sun, 29 Jun 2008 07:52:23 +0000 Subject: [PATCH] BATCH-328: applied patch --- spring-batch-core/pom.xml | 12 ++--- .../src/main/sql/schema-upgrade.sql.vpp | 2 + .../src/main/sql/sqlserver.properties | 10 ++++ spring-batch-core/src/main/sql/sqlserver.vpp | 3 ++ .../src/main/sql/sybase.properties | 11 ++++ spring-batch-core/src/main/sql/sybase.vpp | 3 ++ .../src/main/sql/tables-context.sql.vpp | 18 +++---- .../src/main/sql/tables-main.sql.vpp | 50 +++++++++---------- ...ltDataFieldMaxValueIncrementerFactory.java | 30 ++++++++--- ...aFieldMaxValueIncrementerFactoryTests.java | 12 +++++ 10 files changed, 104 insertions(+), 47 deletions(-) create mode 100644 spring-batch-core/src/main/sql/sqlserver.properties create mode 100644 spring-batch-core/src/main/sql/sqlserver.vpp create mode 100644 spring-batch-core/src/main/sql/sybase.properties create mode 100644 spring-batch-core/src/main/sql/sybase.vpp diff --git a/spring-batch-core/pom.xml b/spring-batch-core/pom.xml index 8c4ef7143..145cb0478 100644 --- a/spring-batch-core/pom.xml +++ b/spring-batch-core/pom.xml @@ -140,7 +140,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -196,7 +196,7 @@ - + @@ -210,7 +210,7 @@ - + diff --git a/spring-batch-core/src/main/sql/schema-upgrade.sql.vpp b/spring-batch-core/src/main/sql/schema-upgrade.sql.vpp index 55527615b..d326186d5 100644 --- a/spring-batch-core/src/main/sql/schema-upgrade.sql.vpp +++ b/spring-batch-core/src/main/sql/schema-upgrade.sql.vpp @@ -1,5 +1,7 @@ -- Autogenerated: do not edit this file +-- Upgrades an existing 1.0 schema to version 1.1. + #parse("${includes}/tables-context.sql.vpp") #parse("${includes}/upgrade.sql.vpp") diff --git a/spring-batch-core/src/main/sql/sqlserver.properties b/spring-batch-core/src/main/sql/sqlserver.properties new file mode 100644 index 000000000..9ab4484cb --- /dev/null +++ b/spring-batch-core/src/main/sql/sqlserver.properties @@ -0,0 +1,10 @@ +# SQL language oddities +BIGINT = BIGINT +IDENTITY = +GENERATED = +DOUBLE = DOUBLE PRECISION +BLOB = IMAGE +TIMESTAMP = DATETIME +VARCHAR = VARCHAR +# for generating drop statements... +SEQUENCE = TABLE diff --git a/spring-batch-core/src/main/sql/sqlserver.vpp b/spring-batch-core/src/main/sql/sqlserver.vpp new file mode 100644 index 000000000..1c798e451 --- /dev/null +++ b/spring-batch-core/src/main/sql/sqlserver.vpp @@ -0,0 +1,3 @@ +#macro (sequence $name)CREATE TABLE ${name} (ID BIGINT IDENTITY); +#end +#macro (notnull $name $type)ALTER COLUMN ${name} ${type} NOT NULL#end diff --git a/spring-batch-core/src/main/sql/sybase.properties b/spring-batch-core/src/main/sql/sybase.properties new file mode 100644 index 000000000..35d7c8d06 --- /dev/null +++ b/spring-batch-core/src/main/sql/sybase.properties @@ -0,0 +1,11 @@ +# SQL language oddities +BIGINT = BIGINT +IDENTITY = +GENERATED = +DOUBLE = DOUBLE PRECISION +BLOB = IMAGE +TIMESTAMP = DATETIME +VARCHAR = VARCHAR +NULL = NULL +# for generating drop statements... +SEQUENCE = TABLE diff --git a/spring-batch-core/src/main/sql/sybase.vpp b/spring-batch-core/src/main/sql/sybase.vpp new file mode 100644 index 000000000..1c798e451 --- /dev/null +++ b/spring-batch-core/src/main/sql/sybase.vpp @@ -0,0 +1,3 @@ +#macro (sequence $name)CREATE TABLE ${name} (ID BIGINT IDENTITY); +#end +#macro (notnull $name $type)ALTER COLUMN ${name} ${type} NOT NULL#end diff --git a/spring-batch-core/src/main/sql/tables-context.sql.vpp b/spring-batch-core/src/main/sql/tables-context.sql.vpp index da13284d6..f588b355f 100644 --- a/spring-batch-core/src/main/sql/tables-context.sql.vpp +++ b/spring-batch-core/src/main/sql/tables-context.sql.vpp @@ -1,11 +1,11 @@ CREATE TABLE BATCH_EXECUTION_CONTEXT ( - EXECUTION_ID ${BIGINT} NOT NULL , - DISCRIMINATOR ${VARCHAR}(1) NOT NULL , - TYPE_CD ${VARCHAR}(6) NOT NULL , - KEY_NAME ${VARCHAR}(1000) NOT NULL , - STRING_VAL ${VARCHAR}(1000) , - DATE_VAL ${TIMESTAMP} DEFAULT NULL , - LONG_VAL ${BIGINT} , - DOUBLE_VAL ${DOUBLE} , - OBJECT_VAL ${BLOB} + EXECUTION_ID ${BIGINT} NOT NULL, + DISCRIMINATOR ${VARCHAR}(1) NOT NULL, + TYPE_CD ${VARCHAR}(6) NOT NULL, + KEY_NAME ${VARCHAR}(1000) NOT NULL, + STRING_VAL ${VARCHAR}(1000) $!{NULL}, + DATE_VAL ${TIMESTAMP} DEFAULT NULL, + LONG_VAL ${BIGINT} $!{NULL}, + DOUBLE_VAL ${DOUBLE} $!{NULL}, + OBJECT_VAL ${BLOB} $!{NULL} ) $!{VOODOO}; diff --git a/spring-batch-core/src/main/sql/tables-main.sql.vpp b/spring-batch-core/src/main/sql/tables-main.sql.vpp index f3365b18d..b54c5eeac 100644 --- a/spring-batch-core/src/main/sql/tables-main.sql.vpp +++ b/spring-batch-core/src/main/sql/tables-main.sql.vpp @@ -1,33 +1,33 @@ CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID ${BIGINT} $!{IDENTITY} NOT NULL PRIMARY KEY $!{GENERATED}, - VERSION ${BIGINT}, - JOB_NAME ${VARCHAR}(100) NOT NULL , - JOB_KEY ${VARCHAR}(2500) + VERSION ${BIGINT} $!{NULL}, + JOB_NAME ${VARCHAR}(100) NOT NULL, + JOB_KEY ${VARCHAR}(2500) $!{NULL} ) $!{VOODOO}; CREATE TABLE BATCH_JOB_EXECUTION ( JOB_EXECUTION_ID ${BIGINT} $!{IDENTITY} NOT NULL PRIMARY KEY $!{GENERATED}, - VERSION ${BIGINT}, + VERSION ${BIGINT} $!{NULL}, JOB_INSTANCE_ID ${BIGINT} NOT NULL, CREATE_TIME ${TIMESTAMP} NOT NULL, - START_TIME ${TIMESTAMP} DEFAULT NULL, - END_TIME ${TIMESTAMP} DEFAULT NULL, - STATUS ${VARCHAR}(10), - CONTINUABLE CHAR(1), - EXIT_CODE ${VARCHAR}(20), - EXIT_MESSAGE ${VARCHAR}(2500), + START_TIME ${TIMESTAMP} DEFAULT NULL $!{NULL}, + END_TIME ${TIMESTAMP} DEFAULT NULL $!{NULL}, + STATUS ${VARCHAR}(10) $!{NULL}, + CONTINUABLE CHAR(1) $!{NULL}, + EXIT_CODE ${VARCHAR}(20) $!{NULL}, + EXIT_MESSAGE ${VARCHAR}(2500) $!{NULL}, constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) $!{VOODOO}; CREATE TABLE BATCH_JOB_PARAMS ( JOB_INSTANCE_ID ${BIGINT} NOT NULL , - TYPE_CD ${VARCHAR}(6) NOT NULL , + TYPE_CD ${VARCHAR}(6) NOT NULL , KEY_NAME ${VARCHAR}(100) NOT NULL , - STRING_VAL ${VARCHAR}(250) , - DATE_VAL ${TIMESTAMP} DEFAULT NULL, - LONG_VAL ${BIGINT} , - DOUBLE_VAL ${DOUBLE}, + STRING_VAL ${VARCHAR}(250) $!{NULL}, + DATE_VAL ${TIMESTAMP} DEFAULT NULL $!{NULL}, + LONG_VAL ${BIGINT} $!{NULL}, + DOUBLE_VAL ${DOUBLE} $!{NULL}, constraint JOB_INST_PARAMS_FK foreign key (JOB_INSTANCE_ID) references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) ) $!{VOODOO}; @@ -38,16 +38,16 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STEP_NAME ${VARCHAR}(100) NOT NULL, JOB_EXECUTION_ID ${BIGINT} NOT NULL, START_TIME ${TIMESTAMP} NOT NULL , - END_TIME ${TIMESTAMP} DEFAULT NULL, - STATUS ${VARCHAR}(10), - COMMIT_COUNT ${BIGINT} , - ITEM_COUNT ${BIGINT} , - READ_SKIP_COUNT ${BIGINT} , - WRITE_SKIP_COUNT ${BIGINT} , - ROLLBACK_COUNT ${BIGINT} , - CONTINUABLE CHAR(1), - EXIT_CODE ${VARCHAR}(20), - EXIT_MESSAGE ${VARCHAR}(2500), + END_TIME ${TIMESTAMP} DEFAULT NULL $!{NULL}, + STATUS ${VARCHAR}(10) $!{NULL}, + COMMIT_COUNT ${BIGINT} $!{NULL}, + ITEM_COUNT ${BIGINT} $!{NULL}, + READ_SKIP_COUNT ${BIGINT} $!{NULL}, + WRITE_SKIP_COUNT ${BIGINT} $!{NULL}, + ROLLBACK_COUNT ${BIGINT} $!{NULL}, + CONTINUABLE CHAR(1) $!{NULL}, + EXIT_CODE ${VARCHAR}(20) $!{NULL}, + EXIT_MESSAGE ${VARCHAR}(2500) $!{NULL}, constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) ) $!{VOODOO}; diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java index 6524a3cab..1ba00bee1 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java @@ -24,6 +24,8 @@ import org.springframework.jdbc.support.incrementer.HsqlMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer; +import org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer; +import org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer; /** * Default implementation of the {@link DataFieldMaxValueIncrementerFactory} @@ -38,6 +40,8 @@ import org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIn *
  • mysql
  • *
  • oracle
  • *
  • postgres
  • + *
  • sqlserver
  • + *
  • sybase
  • * * * @author Lucas Ward @@ -57,15 +61,19 @@ public class DefaultDataFieldMaxValueIncrementerFactory implements DataFieldMaxV static final String DB_TYPE_POSTGRES = "postgres"; + static final String DB_TYPE_SQLSERVER = "sqlserver"; + + static final String DB_TYPE_SYBASE = "sybase"; + private DataSource dataSource; - private String incrementerColumnName = "id"; + private String incrementerColumnName = "ID"; /** - * Public setter for the column name (defaults to "id") in the incrementer. - * Only used by some platforms (Derby, HSQL, MySQL), and should be fine for - * use with Spring Batch meta data as long as the default batch schema - * hasn't been changed. + * Public setter for the column name (defaults to "ID") in the incrementer. + * Only used by some platforms (Derby, HSQL, MySQL, SQL Server and Sybase), + * and should be fine for use with Spring Batch meta data as long as the default + * batch schema hasn't been changed. * * @param incrementerColumnName the primary key column name to set */ @@ -96,6 +104,12 @@ public class DefaultDataFieldMaxValueIncrementerFactory implements DataFieldMaxV else if (DB_TYPE_POSTGRES.equals(incrementerType)) { return new PostgreSQLSequenceMaxValueIncrementer(dataSource, incrementerName); } + else if (DB_TYPE_SQLSERVER.equals(incrementerType)) { + return new SqlServerMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName); + } + else if (DB_TYPE_SYBASE.equals(incrementerType)) { + return new SybaseMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName); + } throw new IllegalArgumentException("databaseType argument was not on the approved list"); } @@ -103,7 +117,8 @@ public class DefaultDataFieldMaxValueIncrementerFactory implements DataFieldMaxV public boolean isSupportedIncrementerType(String incrementerType) { if (!DB_TYPE_DB2.equals(incrementerType) && !DB_TYPE_DERBY.equals(incrementerType) && !DB_TYPE_HSQL.equals(incrementerType) && !DB_TYPE_MYSQL.equals(incrementerType) - && !DB_TYPE_ORACLE.equals(incrementerType) && !DB_TYPE_POSTGRES.equals(incrementerType)) { + && !DB_TYPE_ORACLE.equals(incrementerType) && !DB_TYPE_POSTGRES.equals(incrementerType) + && !DB_TYPE_SQLSERVER.equals(incrementerType) && !DB_TYPE_SYBASE.equals(incrementerType)) { return false; } @@ -113,6 +128,7 @@ public class DefaultDataFieldMaxValueIncrementerFactory implements DataFieldMaxV } public String[] getSupportedIncrementerTypes() { - return new String[] { DB_TYPE_DB2, DB_TYPE_DERBY, DB_TYPE_HSQL, DB_TYPE_MYSQL, DB_TYPE_ORACLE, DB_TYPE_POSTGRES }; + return new String[] { DB_TYPE_DB2, DB_TYPE_DERBY, DB_TYPE_HSQL, DB_TYPE_MYSQL, + DB_TYPE_ORACLE, DB_TYPE_POSTGRES, DB_TYPE_SQLSERVER, DB_TYPE_SYBASE }; } } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactoryTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactoryTests.java index 9ae585c29..0c427b87d 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactoryTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactoryTests.java @@ -26,6 +26,8 @@ import org.springframework.jdbc.support.incrementer.HsqlMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer; +import org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer; +import org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer; /** * @author Lucas Ward @@ -52,6 +54,8 @@ public class DefaultDataFieldMaxValueIncrementerFactoryTests extends TestCase { assertTrue(factory.isSupportedIncrementerType("oracle")); assertTrue(factory.isSupportedIncrementerType("postgres")); assertTrue(factory.isSupportedIncrementerType("hsql")); + assertTrue(factory.isSupportedIncrementerType("sqlserver")); + assertTrue(factory.isSupportedIncrementerType("sybase")); } public void testUnsupportedDatabaseType(){ @@ -103,5 +107,13 @@ public class DefaultDataFieldMaxValueIncrementerFactoryTests extends TestCase { assertTrue(factory.getIncrementer("postgres", "NAME") instanceof PostgreSQLSequenceMaxValueIncrementer); } + public void testMsSqlServer(){ + assertTrue(factory.getIncrementer("sqlserver", "NAME") instanceof SqlServerMaxValueIncrementer); + } + + public void testSybase(){ + assertTrue(factory.getIncrementer("sybase", "NAME") instanceof SybaseMaxValueIncrementer); + } + }