Skip to content

Commit 89b59e0

Browse files
committed
code: more beautiful query building
Signed-off-by: Artemiy Chereshnevvv <[email protected]>
1 parent 746dc15 commit 89b59e0

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StatementFactory.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,10 @@ public String build(MapSqlParameterSource parameterSource) {
201201

202202
SelectBuilder.SelectLimitOffset limitOffsetBuilder = createSelectClause(entity, table);
203203
SelectBuilder.SelectWhere whereBuilder = applyLimitAndOffset(limitOffsetBuilder);
204-
criteria = applyScrollCriteria(criteria, scrollPosition, sort);
205204

206205
SelectBuilder.SelectOrdered selectOrderBuilder = applyCriteria(criteria, entity, table, parameterSource,
207206
whereBuilder);
208207

209-
sort = applyCriteriaOrderBy(sort, scrollPosition);
210208
selectOrderBuilder = applyOrderBy(sort, entity, table, selectOrderBuilder);
211209

212210
SelectBuilder.BuildSelect completedBuildSelect = selectOrderBuilder;
@@ -219,7 +217,7 @@ public String build(MapSqlParameterSource parameterSource) {
219217
return SqlRenderer.create(renderContextFactory.createRenderContext()).render(select);
220218
}
221219

222-
Sort applyCriteriaOrderBy(Sort sort, @Nullable ScrollPosition scrollPosition) {
220+
Sort applyScrollOrderBy(Sort sort, @Nullable ScrollPosition scrollPosition) {
223221
if (!(scrollPosition instanceof KeysetScrollPosition) || scrollPosition.isInitial())
224222
return sort;
225223

@@ -257,28 +255,26 @@ Sort applyCriteriaOrderBy(Sort sort, @Nullable ScrollPosition scrollPosition) {
257255
.and(Sort.by(defaultSort, notSorted.toArray(new String[0])));
258256
}
259257

260-
Criteria applyScrollCriteria(Criteria criteria, @Nullable ScrollPosition position, Sort sort) {
258+
Criteria applyScrollCriteria(@Nullable ScrollPosition position, Sort sort) {
261259
if (!(position instanceof KeysetScrollPosition keyset)
262260
|| position.isInitial()
263261
|| keyset.getKeys().isEmpty()) {
264-
return criteria;
262+
return Criteria.empty();
265263
}
266264

267265
Map<String, Object> keys = keyset.getKeys();
268266
List<String> columns = new ArrayList<>(keys.keySet());
269267
List<Object> values = new ArrayList<>(keys.values());
270268

271269
if (columns.isEmpty() || values.isEmpty())
272-
return criteria;
270+
return Criteria.empty();
273271

274272
Map<String, Sort.Direction> directions =
275273
sort.stream().collect(Collectors.toMap(Sort.Order::getProperty, Sort.Order::getDirection));
276274

277275
Sort.Direction dir = directions.getOrDefault(columns.get(0), Sort.DEFAULT_DIRECTION);
278276

279-
Criteria scroll = buildKeysetCriteria(columns, values, keyset.scrollsForward(), dir);
280-
281-
return criteria.and(scroll);
277+
return buildKeysetCriteria(columns, values, keyset.scrollsForward(), dir);
282278
}
283279

284280
Criteria buildKeysetCriteria(List<String> columns, List<Object> values, boolean isForward, Sort.Direction dir) {
@@ -313,16 +309,22 @@ Criteria buildKeysetCriteria(List<String> columns, List<Object> values, boolean
313309
SelectBuilder.SelectOrdered applyOrderBy(Sort sort, RelationalPersistentEntity<?> entity, Table table,
314310
SelectBuilder.SelectOrdered selectOrdered) {
315311

316-
return sort.isSorted() ? //
317-
selectOrdered.orderBy(queryMapper.getMappedSort(table, sort, entity)) //
312+
Sort resultSort = applyScrollOrderBy(sort, scrollPosition);
313+
314+
return resultSort.isSorted() ? //
315+
selectOrdered.orderBy(queryMapper.getMappedSort(table, resultSort, entity)) //
318316
: selectOrdered;
319317
}
320318

321319
SelectBuilder.SelectOrdered applyCriteria(@Nullable Criteria criteria, RelationalPersistentEntity<?> entity,
322320
Table table, MapSqlParameterSource parameterSource, SelectBuilder.SelectWhere whereBuilder) {
323321

324-
return criteria != null && !criteria.isEmpty() //
325-
? whereBuilder.where(queryMapper.getMappedObject(parameterSource, criteria, table, entity)) //
322+
Criteria resultCriteria = criteria == null
323+
? applyScrollCriteria(scrollPosition, sort)
324+
: criteria.and(applyScrollCriteria(scrollPosition, sort));
325+
326+
return !resultCriteria.isEmpty()
327+
? whereBuilder.where(queryMapper.getMappedObject(parameterSource, resultCriteria, table, entity)) //
326328
: whereBuilder;
327329
}
328330

0 commit comments

Comments
 (0)