diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java index 07b5c8c7bb..981bd45d39 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java @@ -559,7 +559,7 @@ public boolean next() throws SpannerException { this.state = State.SYNC; } boolean res = delegateResultSet.next(); - currentRow = delegateResultSet.getCurrentRowAsStruct(); + currentRow = res ? delegateResultSet.getCurrentRowAsStruct() : null; return res; } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java index 001cdfdf04..bf425556b4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java @@ -225,6 +225,19 @@ public CallbackResponse cursorReady(AsyncResultSet resultSet) { assertThat(rowCount.get()).isEqualTo(1); } + @Test + public void singleUseAsyncWithoutCallback() throws Exception { + DatabaseClient client = + spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); + int rowCount = 0; + try (AsyncResultSet rs = client.singleUse().executeQueryAsync(SELECT1)) { + while (rs.next()) { + rowCount++; + } + } + assertThat(rowCount).isEqualTo(1); + } + @Test public void singleUseBound() { DatabaseClient client =