From 191c0d7cd70ff12ab8e16edd4a01c599dc80cb9a Mon Sep 17 00:00:00 2001 From: dsyer Date: Sat, 10 Jan 2009 15:29:44 +0000 Subject: [PATCH] RESOLVED - issue BATCH-986: Provide factory bean for SqlPagingQueryProvider Removed duplicate class SimpleDelegatingPagingQueryProvider. --- .../SimpleDelegatingPagingQueryProvider.java | 96 ------- ...pleDelegatingPagingQueryProviderTests.java | 256 ------------------ 2 files changed, 352 deletions(-) delete mode 100644 spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProvider.java delete mode 100644 spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProviderTests.java diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProvider.java deleted file mode 100644 index 2eec1be33..000000000 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProvider.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2006-2008 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.item.database.support; - -import static org.springframework.batch.support.DatabaseType.*; - -import java.util.Arrays; - -import org.springframework.batch.support.DatabaseType; -import org.springframework.dao.InvalidDataAccessResourceUsageException; - -import javax.sql.DataSource; - -/** - * Generic Paging Query Provider using standard SQL:2003 windowing functions. These features are supported by - * DB2, Oracle, SQL Server 2005, Sybase and Apache Derby version 10.4.1.3 - * - * @author Thomas Risberg - * @since 2.0 - */ -public class SimpleDelegatingPagingQueryProvider extends AbstractSqlPagingQueryProvider { - - AbstractSqlPagingQueryProvider delegate; - - @Override - public void init(DataSource dataSource) throws Exception { - super.init(dataSource); - - DatabaseType type = DatabaseType.fromMetaData(dataSource); - if (type == DERBY) { - delegate = new DerbyPagingQueryProvider(); - } - else if (type == DB2 || type == DB2ZOS) { - delegate = new Db2PagingQueryProvider(); - } - else if (type == HSQL) { - delegate = new HsqlPagingQueryProvider(); - } - else if (type == SQLSERVER) { - delegate = new SqlServerPagingQueryProvider(); - } - else if (type == MYSQL) { - delegate = new MySqlPagingQueryProvider(); - } - else if (type == ORACLE) { - delegate = new OraclePagingQueryProvider(); - } - else if (type == POSTGRES) { - delegate = new PostgresPagingQueryProvider(); - } - else if (type == SYBASE) { - delegate = new SybasePagingQueryProvider(); - } - else { - throw new InvalidDataAccessResourceUsageException(type.name() + - " is not a supported database. The supported databases are " + - Arrays.toString(DatabaseType.values())); - } - delegate.setSelectClause(this.getSelectClause()); - delegate.setFromClause(this.getFromClause()); - if (this.getWhereClause() != null) { - delegate.setWhereClause(this.getWhereClause()); - } - delegate.setSortKey(this.getSortKey()); - delegate.init(dataSource); - } - - @Override - public String generateFirstPageQuery(int pageSize) { - return delegate.generateFirstPageQuery(pageSize); - } - - @Override - public String generateRemainingPagesQuery(int pageSize) { - return delegate.generateRemainingPagesQuery(pageSize); - } - - @Override - public String generateJumpToItemQuery(int itemIndex, int pageSize) { - return delegate.generateJumpToItemQuery(itemIndex, pageSize); - } - -} diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProviderTests.java deleted file mode 100644 index 6f6338365..000000000 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/SimpleDelegatingPagingQueryProviderTests.java +++ /dev/null @@ -1,256 +0,0 @@ -package org.springframework.batch.item.database.support; - -import static org.junit.Assert.fail; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; - -import org.junit.Test; -import org.junit.Assert; -import org.junit.Before; -import org.easymock.EasyMock; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.DatabaseMetaData; - -/** - * @author Thomas Risberg - */ -public class SimpleDelegatingPagingQueryProviderTests { - - protected AbstractSqlPagingQueryProvider pagingQueryProvider; - protected int pageSize; - DataSource ds; - Connection con; - DatabaseMetaData dmd; - - @Before - public void onSetUp() throws Exception { - ds = createMock(DataSource.class); - con = createMock(Connection.class); - dmd = createMock(DatabaseMetaData.class); - expect(con.getMetaData()).andReturn(dmd); - expect(ds.getConnection()).andReturn(con); - - pagingQueryProvider = new SimpleDelegatingPagingQueryProvider(); - initializeQueryProvider(pagingQueryProvider); - } - - @Test - public void testApacheDerby() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new DerbyPagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - expect(dmd.getDatabaseProductName()).andReturn("Apache Derby"); - DatabaseMetaData dmd2 = createMock(DatabaseMetaData.class); - expect(dmd2.getDatabaseProductVersion()).andReturn("10.4.1.3"); - expect(con.getMetaData()).andReturn(dmd2); - expect(ds.getConnection()).andReturn(con); - - EasyMock.replay(dmd2); - EasyMock.replay(con); - EasyMock.replay(dmd); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(con); - EasyMock.verify(dmd); - EasyMock.verify(dmd2); - } - - @Test - public void testDb2() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new Db2PagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("DB2/Linux"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testDb2ZOS() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new Db2PagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("DB2"); - expect(con.getMetaData()).andReturn(dmd); - expect(ds.getConnection()).andReturn(con); - EasyMock.expect(dmd.getDatabaseProductVersion()).andReturn("DSN08015"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testHsql() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new HsqlPagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("HSQL Database Engine"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testSqlServer() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new SqlServerPagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("Microsoft SQL Server"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testMySql() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new MySqlPagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("MySQL"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testOracle() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new OraclePagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("Oracle"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testPostgres() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new PostgresPagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("PostgreSQL"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testSybase() throws Exception { - AbstractSqlPagingQueryProvider queryProviderToBeUsed = new SybasePagingQueryProvider(); - initializeQueryProvider(queryProviderToBeUsed); - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("Sybase"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - pagingQueryProvider.init(ds); - String sql = queryProviderToBeUsed.generateFirstPageQuery(pageSize); - String s = pagingQueryProvider.generateFirstPageQuery(pageSize); - Assert.assertEquals("", sql, s); - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - @Test - public void testUnsupportedDatabase() throws Exception { - - EasyMock.expect(dmd.getDatabaseProductName()).andReturn("MyDB"); - EasyMock.replay(dmd); - EasyMock.replay(con); - EasyMock.replay(ds); - - try { - pagingQueryProvider.init(ds); - fail("Expected an InvalidDataAccessResourceUsageException since the MyDB database is not supported"); - } catch (IllegalArgumentException e) { - // expected - } - - EasyMock.verify(ds); - EasyMock.verify(con); - EasyMock.verify(dmd); - } - - private void initializeQueryProvider(AbstractSqlPagingQueryProvider queryProvider) throws Exception { - queryProvider.setSelectClause("id, name, age"); - queryProvider.setFromClause("foo"); - queryProvider.setWhereClause("bar = 1"); - queryProvider.setSortKey("id"); - } - - -}