From 510b8ef59fffd1fa85a0f359c6dc942dc4650b49 Mon Sep 17 00:00:00 2001 From: Orange flavored banana <106858113+moonwhistle@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:13:23 +0900 Subject: [PATCH] refactor(jdbc): Added early return for length == 0 and improved read loop condition in setUnicodeStream and setAsciiStream --- .../turso/jdbc4/JDBC4PreparedStatement.java | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java index 7854b7763..5b38658cd 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java @@ -175,22 +175,19 @@ public final class JDBC4PreparedStatement extends JDBC4Statement implements Prep if (length < 0) { throw new SQLException("setAsciiStream length must be non-negative"); } + if (length == 0) { + this.statement.bindText(parameterIndex, ""); + return; + } try { byte[] buffer = new byte[length]; int offset = 0; - while (offset < length) { - int read = x.read(buffer, offset, length - offset); - if (read == -1) { - break; - } + int read; + while (offset < length && (read = x.read(buffer, offset, length - offset)) > 0) { offset += read; } - if (offset == 0) { - this.statement.bindText(parameterIndex, ""); - } else { - String ascii = new String(buffer, 0, offset, StandardCharsets.US_ASCII); - this.statement.bindText(parameterIndex, ascii); - } + String ascii = new String(buffer, 0, offset, StandardCharsets.US_ASCII); + this.statement.bindText(parameterIndex, ascii); } catch (IOException e) { throw new SQLException("Error reading ASCII stream", e); } @@ -206,22 +203,19 @@ public final class JDBC4PreparedStatement extends JDBC4Statement implements Prep if (length < 0) { throw new SQLException("setUnicodeStream length must be non-negative"); } + if (length == 0) { + this.statement.bindText(parameterIndex, ""); + return; + } try { byte[] buffer = new byte[length]; int offset = 0; - while (offset < length) { - int readBytes = x.read(buffer, offset, length - offset); - if (readBytes == -1) { - break; - } - offset += readBytes; - } - if (offset == 0) { - this.statement.bindText(parameterIndex, ""); - } else { - String text = new String(buffer, 0, offset, StandardCharsets.UTF_8); - this.statement.bindText(parameterIndex, text); + int read; + while (offset < length && (read = x.read(buffer, offset, length - offset)) > 0) { + offset += read; } + String text = new String(buffer, 0, offset, StandardCharsets.UTF_8); + this.statement.bindText(parameterIndex, text); } catch (IOException e) { throw new SQLException("Error reading Unicode stream", e); }