1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.item.database.support;
18
19 import org.springframework.util.StringUtils;
20
21
22
23
24
25
26
27
28
29
30
31 public class PostgresPagingQueryProvider extends AbstractSqlPagingQueryProvider {
32
33 @Override
34 public String generateFirstPageQuery(int pageSize) {
35 return SqlPagingQueryUtils.generateLimitSqlQuery(this, false, buildLimitClause(pageSize));
36 }
37
38 @Override
39 public String generateRemainingPagesQuery(int pageSize) {
40 if(StringUtils.hasText(getGroupClause())) {
41 return SqlPagingQueryUtils.generateLimitGroupedSqlQuery(this, true, buildLimitClause(pageSize));
42 }
43 else {
44 return SqlPagingQueryUtils.generateLimitSqlQuery(this, true, buildLimitClause(pageSize));
45 }
46 }
47
48 private String buildLimitClause(int pageSize) {
49 return new StringBuilder().append("LIMIT ").append(pageSize).toString();
50 }
51
52 @Override
53 public String generateJumpToItemQuery(int itemIndex, int pageSize) {
54 int page = itemIndex / pageSize;
55 int offset = (page * pageSize) - 1;
56 offset = offset<0 ? 0 : offset;
57 String limitClause = new StringBuilder().append("LIMIT 1 OFFSET ").append(offset).toString();
58 return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
59 }
60
61 }