Remove un-used code for jump-to-item queries

This commit is contained in:
Henning Poettker
2022-10-05 03:10:05 +02:00
committed by Mahmoud Ben Hassine
parent 1a65c00b8d
commit 220de61f75
33 changed files with 14 additions and 1023 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2019 the original author or authors.
* Copyright 2006-2022 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.
@@ -156,14 +156,10 @@ public abstract class AbstractPagingItemReader<T> extends AbstractItemCountingIt
current = itemIndex % pageSize;
}
doJumpToPage(itemIndex);
if (logger.isDebugEnabled()) {
logger.debug("Jumping to page " + getPage() + " and index " + current);
}
}
abstract protected void doJumpToPage(int itemIndex);
}

View File

@@ -157,10 +157,6 @@ public class HibernatePagingItemReader<T> extends AbstractPagingItemReader<T> im
}
@Override
protected void doJumpToPage(int itemIndex) {
}
@Override
protected void doClose() throws Exception {
helper.close();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -254,33 +254,6 @@ public class JdbcPagingItemReader<T> extends AbstractPagingItemReader<T> impleme
super.open(executionContext);
}
@Override
protected void doJumpToPage(int itemIndex) {
/*
* Normally this would be false (the startAfterValue is enough information to
* restart from.
*/
// TODO: this is dead code, startAfterValues is never null - see
// #open(ExecutionContext)
if (startAfterValues == null && getPage() > 0) {
String jumpToItemSql = queryProvider.generateJumpToItemQuery(itemIndex, getPageSize());
if (logger.isDebugEnabled()) {
logger.debug("SQL used for jumping: [" + jumpToItemSql + "]");
}
if (this.queryProvider.isUsingNamedParameters()) {
startAfterValues = namedParameterJdbcTemplate.queryForMap(jumpToItemSql,
getParameterMap(parameterValues, null));
}
else {
startAfterValues = getJdbcTemplate().queryForMap(jumpToItemSql,
getParameterList(parameterValues, null).toArray());
}
}
}
private Map<String, Object> getParameterMap(Map<String, Object> values, Map<String, Object> sortKeyValues) {
Map<String, Object> parameterMap = new LinkedHashMap<>();
if (values != null) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -221,10 +221,6 @@ public class JpaPagingItemReader<T> extends AbstractPagingItemReader<T> {
} // end if
}
@Override
protected void doJumpToPage(int itemIndex) {
}
@Override
protected void doClose() throws Exception {
entityManager.close();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2012 the original author or authors.
* Copyright 2006-2022 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.
@@ -50,18 +50,6 @@ public interface PagingQueryProvider {
*/
String generateRemainingPagesQuery(int pageSize);
/**
*
* Generate the query that will provide the jump to item query. The itemIndex provided
* could be in the middle of the page and together with the page size it will be used
* to calculate the last index of the preceding page to be able to retrieve the sort
* key for this row.
* @param itemIndex the index for the next item to be read
* @param pageSize number of rows to read for each page
* @return the generated query
*/
String generateJumpToItemQuery(int itemIndex, int pageSize);
/**
* The number of parameters that are declared in the query
* @return number of parameters

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -221,16 +221,6 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
@Override
public abstract String generateRemainingPagesQuery(int pageSize);
/**
* Method generating the query string to be used for jumping to a specific item
* position. This method must be implemented in sub classes.
* @param itemIndex the index of the item to jump to
* @param pageSize number of rows to read per page
* @return query string
*/
@Override
public abstract String generateJumpToItemQuery(int itemIndex, int pageSize);
private String removeKeyWord(String keyWord, String clause) {
String temp = clause.trim();
int length = keyWord.length();

View File

@@ -41,15 +41,4 @@ public class H2PagingQueryProvider extends AbstractSqlPagingQueryProvider {
return new StringBuilder().append("FETCH NEXT ").append(pageSize).append(" ROWS ONLY").toString();
}
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize) - 1;
offset = offset < 0 ? 0 : offset;
String limitClause = new StringBuilder().append("OFFSET ").append(offset).append(" ROWS FETCH NEXT 1 ROWS ONLY")
.toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
}

View File

@@ -47,13 +47,4 @@ public class HanaPagingQueryProvider extends AbstractSqlPagingQueryProvider {
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;
offset = offset < 0 ? 0 : offset;
String limitClause = new StringBuilder().append("LIMIT 1 OFFSET ").append(offset).toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2012 the original author or authors.
* Copyright 2006-2022 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.
@@ -48,14 +48,4 @@ public class HsqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
return new StringBuilder().append("TOP ").append(pageSize).toString();
}
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize) - 1;
offset = offset < 0 ? 0 : offset;
String topClause = new StringBuilder().append("LIMIT ").append(offset).append(" 1").toString();
return SqlPagingQueryUtils.generateTopJumpToQuery(this, topClause);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -48,14 +48,4 @@ public class MySqlPagingQueryProvider extends AbstractSqlPagingQueryProvider {
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;
offset = offset < 0 ? 0 : offset;
String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(", 1").toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2012 the original author or authors.
* Copyright 2006-2022 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.
@@ -16,10 +16,6 @@
package org.springframework.batch.item.database.support;
import java.util.Map;
import org.springframework.batch.item.database.Order;
/**
* Oracle implementation of a
* {@link org.springframework.batch.item.database.PagingQueryProvider} using database
@@ -41,29 +37,6 @@ public class OraclePagingQueryProvider extends AbstractSqlPagingQueryProvider {
return SqlPagingQueryUtils.generateRowNumSqlQuery(this, true, buildRowNumClause(pageSize));
}
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize);
offset = offset == 0 ? 1 : offset;
String sortKeySelect = this.getSortKeySelect();
return SqlPagingQueryUtils.generateRowNumSqlQueryWithNesting(this, sortKeySelect, sortKeySelect, false,
"TMP_ROW_NUM = " + offset);
}
private String getSortKeySelect() {
StringBuilder sql = new StringBuilder();
String prefix = "";
for (Map.Entry<String, Order> sortKey : this.getSortKeys().entrySet()) {
sql.append(prefix);
prefix = ", ";
sql.append(sortKey.getKey());
}
return sql.toString();
}
private String buildRowNumClause(int pageSize) {
return new StringBuilder().append("ROWNUM <= ").append(pageSize).toString();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -53,13 +53,4 @@ public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider
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;
offset = offset < 0 ? 0 : offset;
String limitClause = new StringBuilder().append("LIMIT 1 OFFSET ").append(offset).toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -201,66 +201,6 @@ public class SqlPagingQueryUtils {
}
public static String generateRowNumSqlQueryWithNesting(AbstractSqlPagingQueryProvider provider, String selectClause,
boolean remainingPageQuery, String rowNumClause) {
return generateRowNumSqlQueryWithNesting(provider, selectClause, selectClause, remainingPageQuery,
rowNumClause);
}
public static String generateRowNumSqlQueryWithNesting(AbstractSqlPagingQueryProvider provider,
String innerSelectClause, String outerSelectClause, boolean remainingPageQuery, String rowNumClause) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(outerSelectClause).append(" FROM (SELECT ").append(outerSelectClause).append(", ")
.append(StringUtils.hasText(provider.getGroupClause()) ? "MIN(ROWNUM) as TMP_ROW_NUM"
: "ROWNUM as TMP_ROW_NUM");
sql.append(" FROM (SELECT ").append(innerSelectClause).append(" FROM ").append(provider.getFromClause());
buildWhereClause(provider, remainingPageQuery, sql);
buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(buildSortClause(provider));
sql.append(")) WHERE ").append(rowNumClause);
return sql.toString();
}
/**
* Generate SQL query string using a LIMIT clause
* @param provider {@link AbstractSqlPagingQueryProvider} providing the implementation
* specifics
* @param limitClause the implementation specific top clause to be used
* @return the generated query
*/
public static String generateLimitJumpToQuery(AbstractSqlPagingQueryProvider provider, String limitClause) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(buildSortKeySelect(provider));
sql.append(" FROM ").append(provider.getFromClause());
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(buildSortClause(provider));
sql.append(" " + limitClause);
return sql.toString();
}
/**
* Generate SQL query string using a TOP clause
* @param provider {@link AbstractSqlPagingQueryProvider} providing the implementation
* specifics
* @param topClause the implementation specific top clause to be used
* @return the generated query
*/
public static String generateTopJumpToQuery(AbstractSqlPagingQueryProvider provider, String topClause) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(topClause).append(" ").append(buildSortKeySelect(provider));
sql.append(" FROM ").append(provider.getFromClause());
sql.append(provider.getWhereClause() == null ? "" : " WHERE " + provider.getWhereClause());
buildGroupByClause(provider, sql);
sql.append(" ORDER BY ").append(buildSortClause(provider));
return sql.toString();
}
/**
* Generates ORDER BY attributes based on the sort keys.
* @param provider the {@link AbstractSqlPagingQueryProvider} to be used for used for
@@ -352,22 +292,6 @@ public class SqlPagingQueryUtils {
sql.append(")");
}
private static String buildSortKeySelect(AbstractSqlPagingQueryProvider provider) {
StringBuilder select = new StringBuilder();
String prefix = "";
for (Map.Entry<String, Order> sortKey : provider.getSortKeys().entrySet()) {
select.append(prefix);
prefix = ", ";
select.append(sortKey.getKey());
}
return select.toString();
}
private static void buildWhereClause(AbstractSqlPagingQueryProvider provider, boolean remainingPageQuery,
StringBuilder sql) {
if (remainingPageQuery) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2012 the original author or authors.
* Copyright 2006-2022 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.
@@ -16,10 +16,6 @@
package org.springframework.batch.item.database.support;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.batch.item.database.Order;
import org.springframework.util.StringUtils;
/**
@@ -95,59 +91,6 @@ public class SqlWindowingPagingQueryProvider extends AbstractSqlPagingQueryProvi
return sql.toString();
}
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int lastRowNum = (page * pageSize);
if (lastRowNum <= 0) {
lastRowNum = 1;
}
StringBuilder sql = new StringBuilder();
sql.append("SELECT ");
buildSortKeySelect(sql, getSortKeysReplaced(extractTableAlias()));
sql.append(" FROM ( ");
sql.append("SELECT ");
buildSortKeySelect(sql);
sql.append(", ROW_NUMBER() OVER (").append(getOverClause());
sql.append(") AS ROW_NUMBER");
sql.append(getOverSubstituteClauseStart());
sql.append(" FROM ").append(getFromClause());
sql.append(getWhereClause() == null ? "" : " WHERE " + getWhereClause());
sql.append(getGroupClause() == null ? "" : " GROUP BY " + getGroupClause());
sql.append(getOverSubstituteClauseEnd());
sql.append(") ").append(getSubQueryAlias()).append("WHERE ").append(extractTableAlias()).append("ROW_NUMBER = ")
.append(lastRowNum);
sql.append(" ORDER BY ").append(SqlPagingQueryUtils.buildSortClause(getSortKeysReplaced(extractTableAlias())));
return sql.toString();
}
private Map<String, Order> getSortKeysReplaced(Object qualifierReplacement) {
final String newQualifier = "" + qualifierReplacement;
final Map<String, Order> sortKeys = new LinkedHashMap<>();
for (Map.Entry<String, Order> sortKey : getSortKeys().entrySet()) {
sortKeys.put(sortKey.getKey().replaceFirst("^.*\\.", newQualifier), sortKey.getValue());
}
return sortKeys;
}
private void buildSortKeySelect(StringBuilder sql) {
buildSortKeySelect(sql, null);
}
private void buildSortKeySelect(StringBuilder sql, Map<String, Order> sortKeys) {
String prefix = "";
if (sortKeys == null) {
sortKeys = getSortKeys();
}
for (Map.Entry<String, Order> sortKey : sortKeys.entrySet()) {
sql.append(prefix);
prefix = ", ";
sql.append(sortKey.getKey());
}
}
protected String getOverClause() {
StringBuilder sql = new StringBuilder();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2021 the original author or authors.
* Copyright 2014-2022 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.
@@ -58,23 +58,6 @@ public class SqlitePagingQueryProvider extends AbstractSqlPagingQueryProvider {
}
}
/*
* (non-Javadoc)
*
* @see
* org.springframework.batch.item.database.support.AbstractSqlPagingQueryProvider#
* generateJumpToItemQuery(int, int)
*/
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize) - 1;
offset = offset < 0 ? 0 : offset;
String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(", 1").toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
private String buildLimitClause(int pageSize) {
return new StringBuilder().append("LIMIT ").append(pageSize).toString();
}