Changeset: 4e2685f0b7fd for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=4e2685f0b7fd
Added Files:
        tests/Bug_PrepStmt_With_Errors_Jira292.java
Modified Files:
        tests/build.xml
Branch: default
Log Message:

Add JDBC test program to reproduce the hang problem of a failed prepare due to 
mal error.
It hangs in the Apr2019 release but not anymore in tip of Apr2019 or Nov2019 
branch.


diffs (120 lines):

diff --git a/tests/Bug_PrepStmt_With_Errors_Jira292.java 
b/tests/Bug_PrepStmt_With_Errors_Jira292.java
new file mode 100644
--- /dev/null
+++ b/tests/Bug_PrepStmt_With_Errors_Jira292.java
@@ -0,0 +1,101 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
+ */
+
+import java.sql.*;
+
+public class Bug_PrepStmt_With_Errors_Jira292 {
+       public static void main(String[] args) throws Exception {
+               // Class.forName("nl.cwi.monetdb.jdbc.MonetDriver");    // not 
needed anymore for self registering JDBC drivers
+               Connection con = null;
+               Statement stmt = null;
+               PreparedStatement pstmt = null;
+               ParameterMetaData pmd = null;
+               ResultSet rs = null;
+               ResultSetMetaData rsmd = null;
+
+               try {
+                       con = DriverManager.getConnection(args[0]);
+                       System.out.println("0. true\t" + con.getAutoCommit());
+                       con.setNetworkTimeout(null, (10 *1000));
+
+                       stmt = con.createStatement();
+                       stmt.executeUpdate("drop table if exists abacus;");
+                       stmt.executeUpdate("create table abacus ( 
\"'Zeitachse'\" date,\"'Abo_ID'\" int,\"'description'\" 
varchar(256),\"'Klassierungs-Typ'\" clob,\"'KlassierungApplikation'\" 
clob,\"'EP Netto'\" decimal,\"'Nettoumsatz'\" decimal,\"'validfrom'\" 
date,\"'validuntil'\" date,\"'Abo_aufgeschaltet'\" int,\"'Abo_deaktiviert'\" 
int,\"'Differenz'\" decimal,\"'User_ID'\" int,\"'UserName'\" 
varchar(256),\"'client'\" varchar(256),\"'Installations_ID'\" 
int,\"'InstallationsName'\" varchar(256),\"'Installationsprovider_ID'\" 
int,\"'InstallationsproviderName'\" varchar(256),\"'INR'\" bigint,\"'NAME'\" 
varchar(256),\"'PLZ'\" varchar(256),\"'ORT'\" varchar(256),\"'STAAT'\" 
varchar(256),\"'Reseller_ID'\" int,\"'ResellerName'\" varchar(256),\"'ET_ABO'\" 
clob,\"'UserName_1'\" varchar(256),\"'Anzahl_Abos'\" decimal,\"'Anzahl_User'\" 
decimal,\"'Jahr'\" decimal,\"'Monat'\" decimal,\"'Jahr_Monat'\" clob,\"'IFJ'\" 
clob,\"'RECNUM$'\" int,\"'InlineCalc_Year_Zeitachse'\" int);");
+                       stmt.executeUpdate("insert into abacus values 
('2019-10-30',2239,'description','Klassierungs-Typ','Klassierung-Applikation',73.28,68.29,'2018-01-01','2018-12-01',563,63,56.3,852,'UserName','client',134,'InstallationsName',892,'InstallationsproviderName',9348,'NAME','PLZ','ORT','STAAT',934,'ResellerName','ET_ABO','UserName_1',849.2739,1742.718,395.824,39.824,'Jahr_Monat','IFJ',395824,3789);");
+
+                       System.out.println("1. table created and inserted 1 
row");
+
+                       String qry = "SELECT \"'ResellerName'\" FROM abacus 
WHERE  ( ( (\"'InstallationsproviderName'\"='Bienz Pius Treuhand- und Revisions 
AG')) AND  ( (\"'validuntil'\"='2018-01-01' AND \"'description'\"='ABEA 2' AND 
(EXTRACT(YEAR FROM \"'Zeitachse'\")*100 + EXTRACT(MONTH FROM 
\"'Zeitachse'\"))/100.0='2019.010' AND \"'UserName'\"='AL - Astrid Lincke 
(Delphys)' AND \"'validfrom'\"='2016-12-01')) AND  ( (\"'IFJ'\"='ohne IFJ')) 
AND  ( (\"'InlineCalc_Year_Zeitachse'\"='2019'))) GROUP BY \"'ResellerName'\" 
LIMIT 1001 OFFSET 0;";
+                       try {
+                               System.out.println("2. before select query 
execution");
+                               rs = stmt.executeQuery(qry);
+                               System.out.println("2a. select query executed");
+                               if (rs != null) {
+                                       if (rs.next()) {
+                                               System.out.println("2b. select 
query returned: " + rs.getString(1));
+                                       }
+                                       rs.close();
+                                       rs = null;
+                                       System.out.println("2c. closed select 
query resultset");
+                               }
+                               System.out.println("2d. normal end of select 
query");
+                       } catch (SQLException se) {
+                               System.out.println("select query Exception: "+ 
se.getMessage());
+                               while ((se = se.getNextException()) != null)
+                                       System.out.println("next Exception: "+ 
se.getMessage());
+                       }
+
+                       try {
+                               System.out.println("3. before creating a 
prepared select query");
+                               pstmt = con.prepareStatement(qry);
+                               System.out.println("3a. prepared select query");
+
+                               pmd = pstmt.getParameterMetaData();
+                               System.out.println("3b. Prepared Query has " + 
pmd.getParameterCount() + " parameters."); // "Type of first is: " + 
pmd.getParameterTypeName(1));
+                               rsmd = pstmt.getMetaData();
+                               System.out.println("3c. Prepared Query has " + 
rsmd.getColumnCount() + " columns. Type of first is: " + 
rsmd.getColumnTypeName(1));
+
+                               System.out.println("3d. before executing the 
prepared select query");
+                               rs = pstmt.executeQuery();
+                               System.out.println("3e. prepared select query 
executed");
+                               if (rs != null) {
+                                       rsmd = rs.getMetaData();
+                                       System.out.println("3f. prepared Query 
ResultSet has " + rsmd.getColumnCount() + " columns. Type of first is: " + 
rsmd.getColumnTypeName(1));
+
+                                       if (rs.next()) {
+                                               System.out.println("3g. 
prepared select query returned: " + rs.getString(1));
+                                       }
+                                       rs.close();
+                                       rs = null;
+                                       System.out.println("3h. closed prepared 
select query resultset");
+                               }
+                               System.out.println("3i. normal end of prepared 
select query");
+                       } catch (SQLException se) {
+                               System.out.println("prepared select query 
Exception: "+ se.getMessage());
+                               while ((se = se.getNextException()) != null)
+                                       System.out.println("next Exception: "+ 
se.getMessage());
+                       }
+
+                       System.out.println("4. drop table");
+                       stmt.executeUpdate("drop table abacus");
+
+                       System.out.println("5. normal end of test");
+               } catch (SQLException e) {
+                       System.out.println("FAILED :( "+ e.getMessage());
+                       while ((e = e.getNextException()) != null)
+                               System.out.println("FAILED :( " + 
e.getMessage());
+                       System.out.println("ABORTING TEST!!!");
+               } finally {
+                       if (rs != null)    try { rs.close();    } catch 
(SQLException e) { /* ignore */ }
+                       if (pstmt != null) try { pstmt.close(); } catch 
(SQLException e) { /* ignore */ }
+                       if (stmt != null)  try { stmt.close();  } catch 
(SQLException e) { /* ignore */ }
+                       if (con != null)   try { con.close();   } catch 
(SQLException e) { /* ignore */ }
+               }
+       }
+}
+
diff --git a/tests/build.xml b/tests/build.xml
--- a/tests/build.xml
+++ b/tests/build.xml
@@ -436,4 +436,10 @@ Copyright 1997 - July 2008 CWI, August 2
     </antcall>
   </target>
 
+  <target name="Bug_PrepStmt_With_Errors_Jira292">
+    <antcall target="test_class">
+      <param name="test.class" value="Bug_PrepStmt_With_Errors_Jira292" />
+    </antcall>
+  </target>
+
 </project>
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to