comparison tests/JDBC_API_Tester.java @ 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
comparison
equal deleted inserted replaced
446:1ae0dc05bce5 447:7147d1252828
8 8
9 import java.sql.*; 9 import java.sql.*;
10 10
11 import java.io.StringReader; 11 import java.io.StringReader;
12 import java.math.BigDecimal; 12 import java.math.BigDecimal;
13 import java.math.BigInteger;
13 import java.nio.charset.Charset; 14 import java.nio.charset.Charset;
14 import java.text.SimpleDateFormat; 15 import java.text.SimpleDateFormat;
15 import java.util.ArrayList; 16 import java.util.ArrayList;
16 import java.util.Calendar; 17 import java.util.Calendar;
17 import java.util.Iterator; 18 import java.util.Iterator;
57 jt.Test_Creplysize(); 58 jt.Test_Creplysize();
58 jt.Test_Csavepoints(); 59 jt.Test_Csavepoints();
59 jt.Test_Ctransaction(); 60 jt.Test_Ctransaction();
60 jt.Test_Dobjects(); 61 jt.Test_Dobjects();
61 jt.Test_FetchSize(); 62 jt.Test_FetchSize();
62 // jt.Test_Int128(); 63 jt.Test_Int128();
63 jt.Test_PSgeneratedkeys(); 64 jt.Test_PSgeneratedkeys();
64 jt.Test_PSgetObject(); 65 jt.Test_PSgetObject();
65 jt.Test_PSlargebatchval(); 66 jt.Test_PSlargebatchval();
66 jt.Test_PSlargeresponse(con_URL); 67 jt.Test_PSlargeresponse(con_URL);
67 jt.Test_PSmanycon(con_URL); 68 jt.Test_PSmanycon(con_URL);
804 compareExpectedOutput("Test_FetchSize", 805 compareExpectedOutput("Test_FetchSize",
805 "Statement fetch size before set: 0\n" + 806 "Statement fetch size before set: 0\n" +
806 "ResultSet fetch size before set: 250\n" + 807 "ResultSet fetch size before set: 250\n" +
807 "Statement fetch size after set: 40\n" + 808 "Statement fetch size after set: 40\n" +
808 "ResultSet fetch size after set: 16384\n"); 809 "ResultSet fetch size after set: 16384\n");
810 }
811
812 private void Test_Int128() {
813 sb.setLength(0); // clear the output log buffer
814
815 Statement stmt = null;
816 ResultSet rs = null;
817
818 // check first if datatype hugeint is supported on this server
819 boolean supportsHugeInt = false;
820 try {
821 stmt = con.createStatement();
822 // query sys.types to find out if sql datatype hugeint is supported
823 rs = stmt.executeQuery("SELECT sqlname from sys.types where sqlname = 'hugeint';");
824 if (rs != null && rs.next()) {
825 String sqlname = rs.getString(1);
826 if ("hugeint".equals(sqlname))
827 supportsHugeInt = true;
828 }
829 } catch (SQLException e) {
830 sb.append("FAILED: ").append(e.getMessage()).append("\n");
831 }
832
833 if (!supportsHugeInt) {
834 closeStmtResSet(stmt, rs);
835 compareExpectedOutput("Test_Int128", "");
836 return; // skip the rest of the test
837 }
838
839 // test whether we can represent a full-size int128 as JDBC results
840 PreparedStatement insertStatement = null;
841 try {
842 stmt.executeUpdate("CREATE TABLE HUGEINTT (I HUGEINT)");
843 stmt.executeUpdate("CREATE TABLE HUGEDECT (I DECIMAL(38,19))");
844
845 BigInteger bi = new BigInteger("123456789012345678909876543210987654321");
846 BigDecimal bd = new BigDecimal("1234567890123456789.9876543210987654321");
847
848 insertStatement = con.prepareStatement("INSERT INTO HUGEINTT VALUES (?)");
849 insertStatement.setBigDecimal(1, new BigDecimal(bi));
850 insertStatement.executeUpdate();
851 insertStatement.close();
852
853 stmt.executeUpdate("INSERT INTO HUGEDECT VALUES (" + bd + ");");
854
855 rs = stmt.executeQuery("SELECT I FROM HUGEINTT");
856 rs.next();
857 BigInteger biRes = rs.getBigDecimal(1).toBigInteger();
858 rs.close();
859 sb.append("Expecting " + bi + ", got " + biRes).append("\n");
860 if (!bi.equals(biRes)) {
861 sb.append("value of bi is NOT equal to biRes!").append("\n");
862 }
863
864 rs = stmt.executeQuery("SELECT I FROM HUGEDECT");
865 rs.next();
866 BigDecimal bdRes = rs.getBigDecimal(1);
867 rs.close();
868 sb.append("Expecting " + bd + ", got " + bdRes).append("\n");
869 if (!bd.equals(bdRes)) {
870 sb.append("value of bd is NOT equal to bdRes!").append("\n");
871 }
872 } catch (SQLException e) {
873 sb.append("FAILED: ").append(e.getMessage()).append("\n");
874 }
875
876 // cleanup
877 try {
878 stmt.executeUpdate("DROP TABLE IF EXISTS HUGEINTT");
879 stmt.executeUpdate("DROP TABLE IF EXISTS HUGEDECT");
880 sb.append("SUCCESS").append("\n");
881 } catch (SQLException e) {
882 sb.append("FAILED: ").append(e.getMessage()).append("\n");
883 }
884 closeStmtResSet(insertStatement, null);
885 closeStmtResSet(stmt, rs);
886
887 compareExpectedOutput("Test_Int128",
888 "Expecting 123456789012345678909876543210987654321, got 123456789012345678909876543210987654321\n" +
889 "Expecting 1234567890123456789.9876543210987654321, got 1234567890123456789.9876543210987654321\n" +
890 "SUCCESS\n");
809 } 891 }
810 892
811 private void Test_PSgeneratedkeys() { 893 private void Test_PSgeneratedkeys() {
812 sb.setLength(0); // clear the output log buffer 894 sb.setLength(0); // clear the output log buffer
813 895