Add DatabaseClient bind variant for list of parameters

Prior to this commit, the `DatabaseClient` interface would allow batch
operations for binding parameters by their names and values. Positional
parameters did not have such equivalent.

This commit adds a new `bindValues(List<?>)` method variant for adding
multiple positional arguments in a single call and avoiding allocation
overhead when the parameters count is large.

Closes gh-33274
This commit is contained in:
Brian Clozel
2024-07-29 14:07:15 +02:00
parent 1f2c6c33ac
commit 38453910cd
4 changed files with 70 additions and 1 deletions

View File

@@ -16,6 +16,7 @@
package org.springframework.r2dbc.core;
import java.util.List;
import java.util.Map;
import io.r2dbc.spi.ConnectionFactory;
@@ -96,6 +97,25 @@ abstract class AbstractDatabaseClientIntegrationTests {
.verifyComplete();
}
@Test
void executeInsertWithList() {
DatabaseClient databaseClient = DatabaseClient.create(connectionFactory);
databaseClient.sql("INSERT INTO legoset (id, name, manual) VALUES(:id, :name, :manual)")
.bindValues(List.of(42055, Parameters.in("SCHAUFELRADBAGGER"), Parameters.in(Integer.class)))
.fetch().rowsUpdated()
.as(StepVerifier::create)
.expectNext(1L)
.verifyComplete();
databaseClient.sql("SELECT id FROM legoset")
.mapValue(Integer.class)
.first()
.as(StepVerifier::create)
.assertNext(actual -> assertThat(actual).isEqualTo(42055))
.verifyComplete();
}
@Test
void executeInsertWithMap() {
DatabaseClient databaseClient = DatabaseClient.create(connectionFactory);