Mercurial > hg > monetdb-java
changeset 447:7147d1252828
Converted and added Test_Int128() to JDBC_API_Tester.java.
As it is dependent on the availability of support of datatype hugeint an extra check for hugeint is added.
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Wed, 03 Mar 2021 14:02:58 +0100 (2021-03-03) |
parents | 1ae0dc05bce5 |
children | d7bac8d0fb93 |
files | tests/JDBC_API_Tester.java |
diffstat | 1 files changed, 83 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -10,6 +10,7 @@ import java.sql.*; import java.io.StringReader; import java.math.BigDecimal; +import java.math.BigInteger; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -59,7 +60,7 @@ final public class JDBC_API_Tester { jt.Test_Ctransaction(); jt.Test_Dobjects(); jt.Test_FetchSize(); - // jt.Test_Int128(); + jt.Test_Int128(); jt.Test_PSgeneratedkeys(); jt.Test_PSgetObject(); jt.Test_PSlargebatchval(); @@ -808,6 +809,87 @@ final public class JDBC_API_Tester { "ResultSet fetch size after set: 16384\n"); } + private void Test_Int128() { + sb.setLength(0); // clear the output log buffer + + Statement stmt = null; + ResultSet rs = null; + + // check first if datatype hugeint is supported on this server + boolean supportsHugeInt = false; + try { + stmt = con.createStatement(); + // query sys.types to find out if sql datatype hugeint is supported + rs = stmt.executeQuery("SELECT sqlname from sys.types where sqlname = 'hugeint';"); + if (rs != null && rs.next()) { + String sqlname = rs.getString(1); + if ("hugeint".equals(sqlname)) + supportsHugeInt = true; + } + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + + if (!supportsHugeInt) { + closeStmtResSet(stmt, rs); + compareExpectedOutput("Test_Int128", ""); + return; // skip the rest of the test + } + + // test whether we can represent a full-size int128 as JDBC results + PreparedStatement insertStatement = null; + try { + stmt.executeUpdate("CREATE TABLE HUGEINTT (I HUGEINT)"); + stmt.executeUpdate("CREATE TABLE HUGEDECT (I DECIMAL(38,19))"); + + BigInteger bi = new BigInteger("123456789012345678909876543210987654321"); + BigDecimal bd = new BigDecimal("1234567890123456789.9876543210987654321"); + + insertStatement = con.prepareStatement("INSERT INTO HUGEINTT VALUES (?)"); + insertStatement.setBigDecimal(1, new BigDecimal(bi)); + insertStatement.executeUpdate(); + insertStatement.close(); + + stmt.executeUpdate("INSERT INTO HUGEDECT VALUES (" + bd + ");"); + + rs = stmt.executeQuery("SELECT I FROM HUGEINTT"); + rs.next(); + BigInteger biRes = rs.getBigDecimal(1).toBigInteger(); + rs.close(); + sb.append("Expecting " + bi + ", got " + biRes).append("\n"); + if (!bi.equals(biRes)) { + sb.append("value of bi is NOT equal to biRes!").append("\n"); + } + + rs = stmt.executeQuery("SELECT I FROM HUGEDECT"); + rs.next(); + BigDecimal bdRes = rs.getBigDecimal(1); + rs.close(); + sb.append("Expecting " + bd + ", got " + bdRes).append("\n"); + if (!bd.equals(bdRes)) { + sb.append("value of bd is NOT equal to bdRes!").append("\n"); + } + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + + // cleanup + try { + stmt.executeUpdate("DROP TABLE IF EXISTS HUGEINTT"); + stmt.executeUpdate("DROP TABLE IF EXISTS HUGEDECT"); + sb.append("SUCCESS").append("\n"); + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + closeStmtResSet(insertStatement, null); + closeStmtResSet(stmt, rs); + + compareExpectedOutput("Test_Int128", + "Expecting 123456789012345678909876543210987654321, got 123456789012345678909876543210987654321\n" + + "Expecting 1234567890123456789.9876543210987654321, got 1234567890123456789.9876543210987654321\n" + + "SUCCESS\n"); + } + private void Test_PSgeneratedkeys() { sb.setLength(0); // clear the output log buffer