Skip to content

Commit 804ef67

Browse files
SNOW-1213117: Wrap connection, statement and result set in try with resources(3/4) (#1723)
1 parent 76a0d3f commit 804ef67

16 files changed

+3758
-3486
lines changed

src/test/java/net/snowflake/client/jdbc/PutFileWithSpaceIncludedIT.java

+41-40
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.io.FileOutputStream;
1212
import java.sql.Connection;
1313
import java.sql.ResultSet;
14+
import java.sql.Statement;
1415
import net.snowflake.client.TestUtil;
1516
import net.snowflake.client.category.TestCategoryOthers;
1617
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
@@ -49,52 +50,52 @@ public void putFileWithSpaceIncluded() throws Exception {
4950
TarArchiveEntry tarEntry;
5051
while ((tarEntry = tis.getNextTarEntry()) != null) {
5152
File outputFile = new File(dataFolder, tarEntry.getName());
52-
FileOutputStream fos = new FileOutputStream(outputFile);
53-
IOUtils.copy(tis, fos);
54-
fos.close();
53+
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
54+
IOUtils.copy(tis, fos);
55+
}
5556
}
5657

57-
try (Connection con = getConnection()) {
58-
con.createStatement()
59-
.execute(
60-
"create or replace stage snow13400 url='s3://"
61-
+ SF_AWS_USER_BUCKET
62-
+ "/snow13400'"
63-
+ "credentials=(AWS_KEY_ID='"
64-
+ AWS_KEY_ID
65-
+ "' AWS_SECRET_KEY='"
66-
+ AWS_SECRET_KEY
67-
+ "')");
58+
try (Connection con = getConnection();
59+
Statement statement = con.createStatement()) {
60+
try {
61+
statement.execute(
62+
"create or replace stage snow13400 url='s3://"
63+
+ SF_AWS_USER_BUCKET
64+
+ "/snow13400'"
65+
+ "credentials=(AWS_KEY_ID='"
66+
+ AWS_KEY_ID
67+
+ "' AWS_SECRET_KEY='"
68+
+ AWS_SECRET_KEY
69+
+ "')");
6870

69-
{
70-
ResultSet resultSet =
71-
con.createStatement()
72-
.executeQuery(
73-
"put file://"
74-
+ dataFolder.getCanonicalPath()
75-
+ "/* @snow13400 auto_compress=false");
76-
int cnt = 0;
77-
while (resultSet.next()) {
78-
cnt++;
71+
try (ResultSet resultSet =
72+
statement.executeQuery(
73+
"put file://"
74+
+ dataFolder.getCanonicalPath()
75+
+ "/* @snow13400 auto_compress=false")) {
76+
int cnt = 0;
77+
while (resultSet.next()) {
78+
cnt++;
79+
}
80+
assertEquals(cnt, 1);
7981
}
80-
assertEquals(cnt, 1);
81-
}
82-
con.createStatement().execute("create or replace table snow13400(a string)");
83-
con.createStatement().execute("copy into snow13400 from @snow13400");
84-
{
85-
ResultSet resultSet = con.createStatement().executeQuery("select * from snow13400");
86-
int cnt = 0;
87-
String output = null;
88-
while (resultSet.next()) {
89-
output = resultSet.getString(1);
90-
cnt++;
82+
statement.execute("create or replace table snow13400(a string)");
83+
statement.execute("copy into snow13400 from @snow13400");
84+
try (ResultSet resultSet = con.createStatement().executeQuery("select * from snow13400")) {
85+
int cnt = 0;
86+
String output = null;
87+
while (resultSet.next()) {
88+
output = resultSet.getString(1);
89+
cnt++;
90+
}
91+
assertEquals(cnt, 1);
92+
assertEquals(output, "hello");
9193
}
92-
assertEquals(cnt, 1);
93-
assertEquals(output, "hello");
94+
} finally {
95+
statement.execute("rm @snow13400");
96+
statement.execute("drop stage if exists snow13400");
97+
statement.execute("drop table if exists snow13400");
9498
}
95-
con.createStatement().execute("rm @snow13400");
96-
con.createStatement().execute("drop stage if exists snow13400");
97-
con.createStatement().execute("drop table if exists snow13400");
9899
}
99100
}
100101
}

src/test/java/net/snowflake/client/jdbc/PutUnescapeBackslashIT.java

+24-31
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@ public void testPutFileUnescapeBackslashes() throws Exception {
3838
String remoteSubDir = "testPut";
3939
String testDataFileName = "testdata.txt";
4040

41-
Connection connection = null;
42-
Statement statement = null;
43-
ResultSet resultSet = null;
44-
Writer writer = null;
4541
Path topDataDir = null;
4642
try {
4743
topDataDir = Files.createTempDirectory("testPutFileUnescapeBackslashes");
@@ -53,39 +49,36 @@ public void testPutFileUnescapeBackslashes() throws Exception {
5349

5450
// create a test data
5551
File dataFile = new File(subDir.toFile(), testDataFileName);
56-
writer =
52+
try (Writer writer =
5753
new BufferedWriter(
58-
new OutputStreamWriter(new FileOutputStream(dataFile.getCanonicalPath()), "UTF-8"));
59-
writer.write("1,test1");
60-
writer.close();
61-
54+
new OutputStreamWriter(new FileOutputStream(dataFile.getCanonicalPath()), "UTF-8"))) {
55+
writer.write("1,test1");
56+
}
6257
// run PUT command
63-
connection = getConnection();
64-
statement = connection.createStatement();
65-
String sql =
66-
String.format("PUT 'file://%s' @~/%s/", dataFile.getCanonicalPath(), remoteSubDir);
58+
try (Connection connection = getConnection();
59+
Statement statement = connection.createStatement()) {
60+
try {
61+
String sql =
62+
String.format("PUT 'file://%s' @~/%s/", dataFile.getCanonicalPath(), remoteSubDir);
6763

68-
// Escape backslashes. This must be done by the application.
69-
sql = sql.replaceAll("\\\\", "\\\\\\\\");
70-
statement.execute(sql);
64+
// Escape backslashes. This must be done by the application.
65+
sql = sql.replaceAll("\\\\", "\\\\\\\\");
66+
statement.execute(sql);
7167

72-
resultSet =
73-
connection.createStatement().executeQuery(String.format("LS @~/%s/", remoteSubDir));
74-
while (resultSet.next()) {
75-
assertThat(
76-
"File name doesn't match",
77-
resultSet.getString(1),
78-
startsWith(String.format("%s/%s", remoteSubDir, testDataFileName)));
68+
try (ResultSet resultSet =
69+
connection.createStatement().executeQuery(String.format("LS @~/%s/", remoteSubDir))) {
70+
while (resultSet.next()) {
71+
assertThat(
72+
"File name doesn't match",
73+
resultSet.getString(1),
74+
startsWith(String.format("%s/%s", remoteSubDir, testDataFileName)));
75+
}
76+
}
77+
} finally {
78+
statement.execute(String.format("RM @~/%s", remoteSubDir));
79+
}
7980
}
80-
8181
} finally {
82-
if (connection != null) {
83-
connection.createStatement().execute(String.format("RM @~/%s", remoteSubDir));
84-
}
85-
closeSQLObjects(resultSet, statement, connection);
86-
if (writer != null) {
87-
writer.close();
88-
}
8982
FileUtils.deleteDirectory(topDataDir.toFile());
9083
}
9184
}

src/test/java/net/snowflake/client/jdbc/ResultSet0IT.java

+47-58
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.sql.Statement;
1313
import java.util.Properties;
1414
import net.snowflake.client.category.TestCategoryResultSet;
15-
import org.junit.After;
1615
import org.junit.Before;
1716
import org.junit.experimental.categories.Category;
1817

@@ -23,79 +22,69 @@ public class ResultSet0IT extends BaseJDBCTest {
2322

2423
public Connection init(int injectSocketTimeout) throws SQLException {
2524
Connection connection = BaseJDBCTest.getConnection(injectSocketTimeout);
26-
27-
Statement statement = connection.createStatement();
28-
statement.execute(
29-
"alter session set "
30-
+ "TIMEZONE='America/Los_Angeles',"
31-
+ "TIMESTAMP_TYPE_MAPPING='TIMESTAMP_LTZ',"
32-
+ "TIMESTAMP_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
33-
+ "TIMESTAMP_TZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
34-
+ "TIMESTAMP_LTZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
35-
+ "TIMESTAMP_NTZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM'");
36-
statement.close();
25+
try (Statement statement = connection.createStatement()) {
26+
statement.execute(
27+
"alter session set "
28+
+ "TIMEZONE='America/Los_Angeles',"
29+
+ "TIMESTAMP_TYPE_MAPPING='TIMESTAMP_LTZ',"
30+
+ "TIMESTAMP_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
31+
+ "TIMESTAMP_TZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
32+
+ "TIMESTAMP_LTZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
33+
+ "TIMESTAMP_NTZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM'");
34+
}
3735
return connection;
3836
}
3937

4038
public Connection init() throws SQLException {
4139
Connection conn = BaseJDBCTest.getConnection(BaseJDBCTest.DONT_INJECT_SOCKET_TIMEOUT);
42-
Statement stmt = conn.createStatement();
43-
stmt.execute("alter session set jdbc_query_result_format = '" + queryResultFormat + "'");
44-
stmt.close();
40+
try (Statement stmt = conn.createStatement()) {
41+
stmt.execute("alter session set jdbc_query_result_format = '" + queryResultFormat + "'");
42+
}
4543
return conn;
4644
}
4745

4846
public Connection init(Properties paramProperties) throws SQLException {
4947
Connection conn =
5048
BaseJDBCTest.getConnection(DONT_INJECT_SOCKET_TIMEOUT, paramProperties, false, false);
51-
Statement stmt = conn.createStatement();
52-
stmt.execute("alter session set jdbc_query_result_format = '" + queryResultFormat + "'");
53-
stmt.close();
49+
try (Statement stmt = conn.createStatement()) {
50+
stmt.execute("alter session set jdbc_query_result_format = '" + queryResultFormat + "'");
51+
}
5452
return conn;
5553
}
5654

5755
@Before
5856
public void setUp() throws SQLException {
59-
Connection con = init();
60-
61-
// TEST_RS
62-
con.createStatement().execute("create or replace table test_rs (colA string)");
63-
con.createStatement().execute("insert into test_rs values('rowOne')");
64-
con.createStatement().execute("insert into test_rs values('rowTwo')");
65-
con.createStatement().execute("insert into test_rs values('rowThree')");
66-
67-
// ORDERS_JDBC
68-
Statement statement = con.createStatement();
69-
statement.execute(
70-
"create or replace table orders_jdbc"
71-
+ "(C1 STRING NOT NULL COMMENT 'JDBC', "
72-
+ "C2 STRING, C3 STRING, C4 STRING, C5 STRING, C6 STRING, "
73-
+ "C7 STRING, C8 STRING, C9 STRING) "
74-
+ "stage_file_format = (field_delimiter='|' "
75-
+ "error_on_column_count_mismatch=false)");
76-
// put files
77-
assertTrue(
78-
"Failed to put a file",
79-
statement.execute(
80-
"PUT file://" + getFullPathFileInResource(TEST_DATA_FILE) + " @%orders_jdbc"));
81-
assertTrue(
82-
"Failed to put a file",
83-
statement.execute(
84-
"PUT file://" + getFullPathFileInResource(TEST_DATA_FILE_2) + " @%orders_jdbc"));
85-
86-
int numRows = statement.executeUpdate("copy into orders_jdbc");
87-
88-
assertEquals("Unexpected number of rows copied: " + numRows, 73, numRows);
89-
90-
con.close();
91-
}
92-
93-
@After
94-
public void tearDown() throws SQLException {
95-
Connection con = init();
96-
con.createStatement().execute("drop table if exists orders_jdbc");
97-
con.createStatement().execute("drop table if exists test_rs");
98-
con.close();
57+
try (Connection con = init();
58+
Statement statement = con.createStatement()) {
59+
60+
// TEST_RS
61+
statement.execute("create or replace table test_rs (colA string)");
62+
statement.execute("insert into test_rs values('rowOne')");
63+
statement.execute("insert into test_rs values('rowTwo')");
64+
statement.execute("insert into test_rs values('rowThree')");
65+
66+
// ORDERS_JDBC
67+
statement.execute(
68+
"create or replace table orders_jdbc"
69+
+ "(C1 STRING NOT NULL COMMENT 'JDBC', "
70+
+ "C2 STRING, C3 STRING, C4 STRING, C5 STRING, C6 STRING, "
71+
+ "C7 STRING, C8 STRING, C9 STRING) "
72+
+ "stage_file_format = (field_delimiter='|' "
73+
+ "error_on_column_count_mismatch=false)");
74+
// put files
75+
assertTrue(
76+
"Failed to put a file",
77+
statement.execute(
78+
"PUT file://" + getFullPathFileInResource(TEST_DATA_FILE) + " @%orders_jdbc"));
79+
assertTrue(
80+
"Failed to put a file",
81+
statement.execute(
82+
"PUT file://" + getFullPathFileInResource(TEST_DATA_FILE_2) + " @%orders_jdbc"));
83+
84+
int numRows = statement.executeUpdate("copy into orders_jdbc");
85+
86+
assertEquals("Unexpected number of rows copied: " + numRows, 73, numRows);
87+
}
9988
}
10089

10190
ResultSet numberCrossTesting() throws SQLException {

src/test/java/net/snowflake/client/jdbc/ResultSetAlreadyClosedIT.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
public class ResultSetAlreadyClosedIT extends BaseJDBCTest {
2222
@Test
2323
public void testQueryResultSetAlreadyClosed() throws Throwable {
24-
try (Connection connection = getConnection()) {
25-
Statement statement = connection.createStatement();
26-
ResultSet resultSet = statement.executeQuery("select 1");
24+
try (Connection connection = getConnection();
25+
Statement statement = connection.createStatement();
26+
ResultSet resultSet = statement.executeQuery("select 1")) {
2727
checkAlreadyClosed(resultSet);
2828
}
2929
}
@@ -45,9 +45,10 @@ public void testMetadataResultSetAlreadyClosed() throws Throwable {
4545

4646
@Test
4747
public void testEmptyResultSetAlreadyClosed() throws Throwable {
48-
ResultSet resultSet = new SnowflakeResultSetV1.EmptyResultSet();
49-
checkAlreadyClosed(resultSet);
50-
checkAlreadyClosedEmpty(resultSet);
48+
try (ResultSet resultSet = new SnowflakeResultSetV1.EmptyResultSet()) {
49+
checkAlreadyClosed(resultSet);
50+
checkAlreadyClosedEmpty(resultSet);
51+
}
5152
}
5253

5354
private void checkAlreadyClosed(ResultSet resultSet) throws SQLException {

src/test/java/net/snowflake/client/jdbc/ResultSetArrowForce0MultiTimeZone.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ Connection init(String table, String column, String values) throws SQLException
5757
+ "TIMESTAMP_TZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
5858
+ "TIMESTAMP_LTZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM',"
5959
+ "TIMESTAMP_NTZ_OUTPUT_FORMAT='DY, DD MON YYYY HH24:MI:SS TZHTZM'");
60-
}
6160

62-
con.createStatement()
63-
.execute("alter session set jdbc_query_result_format" + " = '" + queryResultFormat + "'");
64-
con.createStatement().execute("create or replace table " + table + " " + column);
65-
con.createStatement().execute("insert into " + table + " values " + values);
61+
statement.execute(
62+
"alter session set jdbc_query_result_format" + " = '" + queryResultFormat + "'");
63+
statement.execute("create or replace table " + table + " " + column);
64+
statement.execute("insert into " + table + " values " + values);
65+
}
6666
return con;
6767
}
6868

0 commit comments

Comments
 (0)