|
22 | 22 | import java.sql.Clob;
|
23 | 23 | import java.sql.Connection;
|
24 | 24 | import java.sql.DatabaseMetaData;
|
| 25 | +import java.sql.Date; |
25 | 26 | import java.sql.PreparedStatement;
|
26 | 27 | import java.sql.ResultSet;
|
27 | 28 | import java.sql.ResultSetMetaData;
|
|
31 | 32 | import java.sql.Time;
|
32 | 33 | import java.sql.Timestamp;
|
33 | 34 | import java.sql.Types;
|
| 35 | +import java.time.LocalDate; |
| 36 | +import java.time.LocalDateTime; |
| 37 | +import java.time.LocalTime; |
34 | 38 | import java.util.ArrayList;
|
35 | 39 | import java.util.LinkedList;
|
36 | 40 | import java.util.List;
|
@@ -1069,4 +1073,87 @@ public void testGetObjectForJSONResultFormatUsingJDBCDecimalAsInt() throws SQLEx
|
1069 | 1073 | }
|
1070 | 1074 | }
|
1071 | 1075 | }
|
| 1076 | + |
| 1077 | + @Test |
| 1078 | + public void testGetObjectWithType() throws SQLException { |
| 1079 | + try (Connection connection = init(); |
| 1080 | + Statement statement = connection.createStatement()) { |
| 1081 | + statement.execute( |
| 1082 | + " CREATE OR REPLACE TABLE test_all_types (" |
| 1083 | + + " string VARCHAR, " |
| 1084 | + + " b TINYINT, " |
| 1085 | + + " s SMALLINT, " |
| 1086 | + + " i INTEGER, " |
| 1087 | + + " l BIGINT, " |
| 1088 | + + " f FLOAT, " |
| 1089 | + + " d DOUBLE, " |
| 1090 | + + " bd DOUBLE, " |
| 1091 | + + " bool BOOLEAN, " |
| 1092 | + + " timestampLtz TIMESTAMP_LTZ, " |
| 1093 | + + " timestampNtz TIMESTAMP_NTZ, " |
| 1094 | + + " timestampTz TIMESTAMP_TZ, " |
| 1095 | + + " date DATE," |
| 1096 | + + " time TIME " |
| 1097 | + + " )"); |
| 1098 | + statement.execute( |
| 1099 | + "insert into test_all_types values('aString',1,2,3,4,1.1,2.2,3.3, false, " |
| 1100 | + + "'2021-12-22 09:43:44','2021-12-22 09:43:44','2021-12-22 09:43:44', " |
| 1101 | + + "'2023-12-24','12:34:56')"); |
| 1102 | + |
| 1103 | + assertResultValueAndType(statement, "aString", "string", String.class); |
| 1104 | + assertResultValueAndType(statement, new Byte("1"), "b", Byte.class); |
| 1105 | + assertResultValueAndType(statement, Short.valueOf("2"), "s", Short.class); |
| 1106 | + assertResultValueAndType(statement, Integer.valueOf("2"), "s", Integer.class); |
| 1107 | + assertResultValueAndType(statement, Integer.valueOf("3"), "i", Integer.class); |
| 1108 | + assertResultValueAndType(statement, Long.valueOf("4"), "l", Long.class); |
| 1109 | + assertResultValueAndType(statement, BigDecimal.valueOf(4), "l", BigDecimal.class); |
| 1110 | + assertResultValueAndType(statement, Float.valueOf("1.1"), "f", Float.class); |
| 1111 | + assertResultValueAndType(statement, Double.valueOf("1.1"), "f", Double.class); |
| 1112 | + assertResultValueAndType(statement, Double.valueOf("2.2"), "d", Double.class); |
| 1113 | + assertResultValueAndType(statement, BigDecimal.valueOf(3.3), "bd", BigDecimal.class); |
| 1114 | + assertResultValueAndType(statement, "FALSE", "bool", String.class); |
| 1115 | + assertResultValueAndType(statement, Boolean.FALSE, "bool", Boolean.class); |
| 1116 | + assertResultValueAndType(statement, Long.valueOf(0), "bool", Long.class); |
| 1117 | + assertResultValueAsString( |
| 1118 | + statement, |
| 1119 | + new SnowflakeTimestampWithTimezone( |
| 1120 | + Timestamp.valueOf(LocalDateTime.of(2021, 12, 22, 9, 43, 44)), TimeZone.getDefault()), |
| 1121 | + "timestampLtz", |
| 1122 | + Timestamp.class); |
| 1123 | + assertResultValueAsString( |
| 1124 | + statement, |
| 1125 | + new SnowflakeTimestampWithTimezone( |
| 1126 | + Timestamp.valueOf(LocalDateTime.of(2021, 12, 22, 9, 43, 44)), TimeZone.getDefault()), |
| 1127 | + "timestampNtz", |
| 1128 | + Timestamp.class); |
| 1129 | + assertResultValueAsString( |
| 1130 | + statement, |
| 1131 | + new SnowflakeTimestampWithTimezone( |
| 1132 | + Timestamp.valueOf(LocalDateTime.of(2021, 12, 22, 9, 43, 44)), TimeZone.getDefault()), |
| 1133 | + "timestampTz", |
| 1134 | + Timestamp.class); |
| 1135 | + assertResultValueAndType( |
| 1136 | + statement, Date.valueOf(LocalDate.of(2023, 12, 24)), "date", Date.class); |
| 1137 | + assertResultValueAndType( |
| 1138 | + statement, Time.valueOf(LocalTime.of(12, 34, 56)), "time", Time.class); |
| 1139 | + } |
| 1140 | + } |
| 1141 | + |
| 1142 | + private void assertResultValueAndType( |
| 1143 | + Statement statement, Object expected, String columnName, Class<?> type) throws SQLException { |
| 1144 | + try (ResultSet resultSetString = |
| 1145 | + statement.executeQuery(String.format("select %s from test_all_types", columnName))) { |
| 1146 | + resultSetString.next(); |
| 1147 | + assertEquals(expected, resultSetString.getObject(1, type)); |
| 1148 | + } |
| 1149 | + } |
| 1150 | + |
| 1151 | + private void assertResultValueAsString( |
| 1152 | + Statement statement, Object expected, String columnName, Class type) throws SQLException { |
| 1153 | + try (ResultSet resultSetString = |
| 1154 | + statement.executeQuery(String.format("select %s from test_all_types", columnName))) { |
| 1155 | + resultSetString.next(); |
| 1156 | + assertEquals(expected.toString(), resultSetString.getObject(1, type).toString()); |
| 1157 | + } |
| 1158 | + } |
1072 | 1159 | }
|
0 commit comments