Changeset: a0f8751f8a8b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a0f8751f8a8b Added Files: java/tests/Test_CisValid.java sql/jdbc/tests/Tests/Test_CisValid.SQL.bat sql/jdbc/tests/Tests/Test_CisValid.SQL.sh Modified Files: clients/Tests/MAL-signatures.stable.out java/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java java/tests/build.xml sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/08-explain.stable.out sql/benchmarks/tpch/Tests/11-explain.stable.out sql/benchmarks/tpch/Tests/12-explain.stable.out sql/benchmarks/tpch/Tests/15-explain.stable.out sql/benchmarks/tpch/Tests/18-explain.stable.out sql/benchmarks/tpch/Tests/22-explain.stable.out sql/jdbc/tests/Tests/All sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out Branch: Jun2016 Log Message:
Merge with Jul2015 branch. diffs (truncated from 1171 to 300 lines): diff --git a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java --- a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java +++ b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java @@ -786,14 +786,20 @@ public class MonetConnection extends Mon if (closed) return false; // ping db using select 1; + Statement stmt = null; try { - Statement stmt = createStatement(); + stmt = createStatement(); + // the timeout parameter is ignored here, since + // MonetStatement.setQueryTimeout(timeout) is not supported. stmt.executeQuery("SELECT 1"); stmt.close(); return true; - } catch (SQLException e) { - // close this connection - close(); + } catch (Exception e) { + if (stmt != null) { + try { + stmt.close(); + } catch (Exception e2) {} + } } return false; } diff --git a/java/tests/Test_CisValid.java b/java/tests/Test_CisValid.java new file mode 100644 --- /dev/null +++ b/java/tests/Test_CisValid.java @@ -0,0 +1,33 @@ +/* + * 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 - 2016 MonetDB B.V. + */ + +import java.sql.*; + +public class Test_CisValid { + /* Test that after an error has occurred during a transaction, one can + * still test if the connection is valid or not. + * The function Connection.isValid() should only return TRUE or FALSE. It + * shall never alter the state of this connection */ + public static void main(String[] args) throws Exception { + Class.forName("nl.cwi.monetdb.jdbc.MonetDriver"); + Connection conn = DriverManager.getConnection(args[0]); + Statement stmt = conn.createStatement(); + + conn.setAutoCommit(false); // start a transaction + try { + stmt.execute("SELECT COUNT(*) FROM doesnotexist;"); // let's trigger an error + } catch (SQLException e) { + e.printStackTrace(); + System.out.println("Validating connection: conn.isValid? " + conn.isValid(30)); // Can we rollback on this connection? + conn.rollback(); + } + + stmt.close(); + conn.close(); + } +} diff --git a/java/tests/build.xml b/java/tests/build.xml --- a/java/tests/build.xml +++ b/java/tests/build.xml @@ -98,6 +98,7 @@ Copyright 1997 - July 2008 CWI, August 2 <antcall target="Test_Clargequery" /> <antcall target="Test_Cmanycon" /> <antcall target="Test_Cforkbomb" /> + <antcall target="Test_CisValid" /> <antcall target="Test_Creplysize" /> <antcall target="Test_Csavepoints" /> <antcall target="Test_Ctransaction" /> @@ -174,6 +175,12 @@ Copyright 1997 - July 2008 CWI, August 2 </antcall> </target> + <target name="Test_CisValid"> + <antcall target="test_class"> + <param name="test.class" value="Test_CisValid" /> + </antcall> + </target> + <target name="Test_Ctransaction"> <antcall target="test_class"> <param name="test.class" value="Test_Ctransaction" /> diff --git a/sql/benchmarks/tpch/Tests/05-explain.stable.out b/sql/benchmarks/tpch/Tests/05-explain.stable.out --- a/sql/benchmarks/tpch/Tests/05-explain.stable.out +++ b/sql/benchmarks/tpch/Tests/05-explain.stable.out @@ -55,32 +55,32 @@ Ready. % clob # type % 573 # length function user.s2_1(A0:bte,A1:str,A2:date,A3:date,A4:int):void; - X_180:void := querylog.define("explain select\n n_name,\n sum(l_extendedprice * (1 - l_discount)) as revenue\nfrom\n customer,\n orders,\n lineitem,\n supplier,\n nation,\n region\nwhere\n c_custkey = o_custkey\n and l_orderkey = o_orderkey\n and l_suppkey = s_suppkey\n and c_nationkey = s_nationkey\n and s_nationkey = n_nationkey\n and n_regionkey = r_regionkey\n and r_name = \\'ASIA\\'\n and o_orderdate >= date \\'1994-01-01\\'\n and o_orderdate < date \\'1994-01-01\\' + interval \\'1\\' year\ngroup by\n n_name\norder by\n revenue desc;","sequential_pipe",121); - X_154 := bat.new(nil:oid,nil:str); - X_162 := bat.append(X_154,"sys.nation"); - X_170 := bat.append(X_162,"sys.L1"); - X_157 := bat.new(nil:oid,nil:str); - X_164 := bat.append(X_157,"n_name"); - X_172 := bat.append(X_164,"revenue"); - X_158 := bat.new(nil:oid,nil:str); - X_165 := bat.append(X_158,"char"); - X_174 := bat.append(X_165,"decimal"); - X_159 := bat.new(nil:oid,nil:int); - X_167 := bat.append(X_159,25); - X_176 := bat.append(X_167,19); + X_182:void := querylog.define("explain select\n n_name,\n sum(l_extendedprice * (1 - l_discount)) as revenue\nfrom\n customer,\n orders,\n lineitem,\n supplier,\n nation,\n region\nwhere\n c_custkey = o_custkey\n and l_orderkey = o_orderkey\n and l_suppkey = s_suppkey\n and c_nationkey = s_nationkey\n and s_nationkey = n_nationkey\n and n_regionkey = r_regionkey\n and r_name = \\'ASIA\\'\n and o_orderdate >= date \\'1994-01-01\\'\n and o_orderdate < date \\'1994-01-01\\' + interval \\'1\\' year\ngroup by\n n_name\norder by\n revenue desc;","sequential_pipe",123); + X_156 := bat.new(nil:oid,nil:str); + X_164 := bat.append(X_156,"sys.nation"); + X_172 := bat.append(X_164,"sys.L1"); + X_159 := bat.new(nil:oid,nil:str); + X_166 := bat.append(X_159,"n_name"); + X_174 := bat.append(X_166,"revenue"); + X_160 := bat.new(nil:oid,nil:str); + X_167 := bat.append(X_160,"char"); + X_176 := bat.append(X_167,"decimal"); X_161 := bat.new(nil:oid,nil:int); - X_169 := bat.append(X_161,0); - X_178 := bat.append(X_169,4); + X_169 := bat.append(X_161,25); + X_178 := bat.append(X_169,19); + X_163 := bat.new(nil:oid,nil:int); + X_171 := bat.append(X_163,0); + X_180 := bat.append(X_171,4); X_6 := sql.mvc(); X_10:bat[:date] := sql.bind(X_6,"sys","orders","o_orderdate",0); C_7:bat[:oid] := sql.tid(X_6,"sys","orders"); X_18:date := mtime.addmonths(A3,A4); - C_189 := algebra.subselect(X_10,C_7,A2,X_18,true,false,false); + C_191 := algebra.subselect(X_10,C_7,A2,X_18,true,false,false); (C_13,r1_13) := sql.bind(X_6,"sys","orders","o_orderdate",2); - C_190 := algebra.subselect(r1_13,nil:bat[:oid],A2,X_18,true,false,false); + C_192 := algebra.subselect(r1_13,nil:bat[:oid],A2,X_18,true,false,false); X_16:bat[:date] := sql.bind(X_6,"sys","orders","o_orderdate",1); - C_192 := algebra.subselect(X_16,C_7,A2,X_18,true,false,false); - C_19 := sql.subdelta(C_189,C_7,C_13,C_190,C_192); + C_194 := algebra.subselect(X_16,C_7,A2,X_18,true,false,false); + C_19 := sql.subdelta(C_191,C_7,C_13,C_192,C_194); X_22:bat[:oid] := sql.bind_idxbat(X_6,"sys","orders","orders_o_custkey_fkey",0); (X_24,r1_30) := sql.bind_idxbat(X_6,"sys","orders","orders_o_custkey_fkey",2); X_26:bat[:oid] := sql.bind_idxbat(X_6,"sys","orders","orders_o_custkey_fkey",1); @@ -170,10 +170,12 @@ function user.s2_1(A0:bte,A1:str,A2:date X_143:bat[:str] := algebra.projectionpath(X_116,r1_130,X_142); (X_144,r1_201,r2_201) := group.subgroupdone(X_143); X_147:bat[:lng] := aggr.subsum(X_136,X_144,r1_201,true,true); + X_151 := algebra.projection(r1_201,X_143); (X_148,r1_207,r2_207) := algebra.subsort(X_147,true,false); - X_151:bat[:str] := algebra.projectionpath(r1_207,r1_201,X_143); - X_152 := algebra.projection(r1_207,X_147); - sql.resultSet(X_170,X_172,X_174,X_176,X_178,X_151,X_152); + X_152 := bat.setKey(X_151,true); + X_153 := algebra.projection(r1_207,X_152); + X_154 := algebra.projection(r1_207,X_147); + sql.resultSet(X_172,X_174,X_176,X_178,X_180,X_153,X_154); end user.s2_1; # 15:45:52 > diff --git a/sql/benchmarks/tpch/Tests/08-explain.stable.out b/sql/benchmarks/tpch/Tests/08-explain.stable.out --- a/sql/benchmarks/tpch/Tests/08-explain.stable.out +++ b/sql/benchmarks/tpch/Tests/08-explain.stable.out @@ -59,22 +59,22 @@ Ready. % clob # type % 836 # length function user.s2_1(A0:str,A1:bte,A2:bte,A3:str,A4:date,A5:date,A6:str):void; - X_198:void := querylog.define("explain select\n o_year,\n sum(case\n when nation = \\'BRAZIL\\' then volume\n else 0\n end) / sum(volume) as mkt_share\nfrom\n (\n select\n extract(year from o_orderdate) as o_year,\n l_extendedprice * (1 - l_discount) as volume,\n n2.n_name as nation\n from\n part,\n supplier,\n lineitem,\n orders,\n customer,\n nation n1,\n nation n2,\n region\n where\n p_partkey = l_partkey\n and s_suppkey = l_suppkey\n and l_orderkey = o_orderkey\n and o_custkey = c_custkey\n and c_nationkey = n1.n_nationkey\n and n1.n_regionkey = r_regionkey\n and r_name = \\'AMERICA\\'\n and s_nationkey = n2.n_nationkey\n and o_orderdate between date \\'1995-01-01\\' and date \\'1996-12-31\\'\n and p_type = \\'ECONOMY ANODIZED STEEL\\'\n ) as all_nations\ngroup by\n o_year\norder by\n o_year;","sequential_pipe",132); - X_173 := bat.new(nil:oid,nil:str); - X_181 := bat.append(X_173,"sys.all_nations"); - X_190 := bat.append(X_181,"sys.L3"); - X_176 := bat.new(nil:oid,nil:str); - X_183 := bat.append(X_176,"o_year"); - X_192 := bat.append(X_183,"mkt_share"); + X_199:void := querylog.define("explain select\n o_year,\n sum(case\n when nation = \\'BRAZIL\\' then volume\n else 0\n end) / sum(volume) as mkt_share\nfrom\n (\n select\n extract(year from o_orderdate) as o_year,\n l_extendedprice * (1 - l_discount) as volume,\n n2.n_name as nation\n from\n part,\n supplier,\n lineitem,\n orders,\n customer,\n nation n1,\n nation n2,\n region\n where\n p_partkey = l_partkey\n and s_suppkey = l_suppkey\n and l_orderkey = o_orderkey\n and o_custkey = c_custkey\n and c_nationkey = n1.n_nationkey\n and n1.n_regionkey = r_regionkey\n and r_name = \\'AMERICA\\'\n and s_nationkey = n2.n_nationkey\n and o_orderdate between date \\'1995-01-01\\' and date \\'1996-12-31\\'\n and p_type = \\'ECONOMY ANODIZED STEEL\\'\n ) as all_nations\ngroup by\n o_year\norder by\n o_year;","sequential_pipe",133); + X_174 := bat.new(nil:oid,nil:str); + X_182 := bat.append(X_174,"sys.all_nations"); + X_191 := bat.append(X_182,"sys.L3"); X_177 := bat.new(nil:oid,nil:str); - X_185 := bat.append(X_177,"int"); - X_194 := bat.append(X_185,"decimal"); - X_178 := bat.new(nil:oid,nil:int); - X_187 := bat.append(X_178,32); - X_196 := bat.append(X_187,19); - X_180 := bat.new(nil:oid,nil:int); - X_189 := bat.append(X_180,0); - X_197 := bat.append(X_189,4); + X_184 := bat.append(X_177,"o_year"); + X_193 := bat.append(X_184,"mkt_share"); + X_178 := bat.new(nil:oid,nil:str); + X_186 := bat.append(X_178,"int"); + X_195 := bat.append(X_186,"decimal"); + X_179 := bat.new(nil:oid,nil:int); + X_188 := bat.append(X_179,32); + X_197 := bat.append(X_188,19); + X_181 := bat.new(nil:oid,nil:int); + X_190 := bat.append(X_181,0); + X_198 := bat.append(X_190,4); X_8 := sql.mvc(); C_9:bat[:oid] := sql.tid(X_8,"sys","nation"); X_12:bat[:oid] := sql.bind_idxbat(X_8,"sys","nation","nation_n_regionkey_fkey",0); @@ -83,12 +83,12 @@ function user.s2_1(A0:str,A1:bte,A2:bte, X_20 := sql.projectdelta(C_9,X_12,X_15,r1_15,X_18); X_23:bat[:str] := sql.bind(X_8,"sys","region","r_name",0); C_21:bat[:oid] := sql.tid(X_8,"sys","region"); - C_207 := algebra.subselect(X_23,C_21,A3,A3,true,false,false); + C_208 := algebra.subselect(X_23,C_21,A3,A3,true,false,false); (C_25,r1_26) := sql.bind(X_8,"sys","region","r_name",2); - C_208 := algebra.subselect(r1_26,nil:bat[:oid],A3,A3,true,false,false); + C_209 := algebra.subselect(r1_26,nil:bat[:oid],A3,A3,true,false,false); X_27:bat[:str] := sql.bind(X_8,"sys","region","r_name",1); - C_210 := algebra.subselect(X_27,C_21,A3,A3,true,false,false); - C_28 := sql.subdelta(C_207,C_21,C_25,C_208,C_210); + C_211 := algebra.subselect(X_27,C_21,A3,A3,true,false,false); + C_28 := sql.subdelta(C_208,C_21,C_25,C_209,C_211); (X_31,r1_37) := algebra.subjoin(X_20,C_28,nil:BAT,nil:BAT,false,nil:lng); X_35 := algebra.projection(X_31,C_9); C_36:bat[:oid] := sql.tid(X_8,"sys","customer"); @@ -100,12 +100,12 @@ function user.s2_1(A0:str,A1:bte,A2:bte, X_46 := algebra.projection(r1_52,C_36); X_49:bat[:date] := sql.bind(X_8,"sys","orders","o_orderdate",0); C_47:bat[:oid] := sql.tid(X_8,"sys","orders"); - C_211 := algebra.subselect(X_49,C_47,A4,A5,true,true,false); + C_212 := algebra.subselect(X_49,C_47,A4,A5,true,true,false); (C_51,r1_59) := sql.bind(X_8,"sys","orders","o_orderdate",2); - C_212 := algebra.subselect(r1_59,nil:bat[:oid],A4,A5,true,true,false); + C_213 := algebra.subselect(r1_59,nil:bat[:oid],A4,A5,true,true,false); X_53:bat[:date] := sql.bind(X_8,"sys","orders","o_orderdate",1); - C_213 := algebra.subselect(X_53,C_47,A4,A5,true,true,false); - C_54 := sql.subdelta(C_211,C_47,C_51,C_212,C_213); + C_214 := algebra.subselect(X_53,C_47,A4,A5,true,true,false); + C_54 := sql.subdelta(C_212,C_47,C_51,C_213,C_214); X_55:bat[:oid] := sql.bind_idxbat(X_8,"sys","orders","orders_o_custkey_fkey",0); (X_57,r1_72) := sql.bind_idxbat(X_8,"sys","orders","orders_o_custkey_fkey",2); X_59:bat[:oid] := sql.bind_idxbat(X_8,"sys","orders","orders_o_custkey_fkey",1); @@ -125,12 +125,12 @@ function user.s2_1(A0:str,A1:bte,A2:bte, X_80 := algebra.projection(r1_94,X_79); X_83:bat[:str] := sql.bind(X_8,"sys","part","p_type",0); C_81:bat[:oid] := sql.tid(X_8,"sys","part"); - C_214 := algebra.subselect(X_83,C_81,A6,A6,true,false,false); + C_215 := algebra.subselect(X_83,C_81,A6,A6,true,false,false); (C_85,r1_108) := sql.bind(X_8,"sys","part","p_type",2); - C_215 := algebra.subselect(r1_108,nil:bat[:oid],A6,A6,true,false,false); + C_216 := algebra.subselect(r1_108,nil:bat[:oid],A6,A6,true,false,false); X_87:bat[:str] := sql.bind(X_8,"sys","part","p_type",1); - C_216 := algebra.subselect(X_87,C_81,A6,A6,true,false,false); - C_88 := sql.subdelta(C_214,C_81,C_85,C_215,C_216); + C_217 := algebra.subselect(X_87,C_81,A6,A6,true,false,false); + C_88 := sql.subdelta(C_215,C_81,C_85,C_216,C_217); X_89:bat[:int] := sql.bind(X_8,"sys","part","p_partkey",0); (C_91,r1_120) := sql.bind(X_8,"sys","part","p_partkey",2); X_93:bat[:int] := sql.bind(X_8,"sys","part","p_partkey",1); @@ -158,37 +158,38 @@ function user.s2_1(A0:str,A1:bte,A2:bte, X_125:bat[:int] := batmtime.year(X_124); (X_126,r1_176,r2_176) := group.subgroupdone(X_125); X_129 := algebra.projection(r1_176,X_125); - X_134:bat[:str] := sql.bind(X_8,"sys","nation","n_name",0); - (C_136,r1_186) := sql.bind(X_8,"sys","nation","n_name",2); - X_138:bat[:str] := sql.bind(X_8,"sys","nation","n_name",1); - X_139 := sql.projectdelta(C_9,X_134,C_136,r1_186,X_138); - X_140 := algebra.projection(r1_162,X_139); - X_141:bat[:bit] := batcalc.==(X_140,A0); - X_142:bat[:bit] := batcalc.isnil(X_141); - X_143:bat[:bit] := batcalc.ifthenelse(X_142,false,X_141); - X_144:bat[:lng] := sql.bind(X_8,"sys","lineitem","l_extendedprice",0); - (C_146,r1_206) := sql.bind(X_8,"sys","lineitem","l_extendedprice",2); - X_148:bat[:lng] := sql.bind(X_8,"sys","lineitem","l_extendedprice",1); - X_149 := sql.projectdelta(C_64,X_144,C_146,r1_206,X_148); - X_150:bat[:lng] := algebra.projectionpath(X_121,X_112,X_95,r1_94,X_149); - X_151 := calc.lng(A2,15,2); - X_153:bat[:lng] := sql.bind(X_8,"sys","lineitem","l_discount",0); - (C_155,r1_221) := sql.bind(X_8,"sys","lineitem","l_discount",2); - X_157:bat[:lng] := sql.bind(X_8,"sys","lineitem","l_discount",1); - X_158 := sql.projectdelta(C_64,X_153,C_155,r1_221,X_157); - X_159:bat[:lng] := algebra.projectionpath(X_121,X_112,X_95,r1_94,X_158); - X_160:bat[:lng] := batcalc.-(X_151,X_159); - X_161:bat[:lng] := batcalc.*(X_150,X_160); - X_162 := calc.lng(A1,19,4); - X_165:bat[:lng] := batcalc.ifthenelse(X_143,X_161,X_162); - X_166:bat[:lng] := aggr.subsum(X_165,X_126,r1_176,true,true); - X_169:bat[:lng] := aggr.subsum(X_161,X_126,r1_176,true,true); - (X_130,r1_180,r2_180) := algebra.subsort(X_129,false,false); - X_133 := algebra.projection(r1_180,X_129); - X_167:bat[:lng] := batcalc.lng(4,X_166,19,8); - X_170:bat[:lng] := batcalc./(X_167,X_169); - X_171 := algebra.projection(r1_180,X_170); - sql.resultSet(X_190,X_192,X_194,X_196,X_197,X_133,X_171); + X_135:bat[:str] := sql.bind(X_8,"sys","nation","n_name",0); + (C_137,r1_190) := sql.bind(X_8,"sys","nation","n_name",2); + X_139:bat[:str] := sql.bind(X_8,"sys","nation","n_name",1); + X_140 := sql.projectdelta(C_9,X_135,C_137,r1_190,X_139); + X_141 := algebra.projection(r1_162,X_140); + X_142:bat[:bit] := batcalc.==(X_141,A0); + X_143:bat[:bit] := batcalc.isnil(X_142); + X_144:bat[:bit] := batcalc.ifthenelse(X_143,false,X_142); + X_145:bat[:lng] := sql.bind(X_8,"sys","lineitem","l_extendedprice",0); + (C_147,r1_209) := sql.bind(X_8,"sys","lineitem","l_extendedprice",2); + X_149:bat[:lng] := sql.bind(X_8,"sys","lineitem","l_extendedprice",1); + X_150 := sql.projectdelta(C_64,X_145,C_147,r1_209,X_149); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list