Changeset: 1850e0dfb5f7 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=1850e0dfb5f7
Modified Files:
        tests/JDBC_API_Tester.java
Branch: default
Log Message:

Implemented some more tests


diffs (truncated from 779 to 300 lines):

diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -7,9 +7,15 @@
  */
 
 import java.sql.*;
-import java.util.*;
+
 import java.io.StringReader;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TimeZone;
 
 import org.monetdb.jdbc.types.INET;
 import org.monetdb.jdbc.types.URL;
@@ -453,7 +459,7 @@ final public class JDBC_API_Tester {
                        int items = 0;
                        sb.append("4. table " + items + " items");
                        while (rs.next()) {
-                               System.out.print(", " + rs.getString("id"));
+                               sb.append(", ").append(rs.getString("id"));
                                i++;
                        }
                        if (i != items) {
@@ -1216,37 +1222,7 @@ final public class JDBC_API_Tester {
                                sb.append("  writable      
").append(rsmd.isWritable(col)).append("\n");
                        }
 
-                       // testing and showing parameter meta data
-                       ParameterMetaData pmd = pstmt.getParameterMetaData();
-                       sb.append("pmd. 
").append(pmd.getParameterCount()).append(" parameters:\n");
-                       for (int parm = 1; parm <= pmd.getParameterCount(); 
parm++) {
-                               sb.append("Param ").append(parm).append("\n");
-                               int nullable = pmd.isNullable(parm);
-                               sb.append("  nullable  
").append(nullable).append(" (");
-                               switch (nullable) {
-                                       case 
ParameterMetaData.parameterNoNulls:        sb.append("NO"); break;
-                                       case 
ParameterMetaData.parameterNullable:       sb.append("YA"); break;
-                                       case 
ParameterMetaData.parameterNullableUnknown:        sb.append("UNKNOWN"); break;
-                                       // default:     sb.append("INVALID " + 
nullable); break;
-                               }
-                               sb.append(")\n");
-                               sb.append("  signed    
").append(pmd.isSigned(parm)).append("\n");
-                               sb.append("  precision 
").append(pmd.getPrecision(parm)).append("\n");
-                               sb.append("  scale     
").append(pmd.getScale(parm)).append("\n");
-                               sb.append("  type      
").append(pmd.getParameterType(parm)).append("\n");
-                               sb.append("  typename  
").append(pmd.getParameterTypeName(parm)).append("\n");
-                               sb.append("  classname 
").append(pmd.getParameterClassName(parm)).append("\n");
-                               int mode = pmd.getParameterMode(parm);
-                               sb.append("  mode      ").append(mode).append(" 
(");
-                               switch (mode) {
-                                       case ParameterMetaData.parameterModeIn: 
sb.append("IN"); break;
-                                       case 
ParameterMetaData.parameterModeInOut:      sb.append("INOUT"); break;
-                                       case 
ParameterMetaData.parameterModeOut:        sb.append("OUT"); break;
-                                       case 
ParameterMetaData.parameterModeUnknown:    sb.append("UNKNOWN"); break;
-                                       // default:     sb.append("INVALID " + 
mode); break;
-                               }
-                               sb.append(")\n");
-                       }
+                       showParams(pstmt);
 
                        con.rollback();
                        con.setAutoCommit(true);
@@ -1543,75 +1519,615 @@ final public class JDBC_API_Tester {
                sb.setLength(0);        // clear the output log buffer
 
                Statement stmt = null;
+               PreparedStatement pstmt = null;
+               ResultSet rs = null;
                try {
+                       con.setAutoCommit(false);
+                       // >> false: auto commit should be off now
+                       sb.append("0. false\t" + 
con.getAutoCommit()).append("\n");
+
                        stmt = con.createStatement();
+                       int updates = stmt.executeUpdate("CREATE TABLE 
Test_PStimedate (t time, ts timestamp, d date)");
+                       if (updates != -2)
+                               sb.append("1. Expected -2 got 
").append(updates).append(" instead\n");
+
+                       pstmt = con.prepareStatement("INSERT INTO 
Test_PStimedate VALUES (?, ?, ?)");
+                       sb.append("1. empty call...");
+                       try {
+                               // should fail (as no parameters set)
+                               pstmt.execute();
+                               sb.append(" UNexpected PASS!\n");
+                       } catch (SQLException e) {
+                               sb.append(" expected exception\n");
+                       }
+
+                       sb.append("2. inserting a record...");
+                       java.util.Date d = new java.util.Date();
+                       pstmt.setTime(1, new java.sql.Time(d.getTime()));
+                       pstmt.setTimestamp(2, new 
java.sql.Timestamp(d.getTime()));
+                       pstmt.setDate(3, new java.sql.Date(d.getTime()));
+
+                       pstmt.executeUpdate();
+                       sb.append(" passed\n");
+
+                       sb.append("3. closing PreparedStatement...");
+                       pstmt.close();
+                       sb.append(" passed\n");
+
+                       sb.append("4. selecting record...");
+                       pstmt = con.prepareStatement("SELECT * FROM 
Test_PStimedate");
+                       rs = pstmt.executeQuery();
+                       sb.append(" passed\n");
+
+                       while (rs.next()) {
+                               for (int j = 1; j <= 3; j++) {
+                                       sb.append((j + 4) + ". retrieving...");
+                                       java.util.Date x = 
(java.util.Date)(rs.getObject(j));
+                                       boolean matches = false;
+                                       if (x instanceof Time) {
+                                               sb.append(" (Time)");
+                                               matches = (new 
Time(d.getTime())).toString().equals(x.toString());
+                                       } else if (x instanceof Date) {
+                                               sb.append(" (Date)");
+                                               matches = (new 
Date(d.getTime())).toString().equals(x.toString());
+                                       } else if (x instanceof Timestamp) {
+                                               sb.append(" (Timestamp)");
+                                               matches = (new 
Timestamp(d.getTime())).toString().equals(x.toString());
+                                       }
+                                       if (matches) {
+                                               sb.append(" passed\n");
+                                       } else {
+                                               sb.append(" FAILED (" + x + " 
is not " + d + ")\n");
+                                       }
+                               }
+                       }
+
+                       con.rollback();
+                       con.setAutoCommit(true);
+                       // >> true: auto commit was just switched on
+                       sb.append("0. true\t" + 
con.getAutoCommit()).append("\n");
                } catch (SQLException e) {
                        sb.append("FAILED: 
").append(e.getMessage()).append("\n");
                }
 
                closeStmtResSet(stmt, null);
+               closeStmtResSet(pstmt, rs);
 
-               compareExpectedOutput("Test_PStimedate", "");
+               compareExpectedOutput("Test_PStimedate",
+                       "0. false       false\n" +
+                       "1. empty call... expected exception\n" +
+                       "2. inserting a record... passed\n" +
+                       "3. closing PreparedStatement... passed\n" +
+                       "4. selecting record... passed\n" +
+                       "5. retrieving... (Time) passed\n" +
+                       "6. retrieving... (Timestamp) passed\n" +
+                       "7. retrieving... (Date) passed\n" +
+                       "0. true        true\n");
        }
 
        private void Test_PStimezone() {
                sb.setLength(0);        // clear the output log buffer
 
+               // make sure this test is reproducable regardless timezone
+               // setting, by overriding the VM's default
+               // we have to make sure that one doesn't have daylight
+               // savings corrections
+               TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+
                Statement stmt = null;
+               PreparedStatement pstmt = null;
+               ResultSet rs = null;
                try {
+                       con.setAutoCommit(false);
+                       // >> false: auto commit should be off now
+                       sb.append("0. false\t" + 
con.getAutoCommit()).append("\n");
+
                        stmt = con.createStatement();
+                       int updates = stmt.executeUpdate("CREATE TABLE 
Test_PStimezone (ts timestamp, tsz timestamp with time zone, t time, tz time 
with time zone)");
+                       if (updates != -2)
+                               sb.append("1. Expected -2 got 
").append(updates).append(" instead\n");
+
+                       pstmt = con.prepareStatement("INSERT INTO 
Test_PStimezone VALUES (?, ?, ?, ?)");
+                       sb.append("1. empty call...");
+                       try {
+                               // should fail (as no parameters set)
+                               pstmt.execute();
+                               sb.append(" UNexpected PASS!\n");
+                       } catch (SQLException e) {
+                               sb.append(" expected exception\n");
+                       }
+
+                       sb.append("2. inserting records...\n");
+                       java.sql.Timestamp ts = new java.sql.Timestamp(0L);
+                       java.sql.Time t = new java.sql.Time(0L);
+                       Calendar c = Calendar.getInstance();
+                       SimpleDateFormat tsz = new SimpleDateFormat("yyyy-MM-dd 
HH:mm:ss.SSSZ");
+                       SimpleDateFormat tz = new 
SimpleDateFormat("HH:mm:ss.SSSZ");
+
+                       tsz.setTimeZone(c.getTimeZone());
+                       tz.setTimeZone(tsz.getTimeZone());
+                       sb.append("inserting 
(").append(c.getTimeZone().getID()).append(") 
").append(tsz.format(ts)).append(", ").append(tz.format(t)).append("\n");
+
+                       pstmt.setTimestamp(1, ts);
+                       pstmt.setTimestamp(2, ts);
+                       pstmt.setTime(3, t);
+                       pstmt.setTime(4, t);
+                       pstmt.executeUpdate();
+
+                       c.setTimeZone(TimeZone.getTimeZone("UTC"));
+                       sb.append("inserting with calendar timezone 
").append(c.getTimeZone().getID()).append("\n");
+                       pstmt.setTimestamp(1, ts, c);
+                       pstmt.setTimestamp(2, ts, c);
+                       pstmt.setTime(3, t, c);
+                       pstmt.setTime(4, t, c);
+                       pstmt.executeUpdate();
+
+                       
c.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
+                       sb.append("inserting with calendar timezone " + 
c.getTimeZone().getID()).append("\n");
+                       pstmt.setTimestamp(1, ts, c);
+                       pstmt.setTimestamp(2, ts);
+                       pstmt.setTime(3, t, c);
+                       pstmt.setTime(4, t);
+                       pstmt.executeUpdate();
+
+                       c.setTimeZone(TimeZone.getTimeZone("GMT+04:15"));
+                       sb.append("inserting with calendar timezone " + 
c.getTimeZone().getID()).append("\n");
+                       pstmt.setTimestamp(1, ts);
+                       pstmt.setTimestamp(2, ts, c);
+                       pstmt.setTime(3, t);
+                       pstmt.setTime(4, t, c);
+                       pstmt.executeUpdate();
+                       sb.append(" done\n");
+
+                       sb.append("3. closing PreparedStatement...");
+                       pstmt.close();
+                       sb.append(" passed\n");
+
+                       sb.append("4. selecting records...");
+                       pstmt = con.prepareStatement("SELECT * FROM 
Test_PStimezone");
+                       rs = pstmt.executeQuery();
+                       sb.append(" passed\n");
+
+                       // The tz fields should basically always be the same
+                       // (exactly 1st Jan 1970) since whatever timezone is 
used,
+                       // the server retains it, and Java restores it.
+                       // The zoneless fields will show differences since the 
time
+                       // is inserted translated to the given timezones, and
+                       // retrieved as in they were given in those timezones.
+                       //  When the insert zone matches the retrieve zone, 
Java should
+                       // eventually see 1st Jan 1970.
+                       while (rs.next()) {
+                               sb.append("retrieved row (String):\n").append(
+                                               rs.getString("ts")).append(" | 
").append(
+                                               rs.getString("tsz")).append(" | 
").append(
+                                               rs.getString("t")).append(" | 
").append(
+                                               
rs.getString("tz")).append("\n");
+
+                               tsz.setTimeZone(TimeZone.getDefault());
+                               tz.setTimeZone(tsz.getTimeZone());
+                               sb.append("default 
(").append(tsz.getTimeZone().getID()).append("):\n").append(
+                                               
tsz.format(rs.getTimestamp("ts"))).append(" | ").append(
+                                               
tsz.format(rs.getTimestamp("tsz"))).append(" | ").append(
+                                               
tz.format(rs.getTime("t"))).append(" | ").append(
+                                               
tz.format(rs.getTime("tz"))).append("\n");
+
+                               
c.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
+                               
sb.append(c.getTimeZone().getID()).append(":\n").append(
+                                               rs.getTimestamp("ts", 
c)).append(" | ").append(
+                                               rs.getTimestamp("tsz", 
c)).append(" | ").append(
+                                               rs.getTime("t", c)).append(" | 
").append(
+                                               rs.getTime("tz", 
c)).append("\n");
+
+                               
c.setTimeZone(TimeZone.getTimeZone("Africa/Windhoek"));
+                               
sb.append(c.getTimeZone().getID()).append(":\n").append(
+                                               rs.getTimestamp("ts", 
c)).append(" | ").append(
+                                               rs.getTimestamp("tsz", 
c)).append(" | ").append(
+                                               rs.getTime("t", c)).append(" | 
").append(
+                                               rs.getTime("tz", 
c)).append("\n");
+
+                               SQLWarning w = rs.getWarnings();
+                               while (w != null) {
+                                       sb.append(w.getMessage()).append("\n");
+                                       w = w.getNextWarning();
+                               }
+                       }
+
+                       con.rollback();
+                       con.setAutoCommit(true);
+                       // >> true: auto commit was just switched on
+                       sb.append("0. true\t" + 
con.getAutoCommit()).append("\n");
                } catch (SQLException e) {
                        sb.append("FAILED: 
").append(e.getMessage()).append("\n");
                }
 
                closeStmtResSet(stmt, null);
+               closeStmtResSet(pstmt, rs);
 
-               compareExpectedOutput("Test_PStimezone", "");
+               compareExpectedOutput("Test_PStimezone",
+                       "0. false       false\n" +
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to