From ef8f13fe6260cd863edf15ce4570089fb02e3121 Mon Sep 17 00:00:00 2001 From: Neenu1995 Date: Mon, 26 Oct 2026 15:05:47 -0400 Subject: [PATCH 1/3] fix(bigquery-jdbc): fix naive fallback of parameter count --- .../bigquery/jdbc/BigQueryPreparedStatement.java | 3 +++ .../cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java index 189c589b404d..390bc8f5c3cd 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java @@ -106,6 +106,9 @@ private int resolveParameterCount(String query, QueryStatistics queryStatistics) if (queryStatistics != null && queryStatistics.getQueryParameters() != null) { return queryStatistics.getQueryParameters().size(); } + if (queryStatistics != null && queryStatistics.getQueryParameters() == null) { + return 0; + } return (int) query.chars().filter(ch -> ch == POSITIONAL_PARAMETER_CHAR).count(); } diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java index 31853252d06d..96a8f2972828 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java @@ -1089,6 +1089,19 @@ public void testPreparedQueryWithExtraPositionalParameterCharacter() throws SQLE ResultSet selectResult2 = selectStmt.executeQuery(); assertNotNull(selectResult2); + // string literal with ? should pass even if there are no parameters. + String noParameterQuery = + String.format("SELECT 'Hello, ?World!' FROM %s.%s", DATASET, TABLE_NAME); + + PreparedStatement noParameterStmt = bigQueryConnection.prepareStatement(noParameterQuery); + + // Tests that parameter Metadata is populated before query execution and setter. + ParameterMetaData noParameterMetaData = noParameterStmt.getParameterMetaData(); + assertNotNull(noParameterMetaData); + assertEquals(0, noParameterMetaData.getParameterCount()); + + ResultSet selectResult3 = noParameterStmt.executeQuery(); + boolean dropStatus = bigQueryStatement.execute(dropQuery); assertFalse(dropStatus); } From a5d5aa6e3acb7198af0b407c466298a5b7d3c4f1 Mon Sep 17 00:00:00 2001 From: Neenu Shaji Date: Mon, 26 Oct 2026 17:51:44 -0400 Subject: [PATCH 2/3] Update java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../cloud/bigquery/jdbc/BigQueryPreparedStatement.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java index 390bc8f5c3cd..c073d7b41b41 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java @@ -103,11 +103,8 @@ class BigQueryPreparedStatement extends BigQueryStatement implements PreparedSta } private int resolveParameterCount(String query, QueryStatistics queryStatistics) { - if (queryStatistics != null && queryStatistics.getQueryParameters() != null) { - return queryStatistics.getQueryParameters().size(); - } - if (queryStatistics != null && queryStatistics.getQueryParameters() == null) { - return 0; + if (queryStatistics != null) { + return queryStatistics.getQueryParameters() == null ? 0 : queryStatistics.getQueryParameters().size(); } return (int) query.chars().filter(ch -> ch == POSITIONAL_PARAMETER_CHAR).count(); } From b3775a3dc2c3f642e7a812b2f944dbeaeec053da Mon Sep 17 00:00:00 2001 From: Neenu1995 Date: Mon, 26 Oct 2026 18:03:53 -0400 Subject: [PATCH 3/3] lint --- .../google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java index c073d7b41b41..9b14e946b094 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java @@ -104,7 +104,9 @@ class BigQueryPreparedStatement extends BigQueryStatement implements PreparedSta private int resolveParameterCount(String query, QueryStatistics queryStatistics) { if (queryStatistics != null) { - return queryStatistics.getQueryParameters() == null ? 0 : queryStatistics.getQueryParameters().size(); + return queryStatistics.getQueryParameters() == null + ? 0 + : queryStatistics.getQueryParameters().size(); } return (int) query.chars().filter(ch -> ch == POSITIONAL_PARAMETER_CHAR).count(); }