|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2024 the original author or authors. |
| 2 | + * Copyright 2002-2025 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
@@ -211,6 +211,69 @@ void shouldEmitGeneratedKey() {
|
211 | 211 | .verifyComplete();
|
212 | 212 | }
|
213 | 213 |
|
| 214 | + @Test // gh-34768 |
| 215 | + void executeInsertWithReusedNamedParameter() { |
| 216 | + DatabaseClient databaseClient = DatabaseClient.create(connectionFactory); |
| 217 | + |
| 218 | + Lego lego = new Lego(1, 42, "Star Wars", 42); |
| 219 | + |
| 220 | + databaseClient.sql(() -> "INSERT INTO legoset (id, version, name, manual) VALUES(:id, :number, :name, :number)") |
| 221 | + .bind("id", lego.id) |
| 222 | + .bind("name", lego.name) |
| 223 | + .bind("number", lego.version) |
| 224 | + .fetch().rowsUpdated() |
| 225 | + .as(StepVerifier::create) |
| 226 | + .expectNext(1L) |
| 227 | + .verifyComplete(); |
| 228 | + |
| 229 | + databaseClient.sql("SELECT * FROM legoset") |
| 230 | + .mapProperties(Lego.class) |
| 231 | + .first() |
| 232 | + .as(StepVerifier::create) |
| 233 | + .assertNext(actual -> assertThat(actual).isEqualTo(lego)) |
| 234 | + .verifyComplete(); |
| 235 | + } |
| 236 | + |
| 237 | + @Test // gh-34768 |
| 238 | + void executeSelectWithReusedNamedParameterList() { |
| 239 | + DatabaseClient databaseClient = DatabaseClient.create(connectionFactory); |
| 240 | + |
| 241 | + String insertSql = "INSERT INTO legoset (id, version, name, manual) VALUES(:id, :version, :name, :manual)"; |
| 242 | + String selectSql = "SELECT * FROM legoset WHERE version IN (:numbers) OR manual IN (:numbers)"; |
| 243 | + Lego lego = new Lego(1, 42, "Star Wars", 99); |
| 244 | + |
| 245 | + databaseClient.sql(insertSql) |
| 246 | + .bind("id", lego.id) |
| 247 | + .bind("version", lego.version) |
| 248 | + .bind("name", lego.name) |
| 249 | + .bind("manual", lego.manual) |
| 250 | + .fetch().rowsUpdated() |
| 251 | + .as(StepVerifier::create) |
| 252 | + .expectNext(1L) |
| 253 | + .verifyComplete(); |
| 254 | + |
| 255 | + databaseClient.sql(selectSql) |
| 256 | + // match version |
| 257 | + .bind("numbers", List.of(2, 3, lego.version, 4)) |
| 258 | + .mapProperties(Lego.class) |
| 259 | + .first() |
| 260 | + .as(StepVerifier::create) |
| 261 | + .assertNext(actual -> assertThat(actual).isEqualTo(lego)) |
| 262 | + .verifyComplete(); |
| 263 | + |
| 264 | + databaseClient.sql(selectSql) |
| 265 | + // match manual |
| 266 | + .bind("numbers", List.of(2, 3, lego.manual, 4)) |
| 267 | + .mapProperties(Lego.class) |
| 268 | + .first() |
| 269 | + .as(StepVerifier::create) |
| 270 | + .assertNext(actual -> assertThat(actual).isEqualTo(lego)) |
| 271 | + .verifyComplete(); |
| 272 | + } |
| 273 | + |
| 274 | + |
| 275 | + record Lego(int id, Integer version, String name, Integer manual) { |
| 276 | + } |
214 | 277 |
|
215 | 278 | record ParameterRecord(int id, String name, Integer manual) {
|
216 | 279 | }
|
|
0 commit comments