From 486bf210c93db892ab1e746950a837012cd929cb Mon Sep 17 00:00:00 2001 From: Kirill Logachev Date: Tue, 8 Sep 2026 14:33:46 +0000 Subject: [PATCH 1/8] fix(jdbc): Fix NullPointerException when processing sub-jobs of a script query The listJobs API can return Job wrappers without fully-populated statistics, particularly when dealing with SET statements inside Scripts (such as variable assignments). When evaluating sub-jobs from a multi-statement BigQuery Script, the code assumed that `getStatistics()` and `.getScriptStatistics()` were not null and blindly dereferenced them (for example, to get evaluation kind), leading to NullPointerExceptions. This fix makes the statistics extraction gracefully handle `null` stats or non-QueryStatistics classes by providing null-safety fallback values. TAG=agy CONV=1f50bc2b-6723-4b07-b755-6f7b18bb91be --- .../google/cloud/bigquery/jdbc/BigQueryStatement.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java index 3fd724c820d9..420cea3a9382 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java @@ -716,11 +716,11 @@ Job getNextJob() { this.currentJobIdIndex += 1; Job currentJob = this.parentJobId.getJobs().get(this.currentJobIdIndex); QueryStatistics queryStatistics = currentJob.getStatistics(); - ScriptStatistics scriptStatistics = queryStatistics.getScriptStatistics(); + ScriptStatistics scriptStatistics = queryStatistics != null ? queryStatistics.getScriptStatistics() : null; // EXPRESSION jobs are not relevant for customer query and can be // created by BQ depending on various conditions. We will just ignore // them when presenting results. - if (!"expression".equalsIgnoreCase(scriptStatistics.getEvaluationKind())) { + if (scriptStatistics == null || !"expression".equalsIgnoreCase(scriptStatistics.getEvaluationKind())) { return currentJob; } } @@ -775,8 +775,10 @@ void handleQueryResult(String query, TableResult results, SqlType queryType, Job if (currentJob == null) { return; } - StatementType statementType = - ((QueryStatistics) (currentJob.getStatistics())).getStatementType(); + StatementType statementType = null; + if (currentJob.getStatistics() instanceof QueryStatistics) { + statementType = ((QueryStatistics) (currentJob.getStatistics())).getStatementType(); + } SqlType sqlType = getQueryType(currentJob.getConfiguration(), statementType); handleQueryResult(query, currentJob.getQueryResults(), sqlType, currentJob); } catch (NullPointerException ex) { From 0fc4385d9dcdd54992f92fcda8903555d4476606 Mon Sep 17 00:00:00 2001 From: kirl Date: Thu, 17 Sep 2026 20:54:48 +0000 Subject: [PATCH 2/8] fix(bigquery-jdbc): fix htapi fallback due to permission logic --- .../.cloudbuild/jdbc_nightly.yaml | 4 +++- .../.cloudbuild/jdbc_presubmit.yaml | 4 +++- java-bigquery-jdbc/Makefile | 1 + .../bigquery/jdbc/BigQueryStatement.java | 16 ++++---------- .../bigquery/jdbc/it/ITStatementTest.java | 22 +++++++++++++++++++ 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/java-bigquery-jdbc/.cloudbuild/jdbc_nightly.yaml b/java-bigquery-jdbc/.cloudbuild/jdbc_nightly.yaml index e5eb04cd0e3e..c09d3a274169 100644 --- a/java-bigquery-jdbc/.cloudbuild/jdbc_nightly.yaml +++ b/java-bigquery-jdbc/.cloudbuild/jdbc_nightly.yaml @@ -25,12 +25,14 @@ steps: timeout: 10000s entrypoint: 'bash' args: ['java-bigquery-jdbc/.cloudbuild/scripts/jdbc-nightly.sh'] - secretEnv: ['SA_EMAIL', 'KMS_RESOURCE_PATH', 'SA_SECRET'] + secretEnv: ['SA_EMAIL', 'SA_EMAIL_NO_READAPI', 'KMS_RESOURCE_PATH', 'SA_SECRET'] availableSecrets: secretManager: - versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email/versions/latest env: 'SA_EMAIL' + - versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email-no-readapi/versions/latest + env: 'SA_EMAIL_NO_READAPI' - versionName: projects/$PROJECT_ID/secrets/kms_resource_path/versions/latest env: 'KMS_RESOURCE_PATH' - versionName: projects/$PROJECT_ID/secrets/GoogleJDBCServiceAccountSecret/versions/latest diff --git a/java-bigquery-jdbc/.cloudbuild/jdbc_presubmit.yaml b/java-bigquery-jdbc/.cloudbuild/jdbc_presubmit.yaml index df6180d0cd03..0e27837c2be3 100644 --- a/java-bigquery-jdbc/.cloudbuild/jdbc_presubmit.yaml +++ b/java-bigquery-jdbc/.cloudbuild/jdbc_presubmit.yaml @@ -28,11 +28,13 @@ steps: timeout: 2000s entrypoint: 'bash' args: ['java-bigquery-jdbc/.cloudbuild/scripts/jdbc-presubmit.sh'] - secretEnv: ['SA_EMAIL', 'KMS_RESOURCE_PATH', 'SA_SECRET'] + secretEnv: ['SA_EMAIL', 'SA_EMAIL_NO_READAPI', 'KMS_RESOURCE_PATH', 'SA_SECRET'] availableSecrets: secretManager: - versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email/versions/latest env: 'SA_EMAIL' + - versionName: projects/$PROJECT_ID/secrets/jdbc-presubmit-sa-email-no-readapi/versions/latest + env: 'SA_EMAIL_NO_READAPI' - versionName: projects/$PROJECT_ID/secrets/kms_resource_path/versions/latest env: 'KMS_RESOURCE_PATH' - versionName: projects/$PROJECT_ID/secrets/GoogleJDBCServiceAccountSecret/versions/latest diff --git a/java-bigquery-jdbc/Makefile b/java-bigquery-jdbc/Makefile index 63e7a2e042f4..6375163c998d 100644 --- a/java-bigquery-jdbc/Makefile +++ b/java-bigquery-jdbc/Makefile @@ -93,6 +93,7 @@ run-it-standalone: -e "GOOGLE_APPLICATION_CREDENTIALS=/auth/application_creds.json" \ -v $(SRC):/src \ -e "SA_EMAIL=$(SA_EMAIL)" \ + -e "SA_EMAIL_NO_READAPI=$(SA_NO_READAPI)" \ -e "KMS_RESOURCE_PATH=$(KMS_RESOURCE_PATH)" \ -e "SA_SECRET=/auth/application_creds.json" \ -e "SA_SECRET_P12=/auth/application_creds.p12" \ diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java index 420cea3a9382..f48224dda93f 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java @@ -716,11 +716,13 @@ Job getNextJob() { this.currentJobIdIndex += 1; Job currentJob = this.parentJobId.getJobs().get(this.currentJobIdIndex); QueryStatistics queryStatistics = currentJob.getStatistics(); - ScriptStatistics scriptStatistics = queryStatistics != null ? queryStatistics.getScriptStatistics() : null; + ScriptStatistics scriptStatistics = + queryStatistics != null ? queryStatistics.getScriptStatistics() : null; // EXPRESSION jobs are not relevant for customer query and can be // created by BQ depending on various conditions. We will just ignore // them when presenting results. - if (scriptStatistics == null || !"expression".equalsIgnoreCase(scriptStatistics.getEvaluationKind())) { + if (scriptStatistics == null + || !"expression".equalsIgnoreCase(scriptStatistics.getEvaluationKind())) { return currentJob; } } @@ -924,16 +926,6 @@ ResultSet processArrowResultSet(TableResult results, Job job) throws SQLExceptio "Failed to execute query: Unable to allocate background threads to process the query results. Connection-scoped thread pool limit of 100 threads was reached or system is out of memory.", ex); } - if (ex instanceof RuntimeException) { - throw (ex instanceof BigQueryJdbcRuntimeException) - ? (BigQueryJdbcRuntimeException) ex - : new BigQueryJdbcRuntimeException(ex); - } - if (ex instanceof SQLException) { - throw (ex instanceof BigQueryJdbcException) - ? (BigQueryJdbcException) ex - : new BigQueryJdbcException(ex); - } throw new BigQueryJdbcException(ex.getMessage(), ex); } } diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java index e73f2395b493..7f2c4167d76f 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java @@ -34,6 +34,7 @@ import com.google.cloud.bigquery.Table; import com.google.cloud.bigquery.TableResult; import com.google.cloud.bigquery.jdbc.BigQueryConnection; +import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; @@ -490,4 +491,25 @@ public void testNonIdempotentCreateTableAndDrop() throws SQLException { } } } + + @Test + @Tag("advanced") + public void testHighThroughputApiFallbackNoReadApi() throws IOException, SQLException { + String saNoReadApi = requireEnvVar("SA_EMAIL_NO_READAPI"); + + String connection_uri = + ITBase.connectionUrl + + ";ServiceAccountImpersonationEmail=" + + saNoReadApi + + ";EnableHighThroughputAPi=1" + + ";MaxResults=300"; + + Connection connection = DriverManager.getConnection(connection_uri); + assertNotNull(connection); + assertFalse(connection.isClosed()); + + Statement statement = connection.createStatement(); + validateStatement(statement, 1000); + connection.close(); + } } From fd2127b7f6d4462c7a9605115fbebc538ab28278 Mon Sep 17 00:00:00 2001 From: kirl Date: Thu, 17 Sep 2026 21:12:22 +0000 Subject: [PATCH 3/8] Undo extra --- .../cloud/bigquery/jdbc/BigQueryStatement.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java index f48224dda93f..55852a4f8303 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryStatement.java @@ -716,13 +716,11 @@ Job getNextJob() { this.currentJobIdIndex += 1; Job currentJob = this.parentJobId.getJobs().get(this.currentJobIdIndex); QueryStatistics queryStatistics = currentJob.getStatistics(); - ScriptStatistics scriptStatistics = - queryStatistics != null ? queryStatistics.getScriptStatistics() : null; + ScriptStatistics scriptStatistics = queryStatistics.getScriptStatistics(); // EXPRESSION jobs are not relevant for customer query and can be // created by BQ depending on various conditions. We will just ignore // them when presenting results. - if (scriptStatistics == null - || !"expression".equalsIgnoreCase(scriptStatistics.getEvaluationKind())) { + if (!"expression".equalsIgnoreCase(scriptStatistics.getEvaluationKind())) { return currentJob; } } @@ -777,10 +775,8 @@ void handleQueryResult(String query, TableResult results, SqlType queryType, Job if (currentJob == null) { return; } - StatementType statementType = null; - if (currentJob.getStatistics() instanceof QueryStatistics) { - statementType = ((QueryStatistics) (currentJob.getStatistics())).getStatementType(); - } + StatementType statementType = + ((QueryStatistics) (currentJob.getStatistics())).getStatementType(); SqlType sqlType = getQueryType(currentJob.getConfiguration(), statementType); handleQueryResult(query, currentJob.getQueryResults(), sqlType, currentJob); } catch (NullPointerException ex) { From e0a1c7cf85936a09ad652c57d8c33b83746b347d Mon Sep 17 00:00:00 2001 From: kirl Date: Thu, 17 Sep 2026 21:14:23 +0000 Subject: [PATCH 4/8] typo --- java-bigquery-jdbc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-bigquery-jdbc/Makefile b/java-bigquery-jdbc/Makefile index 6375163c998d..9f171afdab95 100644 --- a/java-bigquery-jdbc/Makefile +++ b/java-bigquery-jdbc/Makefile @@ -93,7 +93,7 @@ run-it-standalone: -e "GOOGLE_APPLICATION_CREDENTIALS=/auth/application_creds.json" \ -v $(SRC):/src \ -e "SA_EMAIL=$(SA_EMAIL)" \ - -e "SA_EMAIL_NO_READAPI=$(SA_NO_READAPI)" \ + -e "SA_EMAIL_NO_READAPI=$(SA_EMAIL_NO_READAPI)" \ -e "KMS_RESOURCE_PATH=$(KMS_RESOURCE_PATH)" \ -e "SA_SECRET=/auth/application_creds.json" \ -e "SA_SECRET_P12=/auth/application_creds.p12" \ From ee61a1799ef413f16cdea4b937ea50c8fb2ea0f4 Mon Sep 17 00:00:00 2001 From: kirl Date: Thu, 17 Sep 2026 21:30:34 +0000 Subject: [PATCH 5/8] chore(java-bigquery-jdbc): include ITStatementTest in ITDriverAgnosticTests TAG=agy CONV=f626ba62-4bee-4750-870f-c4d2558c7ad9 --- .../jdbc/it/suites/ITDriverAgnosticTests.java | 4 +++- wait_and_run.sh | 13 +++++++++++++ wait_and_run_again.sh | 19 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100755 wait_and_run.sh create mode 100755 wait_and_run_again.sh diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java index ea413c2d318e..146f2e0046b1 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java @@ -23,6 +23,7 @@ import com.google.cloud.bigquery.jdbc.it.ITJdbcTimestampPicosTest; import com.google.cloud.bigquery.jdbc.it.ITPcntTest; import com.google.cloud.bigquery.jdbc.it.ITResultSetMetadataTest; +import com.google.cloud.bigquery.jdbc.it.ITStatementTest; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; @@ -34,6 +35,7 @@ ITDriverTest.class, ITJdbcTimestampPicosTest.class, ITPcntTest.class, - ITResultSetMetadataTest.class + ITResultSetMetadataTest.class, + ITStatementTest.class }) public class ITDriverAgnosticTests {} diff --git a/wait_and_run.sh b/wait_and_run.sh new file mode 100755 index 000000000000..8a0829c0f25a --- /dev/null +++ b/wait_and_run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +while kill -0 $(ps aux | grep "[t]ask-448" | awk '{print $2}') 2>/dev/null; do + echo "Waiting for task-448..." + sleep 5 +done +echo "task-448 finished!" +cd java-bigquery-jdbc +export SA_NO_READAPI=github-actions-no-readapi@bigquery-devtools-drivers.iam.gserviceaccount.com +export GOOGLE_APPLICATION_CREDENTIALS=/usr/local/google/home/kirl/.config/gcloud/application_default_credentials.json + +PATH=/opt/maven/bin:$PATH make build-it-standalone +echo "Running standalone tests" +PATH=/opt/maven/bin:$PATH make run-it-standalone diff --git a/wait_and_run_again.sh b/wait_and_run_again.sh new file mode 100755 index 000000000000..72cbc2f33197 --- /dev/null +++ b/wait_and_run_again.sh @@ -0,0 +1,19 @@ +#!/bin/bash +while kill -0 $(ps aux | grep "[t]ask-511" | awk '{print $2}') 2>/dev/null; do + echo "Waiting for task-511..." + sleep 4 +done +echo "task-511 finished!" + +cd java-bigquery-jdbc +export SA_NO_READAPI=github-actions-no-readapi@bigquery-devtools-drivers.iam.gserviceaccount.com +export GOOGLE_APPLICATION_CREDENTIALS=/usr/local/google/home/kirl/.config/gcloud/application_default_credentials.json + +echo "Building standalone it tests payload (pom-it.xml)..." +PATH=/opt/maven/bin:$PATH make build-it-standalone + +echo "Running target test method!" +java -cp "tools/client/drivers/simba/GoogleBigQueryJDBC42.jar:target-it/*" \ + org.junit.platform.console.ConsoleLauncher \ + --select-method com.google.cloud.bigquery.jdbc.it.ITStatementTest#testHighThroughputApiFallbackNoReadApi + From 3920167b14997d291bddec00e0684bdc1598ffb1 Mon Sep 17 00:00:00 2001 From: kirl Date: Thu, 17 Sep 2026 22:04:24 +0000 Subject: [PATCH 6/8] Update test with try-with --- .../cloud/bigquery/jdbc/it/ITStatementTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java index 7f2c4167d76f..f1632f009392 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java @@ -504,12 +504,12 @@ public void testHighThroughputApiFallbackNoReadApi() throws IOException, SQLExce + ";EnableHighThroughputAPi=1" + ";MaxResults=300"; - Connection connection = DriverManager.getConnection(connection_uri); - assertNotNull(connection); - assertFalse(connection.isClosed()); + try (Connection connection = DriverManager.getConnection(connection_uri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); - Statement statement = connection.createStatement(); - validateStatement(statement, 1000); - connection.close(); + Statement statement = connection.createStatement(); + validateStatement(statement, 1000); + } } } From eb5cfacbda7e807b6832e4b88987ce555be4cb10 Mon Sep 17 00:00:00 2001 From: kirl Date: Fri, 18 Sep 2026 17:36:35 +0000 Subject: [PATCH 7/8] feedback --- .../google/cloud/bigquery/jdbc/it/ITBase.java | 7 ++++++- .../jdbc/it/ITJdbcTimestampPicosTest.java | 2 +- .../bigquery/jdbc/it/ITStatementTest.java | 10 +++++----- .../jdbc/it/suites/ITDriverAgnosticTests.java | 3 +-- wait_and_run.sh | 13 ------------- wait_and_run_again.sh | 19 ------------------- 6 files changed, 13 insertions(+), 41 deletions(-) delete mode 100755 wait_and_run.sh delete mode 100755 wait_and_run_again.sh diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java index 18d9d1be36b2..8e5244e327b2 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java @@ -284,7 +284,7 @@ public static String getBaseConnectionUrl() { public static final BigQuery bigQuery = BigQueryJdbcBaseTest.getBigQuery(connectionUrl); public static final String FORCE_READ_API_PROPERTIES = - "EnableHighThroughputAPI=1;HighThroughputActivationRatio=0;HighThroughputMinTableSize=0;MaxResults=1;"; + ";EnableHighThroughputAPI=1;HighThroughputActivationRatio=0;HighThroughputMinTableSize=0;"; public static final String createDatasetQuery = "CREATE SCHEMA IF NOT EXISTS `%s.%s` OPTIONS(default_table_expiration_days = 5)"; @@ -460,10 +460,15 @@ public static List getInfoBySQL(Connection connection, String sqlCmd) } public static void validateStatement(Statement stmt, int expectedRows) throws SQLException { + validateStatement(stmt, expectedRows, "ResultSet"); + } + + public static void validateStatement(Statement stmt, int expectedRows, String clazz) throws SQLException { String query = "SELECT * FROM UNNEST(GENERATE_ARRAY(1, " + expectedRows + "))"; assertTrue(stmt.execute(query)); int count = 0; try (ResultSet rs = stmt.getResultSet()) { + assertTrue(rs.getClass().getName().contains(clazz)); while (rs.next()) { count++; } diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java index 32b40385f24a..f9700d10d763 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java @@ -154,7 +154,7 @@ private static String getPicosConnectionUrl(boolean picosEnabled, boolean arrowE + "EnableTimestampPicos=" + (picosEnabled ? "1" : "0") + ";" - + (arrowEnabled ? ITBase.FORCE_READ_API_PROPERTIES : "EnableHighThroughputAPI=0;"); + + (arrowEnabled ? ITBase.FORCE_READ_API_PROPERTIES + "MaxResults=1;": "EnableHighThroughputAPI=0;"); } @Test diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java index f1632f009392..3bdd48774e03 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITStatementTest.java @@ -497,19 +497,19 @@ public void testNonIdempotentCreateTableAndDrop() throws SQLException { public void testHighThroughputApiFallbackNoReadApi() throws IOException, SQLException { String saNoReadApi = requireEnvVar("SA_EMAIL_NO_READAPI"); - String connection_uri = + String connectionUri = ITBase.connectionUrl + ";ServiceAccountImpersonationEmail=" + saNoReadApi - + ";EnableHighThroughputAPi=1" - + ";MaxResults=300"; + + ";MaxResults=10;" + + ITBase.FORCE_READ_API_PROPERTIES; - try (Connection connection = DriverManager.getConnection(connection_uri)) { + try (Connection connection = DriverManager.getConnection(connectionUri)) { assertNotNull(connection); assertFalse(connection.isClosed()); Statement statement = connection.createStatement(); - validateStatement(statement, 1000); + validateStatement(statement, 50, "BigQueryJsonResultSet"); } } } diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java index 146f2e0046b1..4fd3b61418d2 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java @@ -35,7 +35,6 @@ ITDriverTest.class, ITJdbcTimestampPicosTest.class, ITPcntTest.class, - ITResultSetMetadataTest.class, - ITStatementTest.class + ITResultSetMetadataTest.class }) public class ITDriverAgnosticTests {} diff --git a/wait_and_run.sh b/wait_and_run.sh deleted file mode 100755 index 8a0829c0f25a..000000000000 --- a/wait_and_run.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -while kill -0 $(ps aux | grep "[t]ask-448" | awk '{print $2}') 2>/dev/null; do - echo "Waiting for task-448..." - sleep 5 -done -echo "task-448 finished!" -cd java-bigquery-jdbc -export SA_NO_READAPI=github-actions-no-readapi@bigquery-devtools-drivers.iam.gserviceaccount.com -export GOOGLE_APPLICATION_CREDENTIALS=/usr/local/google/home/kirl/.config/gcloud/application_default_credentials.json - -PATH=/opt/maven/bin:$PATH make build-it-standalone -echo "Running standalone tests" -PATH=/opt/maven/bin:$PATH make run-it-standalone diff --git a/wait_and_run_again.sh b/wait_and_run_again.sh deleted file mode 100755 index 72cbc2f33197..000000000000 --- a/wait_and_run_again.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -while kill -0 $(ps aux | grep "[t]ask-511" | awk '{print $2}') 2>/dev/null; do - echo "Waiting for task-511..." - sleep 4 -done -echo "task-511 finished!" - -cd java-bigquery-jdbc -export SA_NO_READAPI=github-actions-no-readapi@bigquery-devtools-drivers.iam.gserviceaccount.com -export GOOGLE_APPLICATION_CREDENTIALS=/usr/local/google/home/kirl/.config/gcloud/application_default_credentials.json - -echo "Building standalone it tests payload (pom-it.xml)..." -PATH=/opt/maven/bin:$PATH make build-it-standalone - -echo "Running target test method!" -java -cp "tools/client/drivers/simba/GoogleBigQueryJDBC42.jar:target-it/*" \ - org.junit.platform.console.ConsoleLauncher \ - --select-method com.google.cloud.bigquery.jdbc.it.ITStatementTest#testHighThroughputApiFallbackNoReadApi - From 9532ad6abe057af4acc1bc892f99c52123f24030 Mon Sep 17 00:00:00 2001 From: kirl Date: Fri, 18 Sep 2026 18:27:55 +0000 Subject: [PATCH 8/8] lint --- .../test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java | 3 ++- .../cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java | 4 +++- .../cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java index 8e5244e327b2..80501e126712 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java @@ -463,7 +463,8 @@ public static void validateStatement(Statement stmt, int expectedRows) throws SQ validateStatement(stmt, expectedRows, "ResultSet"); } - public static void validateStatement(Statement stmt, int expectedRows, String clazz) throws SQLException { + public static void validateStatement(Statement stmt, int expectedRows, String clazz) + throws SQLException { String query = "SELECT * FROM UNNEST(GENERATE_ARRAY(1, " + expectedRows + "))"; assertTrue(stmt.execute(query)); int count = 0; diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java index f9700d10d763..1671e97c1ab9 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITJdbcTimestampPicosTest.java @@ -154,7 +154,9 @@ private static String getPicosConnectionUrl(boolean picosEnabled, boolean arrowE + "EnableTimestampPicos=" + (picosEnabled ? "1" : "0") + ";" - + (arrowEnabled ? ITBase.FORCE_READ_API_PROPERTIES + "MaxResults=1;": "EnableHighThroughputAPI=0;"); + + (arrowEnabled + ? ITBase.FORCE_READ_API_PROPERTIES + "MaxResults=1;" + : "EnableHighThroughputAPI=0;"); } @Test diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java index 4fd3b61418d2..ea413c2d318e 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/suites/ITDriverAgnosticTests.java @@ -23,7 +23,6 @@ import com.google.cloud.bigquery.jdbc.it.ITJdbcTimestampPicosTest; import com.google.cloud.bigquery.jdbc.it.ITPcntTest; import com.google.cloud.bigquery.jdbc.it.ITResultSetMetadataTest; -import com.google.cloud.bigquery.jdbc.it.ITStatementTest; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite;