From 11faa4f97fc4987421a24e4debbb01165a98dff7 Mon Sep 17 00:00:00 2001 From: T45K Date: Fri, 19 Jan 2024 14:32:11 +0900 Subject: [PATCH 1/3] add guard clause --- .../java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java | 4 ++++ .../io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java b/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java index 49191c703..02f4f0875 100644 --- a/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java +++ b/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java @@ -60,6 +60,10 @@ public MySqlBatch add(String sql) { @Override public Flux execute() { + if (builder == null) { + return Flux.empty(); + } + return QueryFlow.execute(client, getSql()) .map(messages -> MySqlResult.toResult(false, codecs, context, null, messages)); } diff --git a/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java b/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java index deaee8341..7eff7f141 100644 --- a/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java +++ b/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java @@ -59,4 +59,11 @@ void add() { void badAdd() { assertThrows(IllegalArgumentException.class, () -> batch.add(null)); } + + @Test + void executeNothing() { + MySqlBatchingBatch batch = new MySqlBatchingBatch(mock(Client.class), mock(Codecs.class), + ConnectionContextTest.mock()); + assertEquals(batch.execute().blockFirst(), null); + } } From bf0bcaed92239a76e427ff9d4f62df674b623d45 Mon Sep 17 00:00:00 2001 From: T45K Date: Sat, 20 Jan 2024 16:23:16 +0900 Subject: [PATCH 2/3] use StringJoiner instead of StringBuilder --- .../r2dbc/mysql/MySqlBatchingBatch.java | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java b/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java index 02f4f0875..6d74cf4d0 100644 --- a/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java +++ b/src/main/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatch.java @@ -20,6 +20,8 @@ import io.asyncer.r2dbc.mysql.codec.Codecs; import reactor.core.publisher.Flux; +import java.util.StringJoiner; + import static io.asyncer.r2dbc.mysql.internal.util.AssertUtils.requireNonNull; /** @@ -34,7 +36,7 @@ final class MySqlBatchingBatch extends MySqlBatch { private final ConnectionContext context; - private StringBuilder builder; + private final StringJoiner queries = new StringJoiner(";"); MySqlBatchingBatch(Client client, Codecs codecs, ConnectionContext context) { this.client = requireNonNull(client, "client must not be null"); @@ -50,9 +52,9 @@ public MySqlBatch add(String sql) { if (index >= 0 && sql.charAt(index) == ';') { // Skip last ';' and whitespaces that following last ';'. - requireBuilder().append(sql, 0, index); + queries.add(sql.substring(0, index)); } else { - requireBuilder().append(sql); + queries.add(sql); } return this; @@ -60,10 +62,6 @@ public MySqlBatch add(String sql) { @Override public Flux execute() { - if (builder == null) { - return Flux.empty(); - } - return QueryFlow.execute(client, getSql()) .map(messages -> MySqlResult.toResult(false, codecs, context, null, messages)); } @@ -79,15 +77,7 @@ public String toString() { * @return current batching SQL statement */ String getSql() { - return builder.toString(); - } - - private StringBuilder requireBuilder() { - if (builder == null) { - return (builder = new StringBuilder()); - } - - return builder.append(';'); + return queries.toString(); } private static int lastNonWhitespace(String sql) { From 7c046281c0fcdc316b15d6520ea4070d97fe8e00 Mon Sep 17 00:00:00 2001 From: T45K Date: Sat, 20 Jan 2024 16:23:30 +0900 Subject: [PATCH 3/3] add test to confirm not to throw NPE --- .../java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java b/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java index 7eff7f141..2eaab1e9b 100644 --- a/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java +++ b/src/test/java/io/asyncer/r2dbc/mysql/MySqlBatchingBatchTest.java @@ -61,9 +61,9 @@ void badAdd() { } @Test - void executeNothing() { - MySqlBatchingBatch batch = new MySqlBatchingBatch(mock(Client.class), mock(Codecs.class), + void addNothing() { + final MySqlBatchingBatch batch = new MySqlBatchingBatch(mock(Client.class), mock(Codecs.class), ConnectionContextTest.mock()); - assertEquals(batch.execute().blockFirst(), null); + assertEquals(batch.getSql(), ""); } }