diff --git a/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java b/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java index 0be3933..8a975b2 100644 --- a/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java +++ b/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java @@ -73,6 +73,10 @@ public class TypeInfoCache implements TypeInfo { {"int4", Oid.INT4, Types.INTEGER, "java.lang.Integer", Oid.INT4_ARRAY}, {"oid", Oid.OID, Types.BIGINT, "java.lang.Long", Oid.OID_ARRAY}, {"int8", Oid.INT8, Types.BIGINT, "java.lang.Long", Oid.INT8_ARRAY}, + {"uint1", Oid.UNSPECIFIED, Types.SMALLINT, "java.lang.Integer", Oid.INT1_ARRAY}, + {"uint2", Oid.UNSPECIFIED, Types.INTEGER, "java.lang.Integer", Oid.INT2_ARRAY}, + {"uint4", Oid.UNSPECIFIED, Types.BIGINT, "java.lang.Long", Oid.INT4_ARRAY}, + {"uint8", Oid.UNSPECIFIED, Types.NUMERIC, "java.math.BigDecimal", Oid.INT8_ARRAY}, {"money", Oid.MONEY, Types.DOUBLE, "java.lang.Double", Oid.MONEY_ARRAY}, {"numeric", Oid.NUMERIC, Types.NUMERIC, "java.math.BigDecimal", Oid.NUMERIC_ARRAY}, {"float4", Oid.FLOAT4, Types.REAL, "java.lang.Float", Oid.FLOAT4_ARRAY}, diff --git a/pgjdbc/src/test/java/org/postgresql/test/jdbc4/UnsignedTest.java b/pgjdbc/src/test/java/org/postgresql/test/jdbc4/UnsignedTest.java new file mode 100644 index 0000000..25247db --- /dev/null +++ b/pgjdbc/src/test/java/org/postgresql/test/jdbc4/UnsignedTest.java @@ -0,0 +1,49 @@ +package org.postgresql.test.jdbc4; + +import org.junit.Test; +import org.postgresql.test.TestUtil; +import org.postgresql.test.jdbc2.BaseTest4; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.sql.*; +import java.util.Properties; + +import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; + +public class UnsignedTest extends BaseTest4 { + + /** + * test uint8 type + * @throws Exception + */ + @Test + public void testUint8() throws SQLException { + TestUtil.createTable(con, "test_unit8", "id uint8"); + + PreparedStatement pstmt = con.prepareStatement("INSERT INTO test_unit8 VALUES (?)"); + BigDecimal b = new BigDecimal("9223372036859999999"); + pstmt.setObject(1, b, Types.NUMERIC); + pstmt.executeUpdate(); + + BigDecimal b2 = new BigDecimal("15223372036859999999"); + pstmt.setObject(1, b2, Types.NUMERIC); + pstmt.executeUpdate(); + + Statement stmt = con.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT id FROM test_unit8"); + + assertTrue(rs.next()); + Object r1 = rs.getObject(1); + assertNotNull(r1); + assertEquals(b, r1); + + assertTrue(rs.next()); + Object r2 = rs.getObject(1); + assertNotNull(r2); + assertEquals(b2, r2); + + TestUtil.dropTable(con, "test_unit8"); + } +}