From 24ead40f88a52ccea43e2faed3f230d04890ccab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= Date: Sun, 19 Jan 2025 21:34:20 +0900 Subject: [PATCH] Change `LimboStatement.java` to throw exception when the result is null which is the error case --- .../tursodatabase/core/LimboResultSet.java | 6 +++++- .../tursodatabase/core/LimboStatement.java | 8 +++++-- .../tursodatabase/core/LimboStepResult.java | 21 ++++++++++++++++++- .../jdbc4/JDBC4ResultSetTest.java | 7 ++----- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboResultSet.java b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboResultSet.java index ebcbb8860..854e161b7 100644 --- a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboResultSet.java +++ b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboResultSet.java @@ -55,7 +55,11 @@ public class LimboResultSet { } lastStepResult = this.statement.step(); - pastLastRow = lastStepResult == null || lastStepResult.isDone(); + if (lastStepResult.isRow()) { + row++; + } + + pastLastRow = lastStepResult.isDone(); return !pastLastRow; } diff --git a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStatement.java b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStatement.java index 1cad05d14..f8c380247 100644 --- a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStatement.java +++ b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStatement.java @@ -38,9 +38,13 @@ public class LimboStatement { return resultSet.hasLastStepReturnedRow(); } - @Nullable LimboStepResult step() throws SQLException { - return step(this.statementPointer); + final LimboStepResult result = step(this.statementPointer); + if (result == null) { + throw new SQLException("step() returned null, which is only returned when an error occurs"); + } + + return result; } @Nullable diff --git a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStepResult.java b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStepResult.java index f6a2119fd..7870cbeab 100644 --- a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStepResult.java +++ b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboStepResult.java @@ -44,8 +44,27 @@ public class LimboStepResult { @Override public String toString() { return "LimboStepResult{" + - "stepResultId=" + stepResultId + + "stepResultName=" + getStepResultName() + ", result=" + Arrays.toString(result) + '}'; } + + private String getStepResultName() { + switch (stepResultId) { + case STEP_RESULT_ID_ROW: + return "ROW"; + case STEP_RESULT_ID_IO: + return "IO"; + case STEP_RESULT_ID_DONE: + return "DONE"; + case STEP_RESULT_ID_INTERRUPT: + return "INTERRUPT"; + case STEP_RESULT_ID_BUSY: + return "BUSY"; + case STEP_RESULT_ID_ERROR: + return "ERROR"; + default: + return "UNKNOWN"; + } + } } diff --git a/bindings/java/src/test/java/org/github/tursodatabase/jdbc4/JDBC4ResultSetTest.java b/bindings/java/src/test/java/org/github/tursodatabase/jdbc4/JDBC4ResultSetTest.java index 2d10fdb32..46cf7e216 100644 --- a/bindings/java/src/test/java/org/github/tursodatabase/jdbc4/JDBC4ResultSetTest.java +++ b/bindings/java/src/test/java/org/github/tursodatabase/jdbc4/JDBC4ResultSetTest.java @@ -40,7 +40,7 @@ class JDBC4ResultSetTest { } @Test - @Disabled("https://github.com/tursodatabase/limbo/pull/743#issuecomment-2600746904") + // @Disabled("https://github.com/tursodatabase/limbo/pull/743#issuecomment-2600746904") void invoking_next_after_the_last_row_should_return_false() throws Exception { stmt.execute("CREATE TABLE users (id INT PRIMARY KEY, username TEXT);"); stmt.execute("INSERT INTO users VALUES (1, 'sinwoo');"); @@ -50,11 +50,8 @@ class JDBC4ResultSetTest { stmt.execute("SELECT * FROM users"); ResultSet resultSet = stmt.getResultSet(); - long startTime = System.currentTimeMillis(); while (resultSet.next()) { - if (System.currentTimeMillis() - startTime > 1000) { - throw new Exception("Should have finished now"); - } + // run until next() returns false } // if the previous call to next() returned false, consecutive call to next() should return false as well