Changeset: 4674721863c1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4674721863c1 Added Files: sql/backends/monet5/Tests/cquery18.sql sql/backends/monet5/Tests/cquery18.stable.err sql/backends/monet5/Tests/cquery18.stable.out Modified Files: sql/backends/monet5/Tests/All sql/backends/monet5/Tests/cqstream03.stable.out sql/backends/monet5/Tests/cquery.malC sql/backends/monet5/Tests/cquery.stable.err sql/backends/monet5/Tests/cquery05.sql sql/backends/monet5/cquery.mal sql/backends/monet5/sql_basket.h sql/backends/monet5/sql_cquery.c sql/backends/monet5/sql_cquery.h sql/include/sql_catalog.h sql/scripts/50_cquery.sql sql/server/sql_parser.y Branch: trails Log Message:
Whenever an error occurs while executing a CQ, the call exits immediately and the CQ gets paused in the scheduler. Use cquery.status() to check the error. Also updated the SQL catalog for CQ. diffs (truncated from 680 to 300 lines): diff --git a/sql/backends/monet5/Tests/All b/sql/backends/monet5/Tests/All --- a/sql/backends/monet5/Tests/All +++ b/sql/backends/monet5/Tests/All @@ -103,6 +103,7 @@ cquery14 cquery15 cquery16 cquery17 +cquery18 cqstream00 cqstream01 diff --git a/sql/backends/monet5/Tests/cqstream03.stable.out b/sql/backends/monet5/Tests/cqstream03.stable.out --- a/sql/backends/monet5/Tests/cqstream03.stable.out +++ b/sql/backends/monet5/Tests/cqstream03.stable.out @@ -37,7 +37,7 @@ Ready. #end; #select * from cquery.status(); % .L1, .L1, .L1, .L1, .L1, .L1 # table_name -% tick, schema, function, state, errors, stmt # name +% tick, schema, function, alias, state, errors # name % timestamp, clob, clob, clob, clob, clob # type % 26, 0, 0, 0, 0, 0 # length #drop procedure cq_agenda; diff --git a/sql/backends/monet5/Tests/cquery.malC b/sql/backends/monet5/Tests/cquery.malC --- a/sql/backends/monet5/Tests/cquery.malC +++ b/sql/backends/monet5/Tests/cquery.malC @@ -4,6 +4,6 @@ cquery.dump(); cquery.show("unknown","query"); -(tick:bat[:timestamp],mod:bat[:str],fcn:bat[:str], time:bat[:lng],error:bat[:str]) := cquery.log(); +(tick:bat[:timestamp],mod:bat[:str],fcn:bat[:str],alias:bat[:str],time:bat[:lng],error:bat[:str]) := cquery.log(); io.print(tick,mod,fcn,time,error); diff --git a/sql/backends/monet5/Tests/cquery.stable.err b/sql/backends/monet5/Tests/cquery.stable.err --- a/sql/backends/monet5/Tests/cquery.stable.err +++ b/sql/backends/monet5/Tests/cquery.stable.err @@ -35,7 +35,7 @@ QUERY = # some simple MAL tests cquery.show("unknown","query"); - (tick:bat[:timestamp],mod:bat[:str],fcn:bat[:str], time:bat[:lng],error:bat[:str]) := cquery.log(); + (tick:bat[:timestamp],mod:bat[:str],fcn:bat[:str],alias:bat[:str],time:bat[:lng],error:bat[:str]) := cquery.log(); io.print(tick,mod,fcn,time,error); ERROR = !SQLException:cquery.show:The continuous query unknown.query is not accessible diff --git a/sql/backends/monet5/Tests/cquery05.sql b/sql/backends/monet5/Tests/cquery05.sql --- a/sql/backends/monet5/Tests/cquery05.sql +++ b/sql/backends/monet5/Tests/cquery05.sql @@ -7,18 +7,14 @@ begin insert into cqresult05 (select count(*) from cqresult05); end; -start continuous sys.cq_basic() with heartbeat 1000; +start continuous sys.cq_basic() with heartbeat 1000 cycles 3; -call cquery.wait(2400); - -pause continuous cq_basic; +call cquery.wait(3500); --select * from cquery.status(); --select * from cquery.summary(); --select * from cquery.log(); -stop continuous cq_basic; - select 'RESULT'; select * from cqresult05; diff --git a/sql/backends/monet5/Tests/cquery18.sql b/sql/backends/monet5/Tests/cquery18.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/cquery18.sql @@ -0,0 +1,41 @@ +-- test errors in CQ, it should pause automatically if that happens +-- trigger an zero division +create table testing18(aaa real); + +create procedure cq_query18(ppp integer) +begin + insert into testing18 values (1 / ppp); +end; + +start continuous procedure cq_query18(1) with heartbeat 1000 cycles 1; + +call cquery.wait(2000); + +select aaa from testing18; + +start continuous procedure cq_query18(0) with heartbeat 1000 cycles 2; + +call cquery.wait(3000); + +select aaa from testing18; + +start continuous procedure cq_query18(1) with heartbeat 1000 cycles 2; --error + +pause continuous cq_query18; --error + +select "schema", "function", errors from cquery.status(); + +resume continuous cq_query18; --ok + +stop continuous cq_query18; --ok + +start continuous procedure cq_query18(2) with heartbeat 1000 cycles 2; --ok + +call cquery.wait(3000); + +select aaa from testing18; + +select "schema", "function", "errors" from cquery.status(); + +drop procedure cq_query18; +drop table testing18; diff --git a/sql/backends/monet5/Tests/cquery18.stable.err b/sql/backends/monet5/Tests/cquery18.stable.err new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/cquery18.stable.err @@ -0,0 +1,44 @@ +stderr of test 'cquery18` in directory 'sql/backends/monet5` itself: + + +# 16:05:22 > +# 16:05:22 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=37159" "--set" "mapi_usock=/var/tmp/mtest-1786/.s.monetdb.37159" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/ferreira/MonetDB-trails/BUILD/var/MonetDB/mTests_sql_backends_monet5" "--set" "embedded_r=yes" "--set" "embedded_py=true" +# 16:05:22 > + +# builtin opt gdk_dbpath = /home/ferreira/MonetDB-trails/BUILD/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 37159 +# cmdline opt mapi_usock = /var/tmp/mtest-1786/.s.monetdb.37159 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/ferreira/MonetDB-trails/BUILD/var/MonetDB/mTests_sql_backends_monet5 +# cmdline opt embedded_r = yes +# cmdline opt embedded_py = true +# cmdline opt gdk_debug = 536870922 + +# 16:05:22 > +# 16:05:22 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-1786" "--port=37159" +# 16:05:22 > + +MAPI = (monetdb) /var/tmp/mtest-1786/.s.monetdb.37159 +QUERY = start continuous procedure cq_query18(1) with heartbeat 1000 cycles 2; --error +ERROR = !The continuous procedure cq_query18 is already registered. +CODE = 3F000 +MAPI = (monetdb) /var/tmp/mtest-1786/.s.monetdb.37159 +QUERY = pause continuous cq_query18; --error +ERROR = !The continuous query cq_query18 is already paused +CODE = 42000 + +# 16:05:26 > +# 16:05:26 > "Done." +# 16:05:26 > + diff --git a/sql/backends/monet5/Tests/cquery18.stable.out b/sql/backends/monet5/Tests/cquery18.stable.out new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/cquery18.stable.out @@ -0,0 +1,119 @@ +stdout of test 'cquery18` in directory 'sql/backends/monet5` itself: + + +# 16:05:22 > +# 16:05:22 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=37159" "--set" "mapi_usock=/var/tmp/mtest-1786/.s.monetdb.37159" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/ferreira/MonetDB-trails/BUILD/var/MonetDB/mTests_sql_backends_monet5" "--set" "embedded_r=yes" "--set" "embedded_py=true" +# 16:05:22 > + +# MonetDB 5 server v11.28.0 +# This is an unreleased version +# Serving database 'mTests_sql_backends_monet5', using 8 threads +# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers +# Found 15.498 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2017 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://dhcp-120.eduroam.cwi.nl:37159/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-1786/.s.monetdb.37159 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded +# MonetDB/Timetrails module loaded +# MonetDB/Python2 module loaded +# MonetDB/R module loaded + +Ready. +# SQL catalog created, loading sql scripts once +# loading sql script: 09_like.sql +# loading sql script: 10_math.sql +# loading sql script: 11_times.sql +# loading sql script: 12_url.sql +# loading sql script: 13_date.sql +# loading sql script: 14_inet.sql +# loading sql script: 15_querylog.sql +# loading sql script: 16_tracelog.sql +# loading sql script: 17_temporal.sql +# loading sql script: 18_index.sql +# loading sql script: 20_vacuum.sql +# loading sql script: 21_dependency_functions.sql +# loading sql script: 22_clients.sql +# loading sql script: 23_skyserver.sql +# loading sql script: 25_debug.sql +# loading sql script: 26_sysmon.sql +# loading sql script: 27_rejects.sql +# loading sql script: 39_analytics.sql +# loading sql script: 39_analytics_hge.sql +# loading sql script: 40_geom.sql +# loading sql script: 40_json.sql +# loading sql script: 40_json_hge.sql +# loading sql script: 41_md5sum.sql +# loading sql script: 45_uuid.sql +# loading sql script: 46_profiler.sql +# loading sql script: 50_cquery.sql +# loading sql script: 51_sys_schema_extension.sql +# loading sql script: 60_wlcr.sql +# loading sql script: 72_fits.sql +# loading sql script: 74_netcdf.sql +# loading sql script: 75_lidar.sql +# loading sql script: 75_shp.sql +# loading sql script: 75_storagemodel.sql +# loading sql script: 80_statistics.sql +# loading sql script: 80_udf.sql +# loading sql script: 80_udf_hge.sql +# loading sql script: 85_bam.sql +# loading sql script: 90_generator.sql +# loading sql script: 90_generator_hge.sql +# loading sql script: 99_system.sql +#!ERROR: 22012!division by zero. + +# 16:05:22 > +# 16:05:22 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-1786" "--port=37159" +# 16:05:22 > + +#create table testing18(aaa real); +#create procedure cq_query18(ppp integer) +#begin +# insert into testing18 values (1 / ppp); +#end; +#start continuous procedure cq_query18(1) with heartbeat 1000 cycles 1; +#select aaa from testing18; +% sys.testing18 # table_name +% aaa # name +% real # type +% 15 # length +[ 1 ] +#start continuous procedure cq_query18(0) with heartbeat 1000 cycles 2; +#select aaa from testing18; +% sys.testing18 # table_name +% aaa # name +% real # type +% 15 # length +[ 1 ] +#select "schema", "function", errors from cquery.status(); +% .L1, .L1, .L1 # table_name +% schema, function, errors # name +% clob, clob, clob # type +% 3, 10, 36 # length +[ "sys", "cq_query18", "MALException:calc./:operation failed" ] +#resume continuous cq_query18; --ok +#stop continuous cq_query18; --ok +#start continuous procedure cq_query18(2) with heartbeat 1000 cycles 2; --ok +#select aaa from testing18; +% sys.testing18 # table_name +% aaa # name +% real # type +% 15 # length +[ 1 ] +[ 0 ] +[ 0 ] +#select "schema", "function", errors from cquery.status(); +% .L1, .L1, .L1 # table_name +% schema, function, errors # name +% clob, clob, clob # type +% 0, 0, 0 # length +#drop procedure cq_query18; +#drop table testing18; + +# 16:05:26 > +# 16:05:26 > "Done." +# 16:05:26 > + diff --git a/sql/backends/monet5/cquery.mal b/sql/backends/monet5/cquery.mal --- a/sql/backends/monet5/cquery.mal +++ b/sql/backends/monet5/cquery.mal @@ -23,11 +23,11 @@ comment "Sleep for some time"; pattern cycles(mod:str, fcn:str,cnt:int) address CQcycles -comment "Limit number of petrinet steps"; +comment "Limit number of petrinet steps for a single continuous query"; pattern cycles(cnt:int) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list