BATCH-1848 - Strip table alias from sortKey column when determining start after value from result set and from all order by clauses (some databases, including Derby don't support one)
This commit is contained in:
@@ -309,7 +309,7 @@ public class JdbcPagingItemReader<T> extends AbstractPagingItemReader<T> impleme
|
||||
|
||||
private class PagingRowMapper implements RowMapper {
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
startAfterValue = rs.getObject(queryProvider.getSortKey());
|
||||
startAfterValue = rs.getObject(queryProvider.getSortKeyWithoutAlias());
|
||||
return rowMapper.mapRow(rs, rowNum);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,4 +82,11 @@ public interface PagingQueryProvider {
|
||||
*/
|
||||
String getSortKey();
|
||||
|
||||
/**
|
||||
* The sort key (unique single column name) without alias.
|
||||
*
|
||||
* @return the sort key used to order the query (without alias)
|
||||
*/
|
||||
String getSortKeyWithoutAlias();
|
||||
|
||||
}
|
||||
|
||||
@@ -138,13 +138,29 @@ public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvi
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return sortKey key to use to sort and limit page content
|
||||
*/
|
||||
public String getSortKey() {
|
||||
return sortKey;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return sortKey key to use to sort and limit page content (without alias)
|
||||
*/
|
||||
public String getSortKeyWithoutAlias() {
|
||||
String sortKey = getSortKey();
|
||||
int separator = sortKey.indexOf('.');
|
||||
if (separator > 0) {
|
||||
int columnIndex = separator + 1;
|
||||
if (columnIndex < sortKey.length()) {
|
||||
sortKey = sortKey.substring(columnIndex);
|
||||
}
|
||||
}
|
||||
return sortKey;
|
||||
}
|
||||
|
||||
public int getParameterCount() {
|
||||
return parameterCount;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public class SqlPagingQueryUtils {
|
||||
sql.append("SELECT ").append(provider.getSelectClause());
|
||||
sql.append(" FROM ").append(provider.getFromClause());
|
||||
buildWhereClause(provider, remainingPageQuery, sql);
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
|
||||
buildAscendingClause(provider, sql);
|
||||
sql.append(" " + limitClause);
|
||||
|
||||
@@ -65,7 +65,7 @@ public class SqlPagingQueryUtils {
|
||||
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());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
|
||||
buildAscendingClause(provider, sql);
|
||||
|
||||
return sql.toString();
|
||||
@@ -104,7 +104,7 @@ public class SqlPagingQueryUtils {
|
||||
sql.append("SELECT * FROM (SELECT ").append(selectClause).append(", ROWNUM as TMP_ROW_NUM");
|
||||
sql.append(" FROM ").append(provider.getFromClause());
|
||||
buildWhereClause(provider, remainingPageQuery, sql);
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
|
||||
buildAscendingClause(provider, sql);
|
||||
sql.append(") WHERE ").append(rowNumClause);
|
||||
|
||||
@@ -125,7 +125,7 @@ public class SqlPagingQueryUtils {
|
||||
.append(", ROWNUM as TMP_ROW_NUM");
|
||||
sql.append(" FROM (SELECT ").append(innerSelectClause).append(" FROM ").append(provider.getFromClause());
|
||||
buildWhereClause(provider, remainingPageQuery, sql);
|
||||
sql.append(" ORDER BY ").append(provider.getSortKey());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
|
||||
buildAscendingClause(provider, sql);
|
||||
sql.append(")) WHERE ").append(rowNumClause);
|
||||
|
||||
@@ -146,7 +146,7 @@ public class SqlPagingQueryUtils {
|
||||
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());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
|
||||
buildAscendingClause(provider, sql);
|
||||
sql.append(" " + limitClause);
|
||||
|
||||
@@ -166,7 +166,7 @@ public class SqlPagingQueryUtils {
|
||||
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());
|
||||
sql.append(" ORDER BY ").append(provider.getSortKeyWithoutAlias());
|
||||
buildAscendingClause(provider, sql);
|
||||
|
||||
return sql.toString();
|
||||
|
||||
@@ -110,7 +110,7 @@ public class SqlWindowingPagingQueryProvider extends AbstractSqlPagingQueryProvi
|
||||
}
|
||||
|
||||
protected String getOverClause() {
|
||||
return "ORDER BY " + getSortKey() + " " + getAscendingClause();
|
||||
return "ORDER BY " + getSortKeyWithoutAlias() + " " + getAscendingClause();
|
||||
}
|
||||
|
||||
protected String getOverSubstituteClauseStart() {
|
||||
|
||||
Reference in New Issue
Block a user