From 355331b89bfe55e341b96fb0b6ce45c58f421c1e Mon Sep 17 00:00:00 2001 From: Neenu1995 Date: Wed, 20 May 2026 10:40:53 -0400 Subject: [PATCH 1/4] fix(bqjdbc): pass rowsInPage with TableResult --- .../cloud/bigquery/jdbc/BigQueryStatement.java | 4 +++- .../com/google/cloud/bigquery/BigQueryImpl.java | 3 +++ .../main/java/com/google/cloud/bigquery/Job.java | 1 + .../java/com/google/cloud/bigquery/TableResult.java | 13 +++++++++++-- .../google/cloud/bigquery/SerializationTest.java | 1 + .../com/google/cloud/bigquery/TableResultTest.java | 11 ++++++++++- 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/java-bigquery/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java b/java-bigquery/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java index 41ec945bd68a..e91fea6ea551 100644 --- a/java-bigquery/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java +++ b/java-bigquery/google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java @@ -981,7 +981,9 @@ private boolean meetsReadRatio(TableResult results) { return false; } - long pageSize = querySettings.getMaxResultPerPage(); + Long rowsInPage = results.getRowsInPage(); + long pageSize = + (rowsInPage != null && rowsInPage > 0) ? rowsInPage : querySettings.getMaxResultPerPage(); // Prevent division by zero due to potential overflows/empty sets: if (pageSize <= 0) { diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java index a2c74e952e82..e0d8775af3d0 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java @@ -1685,6 +1685,7 @@ && getOptions().getOpenTelemetryTracer() != null) { .setSchema(schema) .setTotalRows(data.y()) .setPageNoSchema(data.x()) + .setRowsInPage(data.x() != null ? (long) Iterables.size(data.x().getValues()) : 0L) .build(); } finally { if (tableDataList != null) { @@ -2016,6 +2017,7 @@ public com.google.api.services.bigquery.model.QueryResponse call() .setJobId(jobId) .setQueryId(results.getQueryId()) .setJobCreationReason(JobCreationReason.fromPb(results.getJobCreationReason())) + .setRowsInPage(results.getRows() != null ? (long) results.getRows().size() : 0L) .build(); } // only 1 page of result @@ -2035,6 +2037,7 @@ public com.google.api.services.bigquery.model.QueryResponse call() results.getJobReference() != null ? JobId.fromPb(results.getJobReference()) : null) .setQueryId(results.getQueryId()) .setJobCreationReason(JobCreationReason.fromPb(results.getJobCreationReason())) + .setRowsInPage(results.getRows() != null ? (long) results.getRows().size() : 0L) .build(); } diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java index c64327500f70..43832f3410b8 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java @@ -424,6 +424,7 @@ public TableResult getQueryResults(QueryResultsOption... options) .setJobId(job.getJobId()) .setTotalRows(0L) .setPageNoSchema(new PageImpl(null, "", null)) + .setRowsInPage(0L) .build(); return emptyTableResult; } diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java index a7aa6ba9de4a..a54e5912f2d1 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java @@ -49,6 +49,8 @@ public abstract static class Builder { public abstract TableResult.Builder setJobCreationReason(JobCreationReason jobCreationReason); + public abstract TableResult.Builder setRowsInPage(Long rowsInPage); + /** Creates a @code TableResult} object. */ public abstract TableResult build(); } @@ -81,6 +83,10 @@ public static Builder newBuilder() { @Nullable public abstract JobCreationReason getJobCreationReason(); + /** Returns the number of rows in the current page of results. */ + @Nullable + public abstract Long getRowsInPage(); + @Override public boolean hasNextPage() { return getPageNoSchema().hasNextPage(); @@ -137,12 +143,14 @@ public String toString() { .add("totalRows", getTotalRows()) .add("cursor", getNextPageToken()) .add("queryId", getQueryId()) + .add("rowsInPage", getRowsInPage()) .toString(); } @Override public final int hashCode() { - return Objects.hash(getPageNoSchema(), getSchema(), getTotalRows(), getQueryId()); + return Objects.hash( + getPageNoSchema(), getSchema(), getTotalRows(), getQueryId(), getRowsInPage()); } @Override @@ -158,6 +166,7 @@ public final boolean equals(Object obj) { && Iterators.elementsEqual(getValues().iterator(), response.getValues().iterator()) && Objects.equals(getSchema(), response.getSchema()) && getTotalRows() == response.getTotalRows() - && getQueryId() == response.getQueryId(); + && getQueryId() == response.getQueryId() + && Objects.equals(getRowsInPage(), response.getRowsInPage()); } } diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SerializationTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SerializationTest.java index e91a243949a8..4f0724cb01be 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SerializationTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SerializationTest.java @@ -210,6 +210,7 @@ public class SerializationTest extends BaseSerializationTest { .setSchema(Schema.of()) .setTotalRows(0L) .setPageNoSchema(new PageImpl(null, "", ImmutableList.of())) + .setRowsInPage(0L) .build(); private static final BigQuery BIGQUERY = BigQueryOptions.newBuilder().setProjectId("p1").build().getService(); diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java index 5bdb14cf49ce..e1b762140e41 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java @@ -54,10 +54,15 @@ private static FieldValueList newFieldValueList(String s) { @Test void testNullSchema() { TableResult result = - TableResult.newBuilder().setTotalRows(3L).setPageNoSchema(INNER_PAGE_0).build(); + TableResult.newBuilder() + .setTotalRows(3L) + .setPageNoSchema(INNER_PAGE_0) + .setRowsInPage(2L) + .build(); assertThat(result.getSchema()).isNull(); assertThat(result.hasNextPage()).isTrue(); assertThat(result.getNextPageToken()).isNotNull(); + assertThat(result.getRowsInPage()).isEqualTo(2L); assertThat(result.getValues()) .containsExactly(newFieldValueList("0"), newFieldValueList("1")) .inOrder(); @@ -66,6 +71,7 @@ void testNullSchema() { assertThat(next.getSchema()).isNull(); assertThat(next.hasNextPage()).isFalse(); assertThat(next.getNextPageToken()).isNull(); + assertThat(next.getRowsInPage()).isNull(); assertThat(next.getValues()).containsExactly(newFieldValueList("2")); assertThat(next.getNextPage()).isNull(); @@ -81,10 +87,12 @@ void testSchema() { .setSchema(SCHEMA) .setTotalRows(3L) .setPageNoSchema(INNER_PAGE_0) + .setRowsInPage(2L) .build(); assertThat(result.getSchema()).isEqualTo(SCHEMA); assertThat(result.hasNextPage()).isTrue(); assertThat(result.getNextPageToken()).isNotNull(); + assertThat(result.getRowsInPage()).isEqualTo(2L); assertThat(result.getValues()) .containsExactly( newFieldValueList("0").withSchema(SCHEMA.getFields()), @@ -95,6 +103,7 @@ void testSchema() { assertThat(next.getSchema()).isEqualTo(SCHEMA); assertThat(next.hasNextPage()).isFalse(); assertThat(next.getNextPageToken()).isNull(); + assertThat(next.getRowsInPage()).isNull(); assertThat(next.getValues()) .containsExactly(newFieldValueList("2").withSchema(SCHEMA.getFields())); assertThat(next.getNextPage()).isNull(); From 9c142bf8a78c1868735a40e46502cfb6b6e4630c Mon Sep 17 00:00:00 2001 From: Neenu1995 Date: Wed, 20 May 2026 11:51:14 -0400 Subject: [PATCH 2/4] chore: add local skills --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 7618f6a26508..520007f5409f 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,7 @@ monorepo *.tfstate.lock.info .jqwik-database + +# Agent configuration and local skills +.agent/ +.agents/ From 1351b4bcf38f85c67d1cb66fb9ed9b9567f8fff9 Mon Sep 17 00:00:00 2001 From: Neenu Shaji Date: Wed, 20 May 2026 11:59:10 -0400 Subject: [PATCH 3/4] Compare string with Objects.equals Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../src/main/java/com/google/cloud/bigquery/TableResult.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java index a54e5912f2d1..b6e0bf69b9ee 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java @@ -166,7 +166,7 @@ public final boolean equals(Object obj) { && Iterators.elementsEqual(getValues().iterator(), response.getValues().iterator()) && Objects.equals(getSchema(), response.getSchema()) && getTotalRows() == response.getTotalRows() - && getQueryId() == response.getQueryId() + && Objects.equals(getQueryId(), response.getQueryId()) && Objects.equals(getRowsInPage(), response.getRowsInPage()); } } From f1099a20210abcb213f229df290e5e925911f08c Mon Sep 17 00:00:00 2001 From: Neenu1995 Date: Wed, 20 May 2026 12:26:05 -0400 Subject: [PATCH 4/4] get page size for all pages --- .../main/java/com/google/cloud/bigquery/TableResult.java | 8 +++++++- .../java/com/google/cloud/bigquery/TableResultTest.java | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java index b6e0bf69b9ee..fa259cab0edd 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableResult.java @@ -100,12 +100,18 @@ public String getNextPageToken() { @Override public TableResult getNextPage() { if (getPageNoSchema().hasNextPage()) { + Page nextPageNoSchema = getPageNoSchema().getNextPage(); + long nextRows = + nextPageNoSchema.getValues() != null + ? (long) Iterables.size(nextPageNoSchema.getValues()) + : 0L; return TableResult.newBuilder() .setSchema(getSchema()) .setTotalRows(getTotalRows()) - .setPageNoSchema(getPageNoSchema().getNextPage()) + .setPageNoSchema(nextPageNoSchema) .setQueryId(getQueryId()) .setJobCreationReason(getJobCreationReason()) + .setRowsInPage(nextRows) .build(); } return null; diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java index e1b762140e41..90ae2692f00c 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableResultTest.java @@ -71,7 +71,7 @@ void testNullSchema() { assertThat(next.getSchema()).isNull(); assertThat(next.hasNextPage()).isFalse(); assertThat(next.getNextPageToken()).isNull(); - assertThat(next.getRowsInPage()).isNull(); + assertThat(next.getRowsInPage()).isEqualTo(1L); assertThat(next.getValues()).containsExactly(newFieldValueList("2")); assertThat(next.getNextPage()).isNull(); @@ -103,7 +103,7 @@ void testSchema() { assertThat(next.getSchema()).isEqualTo(SCHEMA); assertThat(next.hasNextPage()).isFalse(); assertThat(next.getNextPageToken()).isNull(); - assertThat(next.getRowsInPage()).isNull(); + assertThat(next.getRowsInPage()).isEqualTo(1L); assertThat(next.getValues()) .containsExactly(newFieldValueList("2").withSchema(SCHEMA.getFields())); assertThat(next.getNextPage()).isNull();