Changeset: da0fa264a7e6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=da0fa264a7e6 Modified Files: sql/backends/monet5/datacell/Tests/All sql/backends/monet5/datacell/Tests/basket00.mal sql/backends/monet5/datacell/Tests/emitter00.mal sql/backends/monet5/datacell/Tests/receptor00.mal sql/backends/monet5/datacell/Tests/scenario00.stable.out sql/backends/monet5/datacell/Tests/scenario03.stable.out sql/backends/monet5/datacell/opt_datacell.c Branch: default Log Message:
Fix code generation for singleton values diffs (294 lines): diff --git a/sql/backends/monet5/datacell/Tests/All b/sql/backends/monet5/datacell/Tests/All --- a/sql/backends/monet5/datacell/Tests/All +++ b/sql/backends/monet5/datacell/Tests/All @@ -2,6 +2,9 @@ # (Must be first as otherwise creation of schema datacell via # 50_datacell.sql is not triggered, as first SQL-clients does not connect # on "virgin" database!???) +# +# beware, the scenario testing calls for manual interaction to start/stop +# sensors and actuators. The test web merely shows basic functionality. ENABLE_DATACELL?scenario00 ENABLE_DATACELL?scenario01 ENABLE_DATACELL?scenario02 @@ -11,6 +14,7 @@ ENABLE_DATACELL?scenario05 ENABLE_DATACELL?scenario06 ENABLE_DATACELL?datacell00 ENABLE_DATACELL?dctemper00 +ENABLE_DATACELL?dcload ENABLE_DATACELL?linearroad # MAL ENABLE_DATACELL?basket00 diff --git a/sql/backends/monet5/datacell/Tests/basket00.mal b/sql/backends/monet5/datacell/Tests/basket00.mal --- a/sql/backends/monet5/datacell/Tests/basket00.mal +++ b/sql/backends/monet5/datacell/Tests/basket00.mal @@ -1,11 +1,14 @@ #Testing the basket functionality # this assumes you have ran first datacell00.sql -basket.register("datacell","x"); +sql.init(); +basket.register("x"); -basket.lock("datacell","x"); +basket.lock("x"); io.print("x locked"); -basket.unlock("datacell","x"); +basket.unlock("x"); +io.print("x unlocked"); -basket.drop("datacell","x"); +basket.drop("x"); +io.print("x dropped"); diff --git a/sql/backends/monet5/datacell/Tests/emitter00.mal b/sql/backends/monet5/datacell/Tests/emitter00.mal --- a/sql/backends/monet5/datacell/Tests/emitter00.mal +++ b/sql/backends/monet5/datacell/Tests/emitter00.mal @@ -5,20 +5,20 @@ sql.init(); -basket.register("datacell","y"); -emitter.start("datacell","y","localhost",50502,"active"); +basket.register("y"); +emitter.start("y","localhost",50502); io.print("emitter working"); alarm.sleep(5); -emitter.pause("datacell","y"); +emitter.pause("y"); io.print("emitter paused"); alarm.sleep(5); -emitter.resume("datacell","y"); +emitter.resume("y"); io.print("emitter restarted"); alarm.sleep(5); -emitter.pause("datacell","y"); +emitter.pause("y"); io.print("emitter stopped"); emitter.dump(); -emitter.drop("datacell","y"); +emitter.stop("y"); # The SQL equivalents # call datacell.basket('datacell','y); diff --git a/sql/backends/monet5/datacell/Tests/receptor00.mal b/sql/backends/monet5/datacell/Tests/receptor00.mal --- a/sql/backends/monet5/datacell/Tests/receptor00.mal +++ b/sql/backends/monet5/datacell/Tests/receptor00.mal @@ -5,19 +5,19 @@ sql.init(); -basket.register("datacell","x"); -receptor.start("datacell","x","localhost",50501,"passive"); +basket.register("x"); +receptor.start("x","localhost",50501); io.print("receptor working"); alarm.sleep(5); -receptor.pause("datacell","x"); +receptor.pause("x"); io.print("receptor paused"); alarm.sleep(5); -receptor.resume("datacell","x"); +receptor.resume("x"); io.print("receptor restarted"); alarm.sleep(5); -receptor.pause("datacell","x"); +receptor.pause("x"); io.print("receptor stopped"); -receptor.drop("datacell","x"); +receptor.stop("x"); # The SQL equivalents # call datacell.basket('datacell','x); diff --git a/sql/backends/monet5/datacell/Tests/scenario00.stable.out b/sql/backends/monet5/datacell/Tests/scenario00.stable.out --- a/sql/backends/monet5/datacell/Tests/scenario00.stable.out +++ b/sql/backends/monet5/datacell/Tests/scenario00.stable.out @@ -20,15 +20,78 @@ stdout of test 'scenario00` in directory Ready. # SQL catalog created, loading sql scripts once +# loading sql script: 00_catalog.sql +# 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_history.sql +# loading sql script: 16_tracelog.sql +# loading sql script: 17_compress.sql +# loading sql script: 18_dictionary.sql +# loading sql script: 19_cluster.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: 24_zorder.sql +# loading sql script: 25_debug.sql +# loading sql script: 39_analytics.sql +# loading sql script: 40_geom.sql +# loading sql script: 50_datacell.sql +# loading sql script: 80_udf.sql +# loading sql script: 99_system.sql +# 12:44:16 > +# 12:44:16 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=vienna" "--port=30375" +# 12:44:16 > -# 16:43:47 > -# 16:43:47 > mclient -lsql -ftest -i -e --host=rig --port=38529 -# 16:43:47 > +#set optimizer='datacell_pipe'; +#create table datacell.bsktin( +# id integer, +# tag integer, +# payload integer +#); +#create table datacell.bsktout (like datacell.bsktin); +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., ., ., . # table_name +% nme, host, port, protocol, mode, status, lastseen, cycles, received, pending # name +% clob, clob, int, clob, clob, clob, timestamp, int, int, int # type +% 15, 9, 5, 3, 7, 6, 26, 1, 1, 1 # length +[ "datacell.bsktin", "localhost", 50500, "TCP", "passive", "paused", NULL, 0, 0, 0 ] +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., ., ., . # table_name +% nme, host, port, protocol, mode, status, lastsent, cycles, sent, pending # name +% clob, clob, int, clob, clob, clob, timestamp, int, int, int # type +% 16, 9, 5, 3, 6, 6, 26, 1, 1, 1 # length +[ "datacell.bsktout", "localhost", 50600, "UDP", "active", "paused", NULL, 0, 0, 0 ] +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., . # table_name +% nme, status, lastrun, cycles, events, time, error, def # name +% clob, clob, timestamp, int, int, bigint, clob, clob # type +% 13, 6, 26, 1, 1, 1, 0, 59 # length +[ "datacell.pass", "paused", NULL, 0, 0, 0, "", "insert into datacell.bsktout select * from datacell.bsktin;" ] +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., ., . # table_name +% nme, threshold, winsize, winstride, timeslice, timestride, beat, seen, events # name +% clob, int, int, int, int, int, int, timestamp, int # type +% 16, 1, 1, 1, 1, 1, 1, 26, 1 # length +[ "datacell.bsktin", 0, 0, 0, 0, 0, 0, NULL, 0 ] +[ "datacell.bsktout", 0, 0, 0, 0, 0, 0, NULL, 0 ] +#call datacell.dump(); +#baskets[ 1] datacell.bsktin columns 3 threshold 0 window=[0,0] time window=[0,0] beat 0 milliseconds events 0 +#baskets[ 2] datacell.bsktout columns 3 threshold 0 window=[0,0] time window=[0,0] beat 0 milliseconds events 0 +#receptor datacell.bsktin at localhost:50500 protocol=TCP mode=passive status=running delay=1000 +#emitter datacell.bsktout at localhost:50600 protocol=UDP mode=active status=running delay=1000 +#scheduler status running +#[0] datacell.pass running delay 0 cycles 0 events 0 time 0 ms +#<-- datacell.bsktin basket[1] 0 0 +#drop table datacell.bsktin; +#drop table datacell.bsktout; -= to be checked / approved ! +# 12:44:16 > +# 12:44:16 > "Done." +# 12:44:16 > -# 16:43:47 > -# 16:43:47 > Done. -# 16:43:47 > - diff --git a/sql/backends/monet5/datacell/Tests/scenario03.stable.out b/sql/backends/monet5/datacell/Tests/scenario03.stable.out --- a/sql/backends/monet5/datacell/Tests/scenario03.stable.out +++ b/sql/backends/monet5/datacell/Tests/scenario03.stable.out @@ -21,14 +21,46 @@ stdout of test 'scenario03` in directory Ready. # SQL catalog created, loading sql scripts once +# 12:45:10 > +# 12:45:10 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=vienna" "--port=38236" +# 12:45:10 > -# 16:50:15 > -# 16:50:15 > mclient -lsql -ftest -i -e --host=rig --port=39781 -# 16:50:15 > +#set optimizer='datacell_pipe'; +#create table datacell.bakin( +# id integer, +# tag timestamp, +# payload integer +#); +#create table datacell.bakout( tag timestamp, cnt integer); +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., ., ., . # table_name +% nme, host, port, protocol, mode, status, lastseen, cycles, received, pending # name +% clob, clob, int, clob, clob, clob, timestamp, int, int, int # type +% 14, 9, 5, 3, 7, 7, 26, 1, 1, 1 # length +[ "datacell.bakin", "localhost", 50503, "TCP", "passive", "running", NULL, 0, 0, 0 ] +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., ., ., . # table_name +% nme, host, port, protocol, mode, status, lastsent, cycles, sent, pending # name +% clob, clob, int, clob, clob, clob, timestamp, int, int, int # type +% 15, 9, 5, 3, 6, 7, 26, 1, 1, 1 # length +[ "datacell.bakout", "localhost", 50603, "UDP", "active", "running", NULL, 0, 0, 0 ] +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., . # table_name +% nme, status, lastrun, cycles, events, time, error, def # name +% clob, clob, timestamp, int, int, bigint, clob, clob # type +% 14, 7, 26, 1, 1, 1, 0, 117 # length +[ "datacell.schep", "running", NULL, 0, 0, 0, "", "insert into datacell.bakout select now(), count(*) from datacell.bakin where datacell.threshold('datacell.bakin',15);" ] +#select * from datacell.receptors(); select * from datacell.emitters(); select * from datacell.queries(); select * from datacell.baskets(); +% ., ., ., ., ., ., ., ., . # table_name +% nme, threshold, winsize, winstride, timeslice, timestride, beat, seen, events # name +% clob, int, int, int, int, int, int, timestamp, int # type +% 15, 1, 1, 1, 1, 1, 1, 26, 1 # length +[ "datacell.bakin", 0, 0, 0, 0, 0, 0, NULL, 0 ] +[ "datacell.bakout", 0, 0, 0, 0, 0, 0, NULL, 0 ] +#drop table datacell.bakin; +#drop table datacell.bakout; -= to be checked / approved ! +# 12:45:10 > +# 12:45:10 > "Done." +# 12:45:10 > -# 16:50:15 > -# 16:50:15 > Done. -# 16:50:15 > - diff --git a/sql/backends/monet5/datacell/opt_datacell.c b/sql/backends/monet5/datacell/opt_datacell.c --- a/sql/backends/monet5/datacell/opt_datacell.c +++ b/sql/backends/monet5/datacell/opt_datacell.c @@ -219,16 +219,22 @@ OPTdatacellImplementation(Client cntxt, /* upgrade single values to a BAT */ clrFunction(p); if (!isaBatType(getVarType(mb, getArg(p, 5)))) { - getModuleId(p) = sqlRef; - getFunctionId(p) = singleRef; + qq= newInstruction(mb, ASSIGNsymbol); + getModuleId(qq) = sqlRef; + getFunctionId(qq) = singleRef; + getArg(qq, 0) = getArg(qa[j], k + 2); + getArg(qq, 1) = getArg(p, 5); + qq->argc = 2; + p = qq; + } else { + qq= newAssignment(mb); + getArg(qq, 0) = getArg(qa[j], k + 2); + getArg(qq, 1) = getArg(p, 5); + qq->argc = 2; + alias[getArg(p,0)] = getArg(p,1); + p->argc = 2; + mvc = getArg(p, 0); } - qq= newAssignment(mb); - getArg(qq, 0) = getArg(qa[j], k + 2); - getArg(qq, 1) = getArg(p, 5); - qq->argc = 2; - alias[getArg(p,0)] = getArg(p,1); - p->argc = 2; - mvc = getArg(p, 0); } } else { if ( alias[mvc] ) @@ -250,8 +256,6 @@ OPTdatacellImplementation(Client cntxt, { clk = GDKusec(); optimizerCheck(cntxt, mb, "optimizer.datacell", 1, /*t =*/ (GDKusec() - clk), OPT_CHECK_ALL); - mnstr_printf(cntxt->fdout, "=FINISHED datacell %d\n", actions); - printFunction(cntxt->fdout, mb, 0, LIST_MAL_STMT | LIST_MAPI); addtoMalBlkHistory(mb, "datacell"); } GDKfree(alias); _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list