Mercurial > hg > monetdb-java
changeset 488:59309e3e6daa
Speed up Test_Sbatching() by including: SET sys.optimizer = 'minimal_pipe'
Also some other small improvements added.
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Wed, 04 Aug 2021 21:52:51 +0200 (2021-08-04) |
parents | 35592dc59ecb |
children | 9fcf77d703b1 |
files | tests/JDBC_API_Tester.java |
diffstat | 1 files changed, 32 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -1232,9 +1232,11 @@ final public class JDBC_API_Tester { sb.append("should have seen a ResultSet!"); ResultSet rs = pstmt.getResultSet(); - if (!rs.next()) - sb.append("ResultSet is empty"); - sb.append(" result: ").append(rs.getString(1)); + if (rs != null) { + if (!rs.next()) + sb.append("ResultSet is empty"); + sb.append(" result: ").append(rs.getString(1)); + } // close the connection and associated resources pstmt.getConnection().close(); @@ -1511,7 +1513,7 @@ final public class JDBC_API_Tester { pstmt = con.prepareStatement("select " + i + ", " + i + " = ?"); pstmt.setInt(1, i); rs = pstmt.executeQuery(); - if (rs.next() && i % 20 == 0) { + if (rs != null && rs.next() && i % 20 == 0) { sb.append(rs.getInt(1)).append(", ").append(rs.getBoolean(2)).append("\n"); } /* next call should cause resources on the server to be freed */ @@ -1550,7 +1552,7 @@ final public class JDBC_API_Tester { pstmt = con.prepareStatement("select " + i + ", " + i + " = ?"); pstmt.setInt(1, i); rs = pstmt.executeQuery(); - if (rs.next() && i % 1000 == 0) { + if (rs != null && rs.next() && i % 1000 == 0) { sb.append(rs.getInt(1)).append(", ").append(rs.getBoolean(2)).append("\n"); } /* next call should cause resources on the server to be freed */ @@ -1752,10 +1754,11 @@ final public class JDBC_API_Tester { } 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())); + final java.util.Date d = new java.util.Date(); + final long tm = d.getTime(); + pstmt.setTime(1, new java.sql.Time(tm)); + pstmt.setTimestamp(2, new java.sql.Timestamp(tm)); + pstmt.setDate(3, new java.sql.Date(tm)); pstmt.executeUpdate(); sb.append(" passed\n"); @@ -1769,20 +1772,20 @@ final public class JDBC_API_Tester { rs = pstmt.executeQuery(); sb.append(" passed\n"); - while (rs.next()) { + while (rs != null && rs.next()) { for (int j = 1; j <= 3; j++) { sb.append((j+4)).append(". retrieving..."); - java.util.Date x = (java.util.Date)(rs.getObject(j)); + Object x = rs.getObject(j); boolean matches = false; - if (x instanceof Time) { + if (x instanceof java.sql.Time) { sb.append(" (Time)"); - matches = (new Time(d.getTime())).toString().equals(x.toString()); - } else if (x instanceof Date) { + matches = (new java.sql.Time(tm)).toString().equals(x.toString()); + } else if (x instanceof java.sql.Date) { sb.append(" (Date)"); - matches = (new Date(d.getTime())).toString().equals(x.toString()); - } else if (x instanceof Timestamp) { + matches = (new java.sql.Date(tm)).toString().equals(x.toString()); + } else if (x instanceof java.sql.Timestamp) { sb.append(" (Timestamp)"); - matches = (new Timestamp(d.getTime())).toString().equals(x.toString()); + matches = (new java.sql.Timestamp(tm)).toString().equals(x.toString()); } if (matches) { sb.append(" passed\n"); @@ -2027,7 +2030,7 @@ final public class JDBC_API_Tester { " freq double ," + " bw double ," + " type decimal(1,0)," + - " imageurl varchar(100)," + + " imageurl url(100)," + " comment varchar(100)," + " CONSTRAINT htmtest_htmid_pkey PRIMARY KEY (htmid)" + ")" ); @@ -2156,6 +2159,8 @@ final public class JDBC_API_Tester { sb.append("Called Prepared procedure (with NULLs): ").append(proc_nm).append("\n"); showTblContents(tbl_nm); + cstmt.clearParameters(); + sb.append("Test completed. Cleanup procedure and table.\n"); stmt.execute("DROP PROCEDURE IF EXISTS " + proc_nm + ";"); stmt.execute("DROP TABLE IF EXISTS " + tbl_nm + ";"); @@ -2964,6 +2969,9 @@ final public class JDBC_API_Tester { else sb.append("passed\n"); + // for large batches of DML always set sys.optimizer = 'minimal_pipe'. It makes a big difference in performance. + stmt.execute("SET sys.optimizer = 'minimal_pipe'"); + // start batching a large amount of inserts for (int i = 1; i <= 3432; i++) { stmt.addBatch("INSERT INTO Test_Sbatching VALUES (" + i + ")"); @@ -3808,9 +3816,10 @@ final public class JDBC_API_Tester { if (rs2 != null) { sb.append("List TableTypes:\n"); while (rs2.next()) { + String tt = rs2.getString(1); // post Oct2020 releases the STREAM TABLE type is removed, so filter it out for a stable output - if (!"STREAM TABLE".equals(rs2.getString(1))) - sb.append(rs2.getString(1)).append("\n"); + if (!"STREAM TABLE".equals(tt)) + sb.append(tt).append("\n"); } rs2.close(); } @@ -4055,9 +4064,9 @@ final public class JDBC_API_Tester { sb.append("getQueryTimeout must give 0: ").append(st.getQueryTimeout()).append("\n"); st.close(); - st.setQueryTimeout(5); + st.setQueryTimeout(7); con.isValid(3); - sb.append("getQueryTimeout must give 5: ").append(st.getQueryTimeout()).append("\n"); + sb.append("getQueryTimeout must give 7: ").append(st.getQueryTimeout()).append("\n"); st.close(); } catch (SQLException se) { sb.append(se.getMessage()).append("\n"); @@ -4070,7 +4079,7 @@ final public class JDBC_API_Tester { "getQueryTimeout must give 5: 5\n" + "getQueryTimeout must give 0: 0\n" + "getQueryTimeout must give 0: 0\n" + - "getQueryTimeout must give 5: 5\n"); + "getQueryTimeout must give 7: 7\n"); } private void Bug_LargeQueries_6571_6693(String arg0) {