Skip to content

Commit bc871f2

Browse files
committed
added test for unsigned integers to check they are returned as number objects
1 parent 91f41ae commit bc871f2

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

jdbc-v2/src/test/java/com/clickhouse/jdbc/DataTypeTests.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.sql.JDBCType;
2020
import java.sql.PreparedStatement;
2121
import java.sql.ResultSet;
22+
import java.sql.ResultSetMetaData;
2223
import java.sql.SQLException;
2324
import java.sql.Statement;
2425
import java.sql.Timestamp;
@@ -28,8 +29,11 @@
2829
import java.time.OffsetDateTime;
2930
import java.time.ZoneId;
3031
import java.time.ZonedDateTime;
32+
import java.util.ArrayList;
33+
import java.util.Arrays;
3134
import java.util.GregorianCalendar;
3235
import java.util.HashMap;
36+
import java.util.List;
3337
import java.util.Map;
3438
import java.util.Properties;
3539
import java.util.Random;
@@ -220,6 +224,78 @@ public void testIntegerTypes() throws SQLException {
220224
}
221225
}
222226

227+
@Test(groups = { "integration" })
228+
public void testUnsignedIntegerTypes() throws Exception {
229+
Random rand = new Random();
230+
runQuery("CREATE TABLE test_unsigned_integers (order Int8, "
231+
+ "uint8 Nullable(UInt8), "
232+
+ "uint16 Nullable(UInt16), "
233+
+ "uint32 Nullable(UInt32), "
234+
+ "uint64 Nullable(UInt64), "
235+
+ "uint128 Nullable(UInt128), "
236+
+ "uint256 Nullable(UInt256)"
237+
+ ") ENGINE = MergeTree ORDER BY ()");
238+
239+
// Insert null values
240+
insertData("INSERT INTO test_unsigned_integers VALUES ( 1, "
241+
+ "NULL, NULL, NULL, NULL, NULL, NULL)");
242+
243+
// Insert minimum values
244+
insertData("INSERT INTO test_unsigned_integers VALUES ( 2, "
245+
+ "0, 0, 0, 0, 0, 0)");
246+
247+
// Insert random values
248+
int uint8 = rand.nextInt(256);
249+
int uint16 = rand.nextInt(65536);
250+
long uint32 = rand.nextLong() & 0xFFFFFFFFL;
251+
long uint64 = rand.nextLong() & 0xFFFFFFFFFFFFL;
252+
BigInteger uint128 = new BigInteger(38, rand);
253+
BigInteger uint256 = new BigInteger(77, rand);
254+
insertData("INSERT INTO test_unsigned_integers VALUES ( 3, "
255+
+ uint8 + ", " + uint16 + ", " + uint32 + ", " + uint64 + ", " + uint128 + ", " + uint256 + ")");
256+
257+
try (Connection conn = getConnection();
258+
Statement stmt = conn.createStatement();
259+
ResultSet rs = stmt.executeQuery("SELECT * FROM test_unsigned_integers ORDER BY order")) {
260+
261+
List<Class<?>> expectedTypes = Arrays.asList(
262+
Short.class, Integer.class, Long.class, BigInteger.class, BigInteger.class, BigInteger.class);
263+
List<Class<?>> actualTypes = new ArrayList<>();
264+
ResultSetMetaData rsmd = rs.getMetaData();
265+
for (int i = 2; i <= rsmd.getColumnCount(); i++) {
266+
actualTypes.add(Class.forName(rsmd.getColumnClassName(i)));
267+
}
268+
assertEquals(actualTypes, expectedTypes);
269+
270+
271+
assertTrue(rs.next());
272+
assertEquals((Short) rs.getObject("uint8"), null);
273+
assertEquals((Integer) rs.getObject("uint16"), null);
274+
assertEquals((Long) rs.getObject("uint32"), null);
275+
assertEquals((BigInteger) rs.getObject("uint64"), null);
276+
assertEquals((BigInteger) rs.getObject("uint128"), null);
277+
assertEquals((BigInteger) rs.getObject("uint256"), null);
278+
279+
assertTrue(rs.next());
280+
assertEquals((Short) rs.getObject("uint8"), (byte) 0);
281+
assertEquals((Integer) rs.getObject("uint16"), (short) 0);
282+
assertEquals((Long) rs.getObject("uint32"), 0);
283+
assertEquals((BigInteger) rs.getObject("uint64"), BigInteger.ZERO);
284+
assertEquals((BigInteger) rs.getObject("uint128"), BigInteger.ZERO);
285+
assertEquals((BigInteger) rs.getObject("uint256"), BigInteger.ZERO);
286+
287+
assertTrue(rs.next());
288+
assertEquals(((Short) rs.getObject("uint8")).intValue(), uint8);
289+
assertEquals((Integer) rs.getObject("uint16"), uint16);
290+
assertEquals((Long) rs.getObject("uint32"), uint32);
291+
assertEquals((BigInteger) rs.getObject("uint64"), BigInteger.valueOf(uint64));
292+
assertEquals((BigInteger) rs.getObject("uint128"), uint128);
293+
assertEquals((BigInteger) rs.getObject("uint256"), uint256);
294+
295+
assertFalse(rs.next());
296+
}
297+
}
298+
223299
@Test(groups = { "integration" })
224300
public void testDecimalTypes() throws SQLException {
225301
runQuery("CREATE TABLE test_decimals (order Int8, "

0 commit comments

Comments
 (0)