BATCH-760: addressed some code duplication issues - factored out code to a utility class
This commit is contained in:
@@ -18,6 +18,7 @@ package org.springframework.batch.item.database.support;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||
|
||||
import java.util.List;
|
||||
@@ -56,14 +57,7 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
|
||||
* @param selectClause SELECT clause part of SQL query string
|
||||
*/
|
||||
public void setSelectClause(String selectClause) {
|
||||
String keyWord = "select ";
|
||||
String temp = selectClause.trim();
|
||||
if (temp.toLowerCase().startsWith(keyWord) && temp.length() > keyWord.length()) {
|
||||
this.selectClause = temp.substring(keyWord.length());
|
||||
}
|
||||
else {
|
||||
this.selectClause = temp;
|
||||
}
|
||||
this.selectClause = removeKeyWord("select", selectClause);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,14 +72,7 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
|
||||
* @param fromClause FROM clause part of SQL query string
|
||||
*/
|
||||
public void setFromClause(String fromClause) {
|
||||
String keyWord = "from ";
|
||||
String temp = fromClause.trim();
|
||||
if (temp.toLowerCase().startsWith(keyWord) && temp.length() > keyWord.length()) {
|
||||
this.fromClause = temp.substring(keyWord.length());
|
||||
}
|
||||
else {
|
||||
this.fromClause = temp;
|
||||
}
|
||||
this.fromClause = removeKeyWord("from", fromClause);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -100,13 +87,11 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
|
||||
* @param whereClause WHERE clause part of SQL query string
|
||||
*/
|
||||
public void setWhereClause(String whereClause) {
|
||||
String keyWord = "where ";
|
||||
String temp = whereClause.trim();
|
||||
if (temp.toLowerCase().startsWith(keyWord) && temp.length() > keyWord.length()) {
|
||||
this.whereClause = temp.substring(keyWord.length());
|
||||
if (StringUtils.hasText(whereClause)) {
|
||||
this.whereClause = removeKeyWord("where", whereClause);
|
||||
}
|
||||
else {
|
||||
this.whereClause = temp;
|
||||
this.whereClause = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,4 +167,15 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
|
||||
|
||||
public abstract String generateJumpToItemQuery(int itemIndex, int pageSize);
|
||||
|
||||
private String removeKeyWord(String keyWord, String clause) {
|
||||
String temp = clause.trim();
|
||||
String keyWordString = keyWord + " ";
|
||||
if (temp.toLowerCase().startsWith(keyWordString) && temp.length() > keyWordString.length()) {
|
||||
return temp.substring(keyWordString.length());
|
||||
}
|
||||
else {
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Oracle implementation of a {@link PagingQueryProvider} using
|
||||
* DB2 implementation of a {@link PagingQueryProvider} using
|
||||
* database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
@@ -11,31 +26,16 @@ public class Db2PagingQueryProvider extends SqlWindowingPagingQueryProvider {
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" FETCH FIRST ").append(pageSize).append(" ROWS ONLY");
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateLimitSqlQuery(this, false, buildLimitClause(pageSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" FETCH FIRST ").append(pageSize).append(" ROWS ONLY");
|
||||
return SqlPagingQueryUtils.generateLimitSqlQuery(this, true, buildLimitClause(pageSize));
|
||||
}
|
||||
|
||||
return sql.toString();
|
||||
private String buildLimitClause(int pageSize) {
|
||||
return new StringBuilder().append("FETCH FIRST ").append(pageSize).append(" ROWS ONLY").toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package org.springframework.batch.item.database.support;
|
||||
|
||||
/**
|
||||
* MySQL implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using database specific features.
|
||||
* HSQLDB implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
* @since 2.0
|
||||
@@ -25,29 +25,16 @@ public class HsqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateTopSqlQuery(this, false, buildTopClause(pageSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
return SqlPagingQueryUtils.generateTopSqlQuery(this, true, buildTopClause(pageSize));
|
||||
}
|
||||
|
||||
return sql.toString();
|
||||
private String buildTopClause(int pageSize) {
|
||||
return new StringBuilder().append("TOP ").append(pageSize).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -55,13 +42,8 @@ public class HsqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
|
||||
int page = itemIndex / pageSize;
|
||||
int offset = (page * pageSize) - 1;
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT LIMIT ").append(offset).append(" 1 ").append(getSortKey()).append(" AS SORT_KEY");
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
String topClause = new StringBuilder().append("LIMIT ").append(offset).append(" 1").toString();
|
||||
return SqlPagingQueryUtils.generateTopJumpToQuery(this, topClause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package org.springframework.batch.item.database.support;
|
||||
|
||||
/**
|
||||
* MySQL implementation of a {@link PagingQueryProvider} using database specific features.
|
||||
* MySQL implementation of a {@link PagingQueryProvider} using database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
* @since 2.0
|
||||
@@ -25,31 +25,16 @@ public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" LIMIT ").append(pageSize);
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateLimitSqlQuery(this, false, buildLimitClause(pageSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" LIMIT ").append(pageSize);
|
||||
return SqlPagingQueryUtils.generateLimitSqlQuery(this, true, buildLimitClause(pageSize));
|
||||
}
|
||||
|
||||
return sql.toString();
|
||||
private String buildLimitClause(int pageSize) {
|
||||
return new StringBuilder().append("LIMIT ").append(pageSize).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,14 +42,8 @@ public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
|
||||
int page = itemIndex / pageSize;
|
||||
int offset = (page * pageSize) - 1;
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSortKey()).append(" AS SORT_KEY");
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" LIMIT ").append(offset).append(", 1");
|
||||
|
||||
return sql.toString();
|
||||
String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(", 1").toString();
|
||||
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Oracle implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using
|
||||
* Oracle implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using
|
||||
* database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
@@ -11,34 +26,17 @@ public class OraclePagingQueryProvider extends SqlWindowingPagingQueryProvider {
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append("ROWNUM <= ").append(pageSize);
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
return SqlPagingQueryUtils.generateRowNumSqlQuery(this, false, buildRowNumClause(pageSize));
|
||||
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" AND ROWNUM <= ").append(pageSize);
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateRowNumSqlQuery(this, true, buildRowNumClause(pageSize));
|
||||
}
|
||||
|
||||
private String buildRowNumClause(int pageSize) {
|
||||
return new StringBuilder().append("ROWNUM <= ").append(pageSize).toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* MySQL implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using database specific features.
|
||||
* Postgres implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
* @since 2.0
|
||||
@@ -10,46 +25,25 @@ public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" LIMIT ").append(pageSize);
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateLimitSqlQuery(this, false, buildLimitClause(pageSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" LIMIT ").append(pageSize);
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateLimitSqlQuery(this, true, buildLimitClause(pageSize));
|
||||
}
|
||||
|
||||
private String buildLimitClause(int pageSize) {
|
||||
return new StringBuilder().append("LIMIT ").append(pageSize).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
|
||||
int page = itemIndex / pageSize;
|
||||
int offset = (page * pageSize) - 1;
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(getSortKey()).append(" AS SORT_KEY");
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
sql.append(" LIMIT ").append(offset).append(" 1");
|
||||
|
||||
return sql.toString();
|
||||
String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(" 1").toString();
|
||||
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Utility class that generates the actual SQL statements used by query providers.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
* @since 2.0
|
||||
*/
|
||||
public class SqlPagingQueryUtils {
|
||||
|
||||
public static String generateLimitSqlQuery(AbstractSqlPagingQueryProvider provider, boolean remainingPageQuery, String limitClause) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(provider.getSelectClause());
|
||||
sql.append(" FROM ").append(provider.getFromClause());
|
||||
buildWhereClause(provider, remainingPageQuery, sql);
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey()).append(" ASC ");
|
||||
sql.append(limitClause);
|
||||
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
public static String generateTopSqlQuery(AbstractSqlPagingQueryProvider provider, boolean remainingPageQuery, String topClause) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(topClause).append(" ").append(provider.getSelectClause());
|
||||
sql.append(" FROM ").append(provider.getFromClause());
|
||||
buildWhereClause(provider, remainingPageQuery, sql);
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
public static String generateRowNumSqlQuery(AbstractSqlPagingQueryProvider provider, boolean remainingPageQuery, String rowNumClause) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(provider.getSelectClause());
|
||||
sql.append(" FROM ").append(provider.getFromClause());
|
||||
buildWhereClause(provider, remainingPageQuery, sql);
|
||||
sql.append(provider.getWhereClause() != null ? " AND " : " WHERE ").append(rowNumClause);
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
|
||||
}
|
||||
|
||||
private static void buildWhereClause(AbstractSqlPagingQueryProvider provider, boolean remainingPageQuery, StringBuilder sql) {
|
||||
if (remainingPageQuery) {
|
||||
sql.append(" WHERE ");
|
||||
if (provider.getWhereClause() != null) {
|
||||
sql.append(provider.getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(provider.getSortKey()).append(" > ").append(provider.getSortKeyPlaceHolder());
|
||||
}
|
||||
else {
|
||||
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
|
||||
}
|
||||
}
|
||||
|
||||
public static String generateTopJumpToQuery(AbstractSqlPagingQueryProvider provider, String topClause) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
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());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
public static String generateLimitJumpToQuery(AbstractSqlPagingQueryProvider provider, String limitClause) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append(provider.getSortKey()).append(" AS SORT_KEY");
|
||||
sql.append(" FROM ").append(provider.getFromClause());
|
||||
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey()).append(" ASC ");
|
||||
sql.append( limitClause);
|
||||
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,22 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Sql Server implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using
|
||||
* Sql Server implementation of a {@link org.springframework.batch.item.database.support.PagingQueryProvider} using
|
||||
* database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
@@ -11,28 +26,15 @@ public class SqlServerPagingQueryProvider extends SqlWindowingPagingQueryProvide
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateTopSqlQuery(this, false, buildTopClause(pageSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
return SqlPagingQueryUtils.generateTopSqlQuery(this, true, buildTopClause(pageSize));
|
||||
}
|
||||
|
||||
return sql.toString();
|
||||
private String buildTopClause(int pageSize) {
|
||||
return new StringBuilder().append("TOP ").append(pageSize).toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* Sybase implementation of a {@link PagingQueryProvider} using
|
||||
* Sybase implementation of a {@link PagingQueryProvider} using
|
||||
* database specific features.
|
||||
*
|
||||
* @author Thomas Risberg
|
||||
@@ -11,28 +26,16 @@ public class SybasePagingQueryProvider extends SqlWindowingPagingQueryProvider {
|
||||
|
||||
@Override
|
||||
public String generateFirstPageQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateTopSqlQuery(this, false, buildTopClause(pageSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateRemainingPagesQuery(int pageSize) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ").append("TOP ").append(pageSize).append(" ").append(getSelectClause());
|
||||
sql.append(" FROM ").append(getFromClause());
|
||||
sql.append(" WHERE ");
|
||||
if (getWhereClause() != null) {
|
||||
sql.append(getWhereClause());
|
||||
sql.append(" AND ");
|
||||
}
|
||||
sql.append(getSortKey()).append(" > ").append(getSortKeyPlaceHolder());
|
||||
sql.append(" ORDER BY ").append(getSortKey()).append(" ASC");
|
||||
|
||||
return sql.toString();
|
||||
return SqlPagingQueryUtils.generateTopSqlQuery(this, true, buildTopClause(pageSize));
|
||||
}
|
||||
|
||||
private String buildTopClause(int pageSize) {
|
||||
return new StringBuilder().append("TOP ").append(pageSize).toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user