@BeforeClass()
|
public static void initClass() throws SQLException {
|
createTable("signedDecimalTest", "id DECIMAL(65,20)");
|
}
|
|
|
@Test
|
public void signedDecimalTest() throws SQLException {
|
try (PreparedStatement pstmt = sharedConnection.prepareStatement("insert into signedDecimalTest values (?)")) {
|
pstmt.setBigDecimal(1, new BigDecimal("123456789012345678901234567890.12345678901234567890"));
|
pstmt.addBatch();
|
pstmt.setObject(1, new BigDecimal("123456789012345678901234567890.12345678901234567890"), Types.DECIMAL, 0);
|
pstmt.addBatch();
|
pstmt.setObject(1, new BigDecimal("9223372036854775806"), Types.DECIMAL);
|
pstmt.addBatch();
|
pstmt.setString(1, "1.1");
|
pstmt.addBatch();
|
pstmt.setInt(1, 1);
|
pstmt.addBatch();
|
pstmt.setNull(1, Types.DECIMAL);
|
pstmt.addBatch();
|
pstmt.setInt(1, -1);
|
pstmt.addBatch();
|
pstmt.executeBatch();
|
}
|
|
try (ResultSet rs = DatatypeTest.getResultSet("select * from signedDecimalTest", false)) {
|
signedDecimalTestResult(rs);
|
}
|
|
try (ResultSet rs = DatatypeTest.getResultSet("select * from signedDecimalTest", true)) {
|
signedDecimalTestResult(rs);
|
}
|
}
|
|
private void signedDecimalTestResult(ResultSet rs) throws SQLException {
|
if (rs.next()) {
|
byteMustFail(rs);
|
shortMustFail(rs);
|
intMustFail(rs);
|
longMustFail(rs);
|
assertEquals(123456789012345678901234567890.12345678901234567890F, rs.getFloat(1), 1000000000000000000000000D);
|
assertEquals(123456789012345678901234567890.12345678901234567890F, rs.getFloat(1), 1000000000000000000000000D);
|
assertEquals(123456789012345678901234567890.12345678901234567890D, rs.getDouble(1), 1000000000000000000000000D);
|
assertEquals(new BigDecimal("123456789012345678901234567890.12345678901234567890"), rs.getBigDecimal(1));
|
assertEquals("123456789012345678901234567890.12345678901234567890", rs.getString(1));
|
if (rs.next()) {
|
byteMustFail(rs);
|
shortMustFail(rs);
|
intMustFail(rs);
|
longMustFail(rs);
|
assertEquals(123456789012345678901234567890.12345678901234567890F, rs.getFloat(1), 1000000000000000000000000D);
|
assertEquals(123456789012345678901234567890.12345678901234567890F, rs.getFloat(1), 1000000000000000000000000D);
|
assertEquals(123456789012345678901234567890.12345678901234567890D, rs.getDouble(1), 1000000000000000000000000D);
|
assertEquals(new BigDecimal("123456789012345678901234567890.12345678901234567890"), rs.getBigDecimal(1));
|
assertEquals("123456789012345678901234567890.12345678901234567890", rs.getString(1));
|
if (rs.next()) {
|
byteMustFail(rs);
|
shortMustFail(rs);
|
intMustFail(rs);
|
assertEquals(9223372036854775806L, rs.getLong(1));
|
assertEquals(9223372036854775806F, rs.getFloat(1), .000001);
|
assertEquals(9223372036854775806D, rs.getDouble(1), .000001);
|
assertEquals(new BigDecimal("9223372036854775806.00000000000000000000"), rs.getBigDecimal(1));
|
assertEquals("9223372036854775806.00000000000000000000", rs.getString(1));
|
if (rs.next()) {
|
byteMustFail(rs);
|
shortMustFail(rs);
|
intMustFail(rs);
|
longMustFail(rs);
|
assertEquals(1.1F, rs.getFloat(1), .000001);
|
assertEquals(1.1D, rs.getDouble(1), .000001);
|
assertEquals("1.10000000000000000000", rs.getString(1));
|
assertEquals(new BigDecimal("1.10000000000000000000"), rs.getBigDecimal(1));
|
if (rs.next()) {
|
oneNullNegativeTest(rs, true, false);
|
} else {
|
fail("must have result !");
|
}
|
} else {
|
fail("must have result !");
|
}
|
} else {
|
fail("must have result !");
|
}
|
} else {
|
fail("must have result !");
|
}
|
} else {
|
fail("must have result !");
|
}
|
}
|
|
|
private void byteMustFail(ResultSet rs) {
|
try {
|
rs.getByte(1);
|
fail("getByte must have thrown error !");
|
} catch (SQLException e) {
|
assertEquals("22003", e.getSQLState());
|
}
|
}
|
|
private void shortMustFail(ResultSet rs) {
|
try {
|
rs.getShort(1);
|
fail("getShort must have thrown error !");
|
} catch (SQLException e) {
|
assertEquals("22003", e.getSQLState());
|
}
|
}
|
|
private void intMustFail(ResultSet rs) {
|
try {
|
rs.getInt(1);
|
fail("getInt must have thrown error !");
|
} catch (SQLException e) {
|
assertEquals("22003", e.getSQLState());
|
}
|
}
|
|
private void longMustFail(ResultSet rs) {
|
try {
|
rs.getLong(1);
|
fail("getLong must have thrown error !");
|
} catch (SQLException e) {
|
assertEquals("22003", e.getSQLState());
|
}
|
}
|
|
private void oneNullNegativeTest(ResultSet rs, boolean decimal, boolean floatingPoint) throws SQLException {
|
try {
|
if (!decimal && !floatingPoint) {
|
assertTrue(rs.getBoolean(1));
|
}
|
assertEquals(1, rs.getByte(1));
|
assertEquals(1, rs.getShort(1));
|
assertEquals(1, rs.getInt(1));
|
assertEquals(1L, rs.getLong(1));
|
assertEquals(1D, rs.getDouble(1), .000001);
|
assertEquals(1F, rs.getFloat(1), .000001);
|
if (decimal) {
|
if (floatingPoint) {
|
BigDecimal bd = rs.getBigDecimal(1);
|
if (!bd.equals(new BigDecimal("1")) && !bd.equals(new BigDecimal("1.0")) ) {
|
fail("getBigDecimal error : is " + bd.toString());
|
}
|
assertEquals("1.0", rs.getString(1));
|
|
} else {
|
assertEquals(new BigDecimal("1.00000000000000000000"), rs.getBigDecimal(1));
|
assertEquals("1.00000000000000000000", rs.getString(1));
|
|
}
|
} else {
|
assertEquals(new BigDecimal("1"), rs.getBigDecimal(1));
|
assertEquals("1", rs.getString(1));
|
}
|
} catch (SQLException e) {
|
e.printStackTrace();
|
fail("must not have thrown error");
|
}
|
|
if (rs.next()) {
|
nullNegativeTest(rs, decimal);
|
} else {
|
fail("must have result !");
|
}
|
}
|
|
private void nullNegativeTest(ResultSet rs, boolean decimal) throws SQLException {
|
try {
|
assertFalse(rs.getBoolean(1));
|
assertEquals(0, rs.getByte(1));
|
assertTrue(rs.wasNull());
|
assertEquals(0, rs.getShort(1));
|
assertEquals(0, rs.getInt(1));
|
assertEquals(0, rs.getLong(1));
|
assertEquals(0, rs.getDouble(1), .00001);
|
assertEquals(0, rs.getFloat(1), .00001);
|
assertNull(rs.getBigDecimal(1));
|
assertNull(rs.getString(1));
|
|
} catch (SQLException e) {
|
e.printStackTrace();
|
fail("must not have thrown error");
|
}
|
|
if (rs.next()) {
|
try {
|
assertFalse(rs.getBoolean(1));
|
assertFalse(rs.wasNull());
|
assertEquals(-1, rs.getByte(1));
|
assertEquals(-1, rs.getShort(1));
|
assertEquals(-1, rs.getInt(1));
|
assertEquals(-1, rs.getLong(1));
|
assertEquals(-1, rs.getDouble(1), .00001);
|
assertEquals(-1, rs.getFloat(1), .00001);
|
if (decimal) {
|
assertTrue(new BigDecimal("-1.00000000000000000000").equals(rs.getBigDecimal(1)));
|
assertEquals("-1.00000000000000000000", rs.getString(1));
|
} else {
|
assertTrue(new BigDecimal("-1").equals(rs.getBigDecimal(1)));
|
assertEquals("-1", rs.getString(1));
|
}
|
|
} catch (SQLException e) {
|
e.printStackTrace();
|
fail("must not have thrown error");
|
}
|
} else {
|
fail("must have result !");
|
}
|
}
|