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..9f171afdab95 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_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" \ 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 2ee127a26af1..e3ade6ebaa3d 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 @@ -929,16 +929,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/ITBase.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBase.java index 18d9d1be36b2..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 @@ -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,16 @@ 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..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 : "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 e73f2395b493..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 @@ -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 connectionUri = + ITBase.connectionUrl + + ";ServiceAccountImpersonationEmail=" + + saNoReadApi + + ";MaxResults=10;" + + ITBase.FORCE_READ_API_PROPERTIES; + + try (Connection connection = DriverManager.getConnection(connectionUri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); + + Statement statement = connection.createStatement(); + validateStatement(statement, 50, "BigQueryJsonResultSet"); + } + } }