From cbfb99fef26a0d99aec66bec818a23c9d9069d91 Mon Sep 17 00:00:00 2001 From: Ronny Perinke <23166289+sephiroth-j@users.noreply.github.com> Date: Wed, 20 Sep 2023 17:23:59 +0200 Subject: [PATCH] Use `singleOrEmpty()` instead of `buffer()` This commit avoids fetching and buffering results in temporary `List` buffers. See gh-31282 --- .../r2dbc/core/DefaultFetchSpec.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultFetchSpec.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultFetchSpec.java index 9c4585d53c4..d96cad5bcc2 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultFetchSpec.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultFetchSpec.java @@ -59,18 +59,11 @@ class DefaultFetchSpec implements FetchSpec { @Override public Mono one() { - return all().buffer(2) - .flatMap(list -> { - if (list.isEmpty()) { - return Mono.empty(); - } - if (list.size() > 1) { - return Mono.error(new IncorrectResultSizeDataAccessException( - String.format("Query [%s] returned non unique result.", this.resultFunction.getSql()), - 1)); - } - return Mono.just(list.get(0)); - }).next(); + return all().singleOrEmpty() + .onErrorMap(IndexOutOfBoundsException.class, ex -> { + String message = String.format("Query [%s] returned non unique result.", resultFunction.getSql()); + return new IncorrectResultSizeDataAccessException(message, 1); + }); } @Override