Changeset: b9f82064fe0c for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=b9f82064fe0c
Modified Files:
        ChangeLog
        src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
        tests/JDBC_API_Tester.java
Branch: default
Log Message:

Implemented PreparedStatement.toString() as requested by 
https://github.com/MonetDB/monetdb-java/issues/8


diffs (130 lines):

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,10 @@
 # This file is updated with Maddlog
 
 * Wed Mar  3 2021 Martin van Dinther <martin.van.dint...@monetdbsolutions.com>
+- Implemented PreparedStatement.toString() as requested by
+  https://github.com/MonetDB/monetdb-java/issues/8
+
+* Wed Mar  3 2021 Martin van Dinther <martin.van.dint...@monetdbsolutions.com>
 - Implemented fix for released monetdb-jdbc-3.0.jre8.jar and
   monetdb-mcl-1.19.jre8.jar when it is was run using java build
   1.8.0_###.  It would throw:  java.lang.NoSuchMethodError:
diff --git a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java 
b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
--- a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
+++ b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
@@ -62,12 +62,13 @@ import java.util.Map;
  *
  * @author Fabian Groffen
  * @author Martin van Dinther
- * @version 0.6
+ * @version 0.7
  */
 public class MonetPreparedStatement
        extends MonetStatement
        implements PreparedStatement, AutoCloseable
 {
+       private final String sqlStatement;
        private final String[] monetdbType;
        private final int[] javaType;
        private final int[] digits;
@@ -124,6 +125,7 @@ public class MonetPreparedStatement
                if (!super.execute("PREPARE " + prepareQuery))
                        throw new SQLException("Unexpected server response", 
"M0M10");
 
+               sqlStatement = prepareQuery;
                // cheat a bit to get the ID and the number of columns
                id = ((MonetConnection.ResultSetResponse)header).id;
                size = 
(int)((MonetConnection.ResultSetResponse)header).tuplecount;
@@ -2716,6 +2718,23 @@ public class MonetPreparedStatement
                close();
        }
 
+       /**
+        * @return the prepared SQL statement including parameter types and 
parameter values that were already set.
+        */
+       public String toString​() {
+               final StringBuilder sb = new StringBuilder(256);
+               sb.append("Prepared SQL: ").append(sqlStatement).append("\n");
+               int param = 1;
+               for (int i = 0; i < size; i++) {
+                       /* when column[i] == null it is a parameter, when 
column[i] != null it is a result column of the prepared query */
+                       if (column[i] == null) {
+                               sb.append(" parameter 
").append(param++).append(" ").append(monetdbType[i]);
+                               sb.append(", set value: ").append((values[i] != 
null) ? values[i] : "<null>").append("\n");
+                       }
+               }
+               return sb.toString();
+       }
+
        //== Java 1.8 methods (JDBC 4.2)
 
        @Override
@@ -2799,6 +2818,7 @@ public class MonetPreparedStatement
                return buf.toString();
        }
 
+
        /**
         * Small helper method that formats the "Invalid Parameter Index number 
..." message
         * and creates a new SQLDataException object whose SQLState is set
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
@@ -1003,6 +1003,7 @@ final public class JDBC_API_Tester {
 
                        pstmt.executeBatch();
                        sb.append(" passed\n");
+                       sb.append(pstmt.toString());    // test showing 
prepared statement
 
                        sb.append("2b. closing PreparedStatement...");
                        pstmt.close();
@@ -1058,6 +1059,11 @@ final public class JDBC_API_Tester {
                        "0. false       false\n" +
                        "1. creating test table...success\n" +
                        "2a. inserting 3 records as batch... passed\n" +
+                       "Prepared SQL: INSERT INTO table_Test_PSgetObject 
(ti,si,i,bi) VALUES (?,?,?,?)\n" +
+                       " parameter 1 tinyint, set value: -127\n" +
+                       " parameter 2 smallint, set value: -12700\n" +
+                       " parameter 3 int, set value: -1270000\n" +
+                       " parameter 4 bigint, set value: -127000000\n" +
                        "2b. closing PreparedStatement... passed\n" +
                        "3a. selecting records... passed\n" +
                        "  Retrieved row data: ti=-127 si=-12700 i=-1270000 
bi=-127000000\n" +
@@ -1297,6 +1303,7 @@ final public class JDBC_API_Tester {
                PreparedStatement pstmt = null;
                try {
                        pstmt = con.prepareStatement("SELECT CASE WHEN myint IS 
NULL THEN 0 ELSE 1 END AS intnull, * FROM table_Test_PSmetadata WHERE myint = 
?");
+                       sb.append(pstmt.toString());    // test showing 
prepared statement
 
                        // testing and showing result set meta data
                        ResultSetMetaData rsmd = pstmt.getMetaData();
@@ -1338,6 +1345,8 @@ final public class JDBC_API_Tester {
 
                compareExpectedOutput("Test_PSmetadata",
                        "0. false\tfalse\n" +
+                       "Prepared SQL: SELECT CASE WHEN myint IS NULL THEN 0 
ELSE 1 END AS intnull, * FROM table_Test_PSmetadata WHERE myint = ?\n" +
+                       " parameter 1 int, set value: <null>\n" +
                        "rsmd. 6 columns:\n" +
                        "RCol 1\n" +
                        "  classname     java.lang.Short\n" +
@@ -1554,6 +1563,7 @@ final public class JDBC_API_Tester {
                        pstmt.setObject(2, turl);
                        // insert first record
                        pstmt.execute();
+                       sb.append(pstmt.toString());    // test showing 
prepared statement
 
                        try {
                                tinet.setNetmaskBits(16);
@@ -1605,6 +1615,9 @@ final public class JDBC_API_Tester {
                        "  type      12\n" +
                        "  typename  url\n" +
                        "  classname org.monetdb.jdbc.types.URL\n" +
+                       "Prepared SQL: INSERT INTO table_Test_PSsqldata VALUES 
(?, ?)\n" +
+                       " parameter 1 inet, set value: inet '172.5.5.5/24'\n" +
+                       " parameter 2 url, set value: url 
'http://www.monetdb.org/'\n" +
                        "1.     172.5.5.5/24\n" +
                        "  172.5.5.5/24\n" +
                        "  /172.5.5.5\n" +
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to