From 4394d51dd478c6c8edd7740305e5c0b5048e0c5d Mon Sep 17 00:00:00 2001 From: Keshav Dandeva Date: Thu, 13 Aug 2026 00:16:12 +0000 Subject: [PATCH 1/3] fix(bigquery-jdbc): escape project and dataset in getExportedKeys SQL template --- .../bigquery/jdbc/DatabaseMetaData_GetExportedKeys.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java-bigquery-jdbc/src/main/resources/com/google/cloud/bigquery/jdbc/DatabaseMetaData_GetExportedKeys.sql b/java-bigquery-jdbc/src/main/resources/com/google/cloud/bigquery/jdbc/DatabaseMetaData_GetExportedKeys.sql index 3cdbb078773d..e28ff7765c17 100644 --- a/java-bigquery-jdbc/src/main/resources/com/google/cloud/bigquery/jdbc/DatabaseMetaData_GetExportedKeys.sql +++ b/java-bigquery-jdbc/src/main/resources/com/google/cloud/bigquery/jdbc/DatabaseMetaData_GetExportedKeys.sql @@ -29,18 +29,18 @@ SELECT REGEXP_EXTRACT(fk.constraint_name, r'[^.]+$') AS FK_NAME, REGEXP_EXTRACT(pk.constraint_name, r'[^.]+$') AS PK_NAME, 7 AS DEFERRABILITY -FROM `%1$s.%2$s.INFORMATION_SCHEMA.KEY_COLUMN_USAGE` AS pk -JOIN `%1$s.%2$s.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE` AS ccu +FROM `%1$s`.`%2$s`.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS pk +JOIN `%1$s`.`%2$s`.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ccu ON ccu.table_catalog = pk.table_catalog AND ccu.table_schema = pk.table_schema AND ccu.table_name = pk.table_name AND ccu.column_name = pk.column_name -JOIN `%1$s.%2$s.INFORMATION_SCHEMA.KEY_COLUMN_USAGE` AS fk +JOIN `%1$s`.`%2$s`.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS fk ON fk.constraint_catalog = ccu.constraint_catalog AND fk.constraint_schema = ccu.constraint_schema AND fk.constraint_name = ccu.constraint_name AND fk.position_in_unique_constraint = pk.ordinal_position -JOIN `%1$s.%2$s.INFORMATION_SCHEMA.TABLE_CONSTRAINTS` AS tc +JOIN `%1$s`.`%2$s`.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc ON tc.constraint_catalog = fk.constraint_catalog AND tc.constraint_schema = fk.constraint_schema AND tc.constraint_name = fk.constraint_name From 88e66447c1eda0bb8dd27c2ce7cf4fc8ab8bf920 Mon Sep 17 00:00:00 2001 From: Keshav Dandeva Date: Thu, 13 Aug 2026 00:16:38 +0000 Subject: [PATCH 2/3] test: add metadata TPC IT --- .../bigquery/jdbc/it/ITTPCBigQueryTest.java | 113 ++++++++++++++++-- 1 file changed, 106 insertions(+), 7 deletions(-) diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java index a3838e690741..bb57c52c51b4 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java @@ -23,6 +23,7 @@ import com.google.cloud.bigquery.jdbc.BigQueryConnection; import java.sql.Connection; +import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; @@ -38,11 +39,11 @@ public class ITTPCBigQueryTest { private static final String TPC_PROJECT_ID = System.getenv("PROJECT_ID"); private static final String TPC_ENDPOINT = - (ENDPOINT_URL.isEmpty()) + (ENDPOINT_URL == null || ENDPOINT_URL.isEmpty()) ? "jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443" : "jdbc:bigquery://" + ENDPOINT_URL; private static final String TPC_UNIVERSE_DOMAIN = - (UNIVERSE_DOMAIN.isEmpty()) ? "googleapis.com" : UNIVERSE_DOMAIN; + (UNIVERSE_DOMAIN == null || UNIVERSE_DOMAIN.isEmpty()) ? "googleapis.com" : UNIVERSE_DOMAIN; // See here go/bq-cli-tpc for testing setup. // Use the default test project. @@ -200,20 +201,118 @@ public void testServiceAccountKeyFileReturns() throws SQLException { connection.close(); } + @Test + public void testDatabaseMetadataOperationsInTPC() throws SQLException { + validateTPCEnvironment(); + String connection_uri = + TPC_ENDPOINT + + ";" + + "ProjectId=" + + TPC_PROJECT_ID + + ";" + + "OAuthType=0;" + + "universeDomain=" + + TPC_UNIVERSE_DOMAIN + + ";" + + "OAuthServiceAcctEmail=" + + TPC_SERVICE_ACCOUNT + + ";" + + "OAuthPvtKey=" + + TPC_PVT_KEY + + ";"; + + String dataset = "INTEGRATION_TESTS"; + String pkTable = "IT_METADATA_PK_" + System.currentTimeMillis(); + String fkTable = "IT_METADATA_FK_" + System.currentTimeMillis(); + + Connection connection = DriverManager.getConnection(connection_uri); + Statement stmt = connection.createStatement(); + try { + assertNotNull(connection); + assertFalse(connection.isClosed()); + + // Create test PK and FK tables + stmt.execute( + String.format( + "CREATE OR REPLACE TABLE `%s.%s.%s` (id INT64, name STRING, PRIMARY KEY (id) NOT ENFORCED);", + TPC_PROJECT_ID, dataset, pkTable)); + stmt.execute( + String.format( + "CREATE OR REPLACE TABLE `%s.%s.%s` (order_id INT64, pk_id INT64, PRIMARY KEY (order_id) NOT ENFORCED, CONSTRAINT fk_order FOREIGN KEY (pk_id) REFERENCES `%s.%s.%s`(id) NOT ENFORCED);", + TPC_PROJECT_ID, dataset, fkTable, TPC_PROJECT_ID, dataset, pkTable)); + + DatabaseMetaData metaData = connection.getMetaData(); + assertNotNull(metaData); + + // 1. Test getTables + try (ResultSet rs = metaData.getTables(TPC_PROJECT_ID, dataset, pkTable, null)) { + assertTrue(rs.next(), "Expected PK table to be returned by getTables"); + assertEquals(pkTable, rs.getString("TABLE_NAME")); + assertFalse(rs.next()); + } + + // 2. Test getColumns + try (ResultSet rs = metaData.getColumns(TPC_PROJECT_ID, dataset, pkTable, "id")) { + assertTrue(rs.next(), "Expected id column to be returned by getColumns"); + assertEquals("id", rs.getString("COLUMN_NAME")); + assertFalse(rs.next()); + } + + // 3. Test getPrimaryKeys + try (ResultSet rs = metaData.getPrimaryKeys(TPC_PROJECT_ID, dataset, pkTable)) { + assertTrue(rs.next(), "Expected primary key to be returned by getPrimaryKeys"); + assertEquals("id", rs.getString("COLUMN_NAME")); + assertFalse(rs.next()); + } + + // 4. Test getImportedKeys + try (ResultSet rs = metaData.getImportedKeys(TPC_PROJECT_ID, dataset, fkTable)) { + assertTrue(rs.next(), "Expected foreign key to be returned by getImportedKeys"); + assertEquals(pkTable, rs.getString("PKTABLE_NAME")); + assertEquals("id", rs.getString("PKCOLUMN_NAME")); + assertEquals(fkTable, rs.getString("FKTABLE_NAME")); + assertEquals("pk_id", rs.getString("FKCOLUMN_NAME")); + assertEquals("fk_order", rs.getString("FK_NAME")); + assertFalse(rs.next()); + } + + // 5. Test getExportedKeys + try (ResultSet rs = metaData.getExportedKeys(TPC_PROJECT_ID, dataset, pkTable)) { + assertTrue(rs.next(), "Expected exported foreign key to be returned by getExportedKeys"); + assertEquals(pkTable, rs.getString("PKTABLE_NAME")); + assertEquals("id", rs.getString("PKCOLUMN_NAME")); + assertEquals(fkTable, rs.getString("FKTABLE_NAME")); + assertEquals("pk_id", rs.getString("FKCOLUMN_NAME")); + assertEquals("fk_order", rs.getString("FK_NAME")); + assertFalse(rs.next()); + } + } finally { + try { + stmt.execute( + String.format("DROP TABLE IF EXISTS `%s.%s.%s`;", TPC_PROJECT_ID, dataset, fkTable)); + stmt.execute( + String.format("DROP TABLE IF EXISTS `%s.%s.%s`;", TPC_PROJECT_ID, dataset, pkTable)); + } finally { + stmt.close(); + connection.close(); + } + } + } + private void validateTPCEnvironment() { - if (TPC_PROJECT_ID.isEmpty()) { + if (TPC_PROJECT_ID == null || TPC_PROJECT_ID.isEmpty()) { throw new IllegalArgumentException("TPC_PROJECT_ID is empty"); } - if (TPC_SERVICE_ACCOUNT.isEmpty()) { + if (TPC_SERVICE_ACCOUNT == null || TPC_SERVICE_ACCOUNT.isEmpty()) { throw new IllegalArgumentException("TPC_SERVICE_ACCOUNT is empty"); } - if (TPC_ENDPOINT.isEmpty()) { + if (TPC_ENDPOINT == null || TPC_ENDPOINT.isEmpty()) { throw new IllegalArgumentException("TPC_ENDPOINT is empty"); } - if (TPC_PVT_KEY.isEmpty()) { + if (TPC_PVT_KEY == null || TPC_PVT_KEY.isEmpty()) { throw new IllegalArgumentException("TPC_PVT_KEY is empty"); } - if (TPC_UNIVERSE_DOMAIN.isEmpty()) { + if (TPC_UNIVERSE_DOMAIN == null || TPC_UNIVERSE_DOMAIN.isEmpty()) { throw new IllegalArgumentException("TPC_UNIVERSE_DOMAIN is empty"); } } From e6108e25c7d035aa79b7470086b1424a231c0142 Mon Sep 17 00:00:00 2001 From: Keshav Dandeva Date: Thu, 13 Aug 2026 00:34:15 +0000 Subject: [PATCH 3/3] use try-with resource in ITTPCBigQueryTest.java --- .../bigquery/jdbc/it/ITTPCBigQueryTest.java | 219 +++++++++--------- 1 file changed, 110 insertions(+), 109 deletions(-) diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java index bb57c52c51b4..9a856346042c 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITTPCBigQueryTest.java @@ -70,17 +70,18 @@ public void testServiceAccountAuthenticationViaEmail() throws SQLException { + TPC_PVT_KEY + ";"; - Connection connection = DriverManager.getConnection(connection_uri); - assertNotNull(connection); - assertFalse(connection.isClosed()); - assertEquals( - "GOOGLE_SERVICE_ACCOUNT", - connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); - String query = "SELECT 1"; - Statement statement = connection.createStatement(); - ResultSet jsonResultSet = statement.executeQuery(query); - assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); - connection.close(); + try (Connection connection = DriverManager.getConnection(connection_uri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); + assertEquals( + "GOOGLE_SERVICE_ACCOUNT", + connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); + String query = "SELECT 1"; + try (Statement statement = connection.createStatement(); + ResultSet jsonResultSet = statement.executeQuery(query)) { + assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); + } + } } // You will need to change the environment variable for GOOGLE_APPLICATION_CREDENTIALS to point to @@ -99,17 +100,18 @@ public void testValidApplicationDefaultCredentialsAuthentication() throws SQLExc + TPC_UNIVERSE_DOMAIN + ";"; - Connection connection = DriverManager.getConnection(connection_uri); - assertNotNull(connection); - assertFalse(connection.isClosed()); - assertEquals( - "APPLICATION_DEFAULT_CREDENTIALS", - connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); - String query = "SELECT * FROM test.test;"; - Statement statement = connection.createStatement(); - ResultSet jsonResultSet = statement.executeQuery(query); - assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); - connection.close(); + try (Connection connection = DriverManager.getConnection(connection_uri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); + assertEquals( + "APPLICATION_DEFAULT_CREDENTIALS", + connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); + String query = "SELECT * FROM test.test;"; + try (Statement statement = connection.createStatement(); + ResultSet jsonResultSet = statement.executeQuery(query)) { + assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); + } + } } @Test @@ -129,14 +131,15 @@ public void testValidPreGeneratedAccessTokenAuthentication() throws SQLException + TPC_UNIVERSE_DOMAIN + ";"; - Connection connection = DriverManager.getConnection(connection_uri); - String query = "SELECT * FROM test.test;"; - Statement statement = connection.createStatement(); - ResultSet jsonResultSet = statement.executeQuery(query); - assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); - assertNotNull(connection); - assertFalse(connection.isClosed()); - connection.close(); + try (Connection connection = DriverManager.getConnection(connection_uri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); + String query = "SELECT * FROM test.test;"; + try (Statement statement = connection.createStatement(); + ResultSet jsonResultSet = statement.executeQuery(query)) { + assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); + } + } } @Test @@ -159,17 +162,18 @@ public void testSimpleQueryReturns() throws SQLException { + TPC_PVT_KEY + ";"; // Plug in this value when testing from the key file - Connection connection = DriverManager.getConnection(connection_uri); - assertNotNull(connection); - assertFalse(connection.isClosed()); - assertEquals( - "GOOGLE_SERVICE_ACCOUNT", - connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); - String query = "SELECT * FROM test.test;"; - Statement statement = connection.createStatement(); - ResultSet jsonResultSet = statement.executeQuery(query); - assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); - connection.close(); + try (Connection connection = DriverManager.getConnection(connection_uri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); + assertEquals( + "GOOGLE_SERVICE_ACCOUNT", + connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); + String query = "SELECT * FROM test.test;"; + try (Statement statement = connection.createStatement(); + ResultSet jsonResultSet = statement.executeQuery(query)) { + assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); + } + } } @Test @@ -188,17 +192,18 @@ public void testServiceAccountKeyFileReturns() throws SQLException { // Point the key path to where you have downloaded it to. + "OAuthPvtKeyPath=/Users/YourPathToSecretFile/SAKeyFile.json;"; - Connection connection = DriverManager.getConnection(connection_uri); - assertNotNull(connection); - assertFalse(connection.isClosed()); - assertEquals( - "GOOGLE_SERVICE_ACCOUNT", - connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); - String query = "SELECT * FROM test.test;"; - Statement statement = connection.createStatement(); - ResultSet jsonResultSet = statement.executeQuery(query); - assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); - connection.close(); + try (Connection connection = DriverManager.getConnection(connection_uri)) { + assertNotNull(connection); + assertFalse(connection.isClosed()); + assertEquals( + "GOOGLE_SERVICE_ACCOUNT", + connection.unwrap(BigQueryConnection.class).getAuthProperties().get("OAuthType")); + String query = "SELECT * FROM test.test;"; + try (Statement statement = connection.createStatement(); + ResultSet jsonResultSet = statement.executeQuery(query)) { + assertTrue(jsonResultSet.getClass().getName().contains("BigQueryJsonResultSet")); + } + } } @Test @@ -225,76 +230,72 @@ public void testDatabaseMetadataOperationsInTPC() throws SQLException { String pkTable = "IT_METADATA_PK_" + System.currentTimeMillis(); String fkTable = "IT_METADATA_FK_" + System.currentTimeMillis(); - Connection connection = DriverManager.getConnection(connection_uri); - Statement stmt = connection.createStatement(); - try { + try (Connection connection = DriverManager.getConnection(connection_uri); + Statement stmt = connection.createStatement()) { assertNotNull(connection); assertFalse(connection.isClosed()); - // Create test PK and FK tables - stmt.execute( - String.format( - "CREATE OR REPLACE TABLE `%s.%s.%s` (id INT64, name STRING, PRIMARY KEY (id) NOT ENFORCED);", - TPC_PROJECT_ID, dataset, pkTable)); - stmt.execute( - String.format( - "CREATE OR REPLACE TABLE `%s.%s.%s` (order_id INT64, pk_id INT64, PRIMARY KEY (order_id) NOT ENFORCED, CONSTRAINT fk_order FOREIGN KEY (pk_id) REFERENCES `%s.%s.%s`(id) NOT ENFORCED);", - TPC_PROJECT_ID, dataset, fkTable, TPC_PROJECT_ID, dataset, pkTable)); + try { + // Create test PK and FK tables + stmt.execute( + String.format( + "CREATE OR REPLACE TABLE `%s.%s.%s` (id INT64, name STRING, PRIMARY KEY (id) NOT ENFORCED);", + TPC_PROJECT_ID, dataset, pkTable)); + stmt.execute( + String.format( + "CREATE OR REPLACE TABLE `%s.%s.%s` (order_id INT64, pk_id INT64, PRIMARY KEY (order_id) NOT ENFORCED, CONSTRAINT fk_order FOREIGN KEY (pk_id) REFERENCES `%s.%s.%s`(id) NOT ENFORCED);", + TPC_PROJECT_ID, dataset, fkTable, TPC_PROJECT_ID, dataset, pkTable)); - DatabaseMetaData metaData = connection.getMetaData(); - assertNotNull(metaData); + DatabaseMetaData metaData = connection.getMetaData(); + assertNotNull(metaData); - // 1. Test getTables - try (ResultSet rs = metaData.getTables(TPC_PROJECT_ID, dataset, pkTable, null)) { - assertTrue(rs.next(), "Expected PK table to be returned by getTables"); - assertEquals(pkTable, rs.getString("TABLE_NAME")); - assertFalse(rs.next()); - } + // 1. Test getTables + try (ResultSet rs = metaData.getTables(TPC_PROJECT_ID, dataset, pkTable, null)) { + assertTrue(rs.next(), "Expected PK table to be returned by getTables"); + assertEquals(pkTable, rs.getString("TABLE_NAME")); + assertFalse(rs.next()); + } - // 2. Test getColumns - try (ResultSet rs = metaData.getColumns(TPC_PROJECT_ID, dataset, pkTable, "id")) { - assertTrue(rs.next(), "Expected id column to be returned by getColumns"); - assertEquals("id", rs.getString("COLUMN_NAME")); - assertFalse(rs.next()); - } + // 2. Test getColumns + try (ResultSet rs = metaData.getColumns(TPC_PROJECT_ID, dataset, pkTable, "id")) { + assertTrue(rs.next(), "Expected id column to be returned by getColumns"); + assertEquals("id", rs.getString("COLUMN_NAME")); + assertFalse(rs.next()); + } - // 3. Test getPrimaryKeys - try (ResultSet rs = metaData.getPrimaryKeys(TPC_PROJECT_ID, dataset, pkTable)) { - assertTrue(rs.next(), "Expected primary key to be returned by getPrimaryKeys"); - assertEquals("id", rs.getString("COLUMN_NAME")); - assertFalse(rs.next()); - } + // 3. Test getPrimaryKeys + try (ResultSet rs = metaData.getPrimaryKeys(TPC_PROJECT_ID, dataset, pkTable)) { + assertTrue(rs.next(), "Expected primary key to be returned by getPrimaryKeys"); + assertEquals("id", rs.getString("COLUMN_NAME")); + assertFalse(rs.next()); + } - // 4. Test getImportedKeys - try (ResultSet rs = metaData.getImportedKeys(TPC_PROJECT_ID, dataset, fkTable)) { - assertTrue(rs.next(), "Expected foreign key to be returned by getImportedKeys"); - assertEquals(pkTable, rs.getString("PKTABLE_NAME")); - assertEquals("id", rs.getString("PKCOLUMN_NAME")); - assertEquals(fkTable, rs.getString("FKTABLE_NAME")); - assertEquals("pk_id", rs.getString("FKCOLUMN_NAME")); - assertEquals("fk_order", rs.getString("FK_NAME")); - assertFalse(rs.next()); - } + // 4. Test getImportedKeys + try (ResultSet rs = metaData.getImportedKeys(TPC_PROJECT_ID, dataset, fkTable)) { + assertTrue(rs.next(), "Expected foreign key to be returned by getImportedKeys"); + assertEquals(pkTable, rs.getString("PKTABLE_NAME")); + assertEquals("id", rs.getString("PKCOLUMN_NAME")); + assertEquals(fkTable, rs.getString("FKTABLE_NAME")); + assertEquals("pk_id", rs.getString("FKCOLUMN_NAME")); + assertEquals("fk_order", rs.getString("FK_NAME")); + assertFalse(rs.next()); + } - // 5. Test getExportedKeys - try (ResultSet rs = metaData.getExportedKeys(TPC_PROJECT_ID, dataset, pkTable)) { - assertTrue(rs.next(), "Expected exported foreign key to be returned by getExportedKeys"); - assertEquals(pkTable, rs.getString("PKTABLE_NAME")); - assertEquals("id", rs.getString("PKCOLUMN_NAME")); - assertEquals(fkTable, rs.getString("FKTABLE_NAME")); - assertEquals("pk_id", rs.getString("FKCOLUMN_NAME")); - assertEquals("fk_order", rs.getString("FK_NAME")); - assertFalse(rs.next()); - } - } finally { - try { + // 5. Test getExportedKeys + try (ResultSet rs = metaData.getExportedKeys(TPC_PROJECT_ID, dataset, pkTable)) { + assertTrue(rs.next(), "Expected exported foreign key to be returned by getExportedKeys"); + assertEquals(pkTable, rs.getString("PKTABLE_NAME")); + assertEquals("id", rs.getString("PKCOLUMN_NAME")); + assertEquals(fkTable, rs.getString("FKTABLE_NAME")); + assertEquals("pk_id", rs.getString("FKCOLUMN_NAME")); + assertEquals("fk_order", rs.getString("FK_NAME")); + assertFalse(rs.next()); + } + } finally { stmt.execute( String.format("DROP TABLE IF EXISTS `%s.%s.%s`;", TPC_PROJECT_ID, dataset, fkTable)); stmt.execute( String.format("DROP TABLE IF EXISTS `%s.%s.%s`;", TPC_PROJECT_ID, dataset, pkTable)); - } finally { - stmt.close(); - connection.close(); } } }