Mercurial > hg > monetdb-java
changeset 633:0d026d0bf7f1
Added test to execute PLAN, EXPLAIN, TRACE and DEBUG queries via JDBC API.
Note that the JDBC API does not support DEBUG interaction with the server, hence it nicely throws an SQLException.
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Thu, 27 Jan 2022 13:44:52 +0100 (2022-01-27) |
parents | e2fd07352866 |
children | 3136c91b88e6 |
files | tests/JDBC_API_Tester.java |
diffstat | 1 files changed, 93 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -62,6 +62,7 @@ final public class JDBC_API_Tester { jt.Test_Dobjects(); jt.Test_FetchSize(); jt.Test_Int128(); + jt.Test_PlanExplainTraceDebugCmds(); jt.Test_PSgeneratedkeys(); jt.Test_PSgetObject(); jt.Test_PSlargebatchval(); @@ -912,6 +913,98 @@ final public class JDBC_API_Tester { "SUCCESS\n"); } + private void Test_PlanExplainTraceDebugCmds() { + sb.setLength(0); // clear the output log buffer + + Statement stmt = null; + ResultSet rs = null; + try { + stmt = con.createStatement(); + String qry = "SELECT 1;"; + rs = stmt.executeQuery(qry); + while (rs.next()) { + sb.append(rs.getString(1)).append("\n"); + } + rs.close(); + rs = null; + compareExpectedOutput("Test_PlanExplainTraceDebugCmds: " + qry, "1\n"); + sb.setLength(0); // clear the output log buffer + + qry = "plan SELECT 2;"; + rs = stmt.executeQuery(qry); + compareResultSet(rs, qry, + "Resultset with 1 columns\n" + + "rel\n" + + "project (\n" + + "| [ boolean(1) \"true\" ]\n" + + ") [ tinyint(2) \"2\" ]\n"); + rs.close(); + rs = null; + sb.setLength(0); // clear the output log buffer + + qry = "explain SELECT 3;"; + rs = stmt.executeQuery(qry); + while (rs.next()) { + String val = rs.getString(1); + if (!val.startsWith("#")) + sb.append(val).append("\n"); + } + rs.close(); + rs = null; + compareExpectedOutput("Test_PlanExplainTraceDebugCmds: " + qry, + "function user.main():void;\n" + + " X_1:void := querylog.define(\"explain select 3;\":str, \"default_pipe\":str, 6:int);\n" + + " X_10:int := sql.resultSet(\".%2\":str, \"%2\":str, \"tinyint\":str, 2:int, 0:int, 7:int, 3:bte);\n" + + "end user.main;\n"); + sb.setLength(0); // clear the output log buffer + + qry = "trace SELECT 4;"; + rs = stmt.executeQuery(qry); + while (rs.next()) { + sb.append(rs.getString(1)).append("\n"); + } + if (stmt.getMoreResults()) { + sb.append("Another resultset\n"); + rs = stmt.getResultSet(); + while (rs.next()) { + sb.append(rs.getString(2)).append("\n"); + } + } + rs.close(); + rs = null; + compareExpectedOutput("Test_PlanExplainTraceDebugCmds: " + qry, + "4\n" + + "Another resultset\n" + + " X_1=0@0:void := querylog.define(\"trace select 4;\":str, \"default_pipe\":str, 6:int);\n" + + " X_10=0:int := sql.resultSet(\".%2\":str, \"%2\":str, \"tinyint\":str, 3:int, 0:int, 7:int, 4:bte);\n"); + sb.setLength(0); // clear the output log buffer + + qry = "debug SELECT 5;"; + sb.append(qry).append("\n"); + rs = stmt.executeQuery(qry); + while (rs.next()) { + sb.append(rs.getString(1)).append("\n"); + } + rs.close(); + rs = null; + compareExpectedOutput("Test_PlanExplainTraceDebugCmds", qry + "\n" + "5\n"); + sb.setLength(0); // clear the output log buffer + } catch (SQLException e) { + sb.append("FAILED: "); + while (e != null) { + sb.append(e.getMessage()).append("\n"); + e = e.getNextException(); + } + } + + closeStmtResSet(stmt, rs); + + compareExpectedOutput("Test_PlanExplainTraceDebugCmds", + "debug SELECT 5;\n" + + "FAILED: SQL debugging only supported in interactive mode in: \"debug\"\n" + + "Current transaction is aborted (please ROLLBACK)\n"); + } + private void Test_PSgeneratedkeys() { sb.setLength(0); // clear the output log buffer