From 1e75041b001e64a2be50237a414d5929d5376f43 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 16 Aug 2023 11:00:17 +0200 Subject: [PATCH] Consistent references to scalar values vs Parameter objects See gh-27282 --- .../r2dbc/core/DatabaseClient.java | 7 ++-- .../r2dbc/core/DefaultDatabaseClient.java | 35 ++++++++----------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DatabaseClient.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DatabaseClient.java index ae2607ffba15..2d11fb48e76e 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DatabaseClient.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DatabaseClient.java @@ -163,10 +163,9 @@ interface Builder { interface GenericExecuteSpec { /** - * Bind a non-{@code null} value to a parameter identified by its - * {@code index}. {@code value} can be either a scalar value or {@link io.r2dbc.spi.Parameter}. + * Bind a non-{@code null} value to a parameter identified by its {@code index}. * @param index zero based index to bind the parameter to - * @param value either a scalar value or {@link io.r2dbc.spi.Parameter} + * @param value either a scalar value or a {@link io.r2dbc.spi.Parameter} */ GenericExecuteSpec bind(int index, Object value); @@ -180,7 +179,7 @@ interface GenericExecuteSpec { /** * Bind a non-{@code null} value to a parameter identified by its {@code name}. * @param name the name of the parameter - * @param value the value to bind + * @param value either a scalar value or a {@link io.r2dbc.spi.Parameter} */ GenericExecuteSpec bind(String name, Object value); diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultDatabaseClient.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultDatabaseClient.java index f3db3d97db1e..7db53bcd2809 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultDatabaseClient.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/core/DefaultDatabaseClient.java @@ -245,6 +245,19 @@ class DefaultGenericExecuteSpec implements GenericExecuteSpec { } @SuppressWarnings("deprecation") + private Parameter resolveParameter(Object value) { + if (value instanceof Parameter param) { + return param; + } + else if (value instanceof org.springframework.r2dbc.core.Parameter param) { + Object paramValue = param.getValue(); + return (paramValue != null ? Parameters.in(paramValue) : Parameters.in(param.getType())); + } + else { + return Parameters.in(value); + } + } + @Override public DefaultGenericExecuteSpec bind(int index, Object value) { assertNotPreparedOperation(); @@ -252,16 +265,7 @@ public DefaultGenericExecuteSpec bind(int index, Object value) { "Value at index %d must not be null. Use bindNull(…) instead.", index)); Map byIndex = new LinkedHashMap<>(this.byIndex); - if (value instanceof Parameter param) { - byIndex.put(index, param); - } - else if (value instanceof org.springframework.r2dbc.core.Parameter param) { - Object pv = param.getValue(); - byIndex.put(index, (pv != null ? Parameters.in(pv) : Parameters.in(param.getType()))); - } - else { - byIndex.put(index, Parameters.in(value)); - } + byIndex.put(index, resolveParameter(value)); return new DefaultGenericExecuteSpec(byIndex, this.byName, this.sqlSupplier, this.filterFunction); } @@ -276,7 +280,6 @@ public DefaultGenericExecuteSpec bindNull(int index, Class type) { return new DefaultGenericExecuteSpec(byIndex, this.byName, this.sqlSupplier, this.filterFunction); } - @SuppressWarnings("deprecation") @Override public DefaultGenericExecuteSpec bind(String name, Object value) { assertNotPreparedOperation(); @@ -286,15 +289,7 @@ public DefaultGenericExecuteSpec bind(String name, Object value) { "Value for parameter %s must not be null. Use bindNull(…) instead.", name)); Map byName = new LinkedHashMap<>(this.byName); - if (value instanceof Parameter p) { - byName.put(name, p); - } - else if (value instanceof org.springframework.r2dbc.core.Parameter p) { - byName.put(name, p.hasValue() ? Parameters.in(p.getValue()) : Parameters.in(p.getType())); - } - else { - byName.put(name, Parameters.in(value)); - } + byName.put(name, resolveParameter(value)); return new DefaultGenericExecuteSpec(this.byIndex, byName, this.sqlSupplier, this.filterFunction); }