Changeset: bf7df815817d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf7df815817d
Modified Files:
        
Branch: default
Log Message:

merging


diffs (truncated from 369 to 300 lines):

diff --git a/sql/backends/monet5/datacell/50_datacell.sql 
b/sql/backends/monet5/datacell/50_datacell.sql
--- a/sql/backends/monet5/datacell/50_datacell.sql
+++ b/sql/backends/monet5/datacell/50_datacell.sql
@@ -36,14 +36,14 @@
 create procedure datacell.resume (sch string, tbl string)
     external name datacell.resume;
 
-create procedure datacell.drop (sch string, tbl string)
-    external name datacell.drop;
+create procedure datacell.remove (sch string, tbl string)
+    external name datacell.remove;
 
 create procedure datacell.query(sch string, proc string)
-       extern name datacell.query;
+       external name datacell.query;
 
 create procedure datacell.run()
-       extern name datacell.run;
+       external name datacell.run;
 
 create procedure datacell.stop()
-       extern name datacell.stop;
+       external name datacell.stop;
diff --git a/sql/backends/monet5/datacell/Tests/datacell00.sql 
b/sql/backends/monet5/datacell/Tests/datacell00.sql
--- a/sql/backends/monet5/datacell/Tests/datacell00.sql
+++ b/sql/backends/monet5/datacell/Tests/datacell00.sql
@@ -1,11 +1,11 @@
 #set up the minimal test environment for datacell
 
 create schema datacell;
-create table datacell.X( id int, tag timestamp, payload int);
-create table datacell.Y( id int, tag timestamp, payload int, msdelay int);
+create table datacell.X( id string, tag timestamp, payload int);
+create table datacell.Y( id string, tag timestamp, payload int, msdelay int);
 
 -- the continoues query
-create procedure datacell.tranport()
+create procedure datacell.transport()
 begin
        -- insert into datacell.Y select *, cast(now() as milliseconds) -  
cast(tag as milliseconds) from datacell.X;
         insert into datacell.Y select *, 1 from datacell.X;
diff --git a/sql/backends/monet5/datacell/Tests/poc.sql 
b/sql/backends/monet5/datacell/Tests/poc.sql
--- a/sql/backends/monet5/datacell/Tests/poc.sql
+++ b/sql/backends/monet5/datacell/Tests/poc.sql
@@ -6,7 +6,7 @@
 create schema datacell;
 set optimizer='datacell_pipe';
 
-create table datacell.basket_X(
+create table datacell.sysIn(
     id integer auto_increment,
     tag timestamp default now(),
     payload integer
@@ -14,49 +14,49 @@
 
 -- to be used by continous queries
 -- could be generated from the table definition.
-create function datacell.basket_X()
+create function datacell.sysIn()
 returns table (id integer, tag timestamp, payload integer)
 begin
-       return select * from datacell.basket_X;
+       return select * from datacell.sysIn;
 end;
 
-select * from datacell.basket_X();
+select * from datacell.sysIn();
 
 -- to be used by receptor thread
-create function datacell.receptor_X()
+create function datacell.receptor_sysIn()
 returns boolean
 begin
-       insert into datacell.basket_X(payload) values ( 1);
+       insert into datacell.sysIn(payload) values ( 1);
        return true;
 end;
 
-call register_basket('datacell.basket_x');
-call register_receptor('datacell.receptor_x','localhost:50100');
-call start_receptor('datacell.receptor_x');
+call datacell.basket('datacell','sysIn');
+call datacell.receptor('datacell','sysIn','localhost','50500');
+call datacell.start('datacell','sysIn');
 
-create table datacell.basket_Y( etag timestamp, like datacell.basket_X);
+create table datacell.sysOut( etag timestamp, like datacell.sysIn);
 
 -- the continues query is registered and started
-create procedure datacell.query_X_Y()
+create procedure datacell.query_sysIn_sysOut()
 begin
-       insert into datacell.basket_Y select now(), *  from datacell.basket_X() 
;
+       insert into datacell.sysOut select now(), *  from datacell.sysIn() ;
 end;
-call register_query('datacell.query_X_Y');
-call start_query('datacell.query_X_Y');
+call register_query('datacell.query_sysIn_sysOut');
+call start_query('datacell.query_sysIn_sysOut');
 
-create function datacell.basket_Y()
+create function datacell.sysOut()
 returns table (id integer)
 begin
-       return select * from datacell.basket_Y;
+       return select * from datacell.sysOut;
 end;
 
 -- sent it over the wire.
-create function datacell.emitter_Y()
+create function datacell.emitter_sysOut()
 returns boolean;
 begin
-       select * from datacell.basket_Y();
+       select * from datacell.sysOut();
        return true;
 end;
-call register_basket('basket_y');
-call register_emitter('emitter_y','localhost:50101');
-call start_emitter('emitter_y');
+call datacell.basket('datacell','sysOut');
+call datacell.emitter('datacell','sysOut','localhost:50101');
+call datacell.start('datacell','sysOut');
diff --git a/sql/backends/monet5/datacell/datacell.mx 
b/sql/backends/monet5/datacell/datacell.mx
--- a/sql/backends/monet5/datacell/datacell.mx
+++ b/sql/backends/monet5/datacell/datacell.mx
@@ -32,7 +32,7 @@
 address DCreceptor
 comment "Define a receptor based on a basket table. The receptor protocol is 
either active or passive.";
 
-pattern drop(schema:str,obj:str):void
+pattern remove(schema:str,obj:str):void
 address DCdrop
 comment "Remove a basket, receptor or emitter";
 
@@ -44,7 +44,7 @@
 address DCresume
 comment "Pause a receptor or emitter";
 
-pattern query(schema:str,obj:str):void
+pattern query(name:str,def:str):void
 address DCquery
 comment "Add a new continuous query.";
 
@@ -80,6 +80,7 @@
 #include "mal.h"
 #include "mal_interpreter.h"
 #include "sql.h"
+#include "sql_scenario.h"
 #include "basket.h"
 #include "receptor.h"
 #include "emitter.h"
@@ -184,14 +185,35 @@
        return msg;
 }
 
+/* locate the MAL representation of this operation and extract the flow */
+/* If the operation is not available yet, it should be compiled from its
+   definition retained in the SQL catalog */
 str
 DCquery(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       (void) cntxt;
+       str nme = *(str*) getArgReference(stk,pci,1);
+       str *def = (str*) getArgReference(stk,pci,2);
+       Symbol s;
+       str msg;
+       InstrPtr p;
+       Module scope;
+
        (void) mb;
-       (void) stk;
-       (void) pci;
-       return MAL_SUCCEED;
+       msg = SQLstatementIntern(cntxt, def, nme, 0, 0);
+       /* if ( msg )
+               return msg; */
+       scope = findModule(cntxt->nspace,putName("datacell",8));
+       s = newFunction(putName("datacell",8), putName(nme, 
strlen(nme)),FUNCTIONsymbol);
+       if ( s == NULL) 
+               throw(SQL,"datacell.query","Procedure code does not exist");
+    freeMalBlk(s->def);
+    s->def = copyMalBlk(cntxt->curprg->def);
+       p= getInstrPtr(s->def,0);
+       setModuleId(p, putName("datacell",8));
+       setFunctionId(p, putName(nme,strlen(nme)));
+    insertSymbol(scope,s);
+       PNanalysis(cntxt,s->def);
+       return msg;
 }
 
 /*
diff --git a/sql/backends/monet5/datacell/petrinet.mx 
b/sql/backends/monet5/datacell/petrinet.mx
--- a/sql/backends/monet5/datacell/petrinet.mx
+++ b/sql/backends/monet5/datacell/petrinet.mx
@@ -54,6 +54,9 @@
 address PNstopScheduler
 comment "Stop the Petri net controller";
 
+pattern analyse(mod:str, fcn:str)
+address PNanalyseWrapper
+comment "Check the input/output relationship";
 command dump()
 address PNdump
 comment "Show the status of the Petri net";
@@ -89,6 +92,8 @@
 datacell_export str PNdump(int *ret);
 datacell_export str PNsource(int *ret, str *mod, str *fcn, str *schema, str 
*tbl);
 datacell_export str PNtarget(int *ret, str *mod, str *fcn, str *schema, str 
*tbl);
+datacell_export void PNanalysis(Client cntxt, MalBlkPtr mb);
+datacell_export str PNanalyseWrapper(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 #endif
 
 @c
@@ -137,6 +142,49 @@
 static int status = 0;
 static int cycleDelay = 1000; /* be careful, it affects response/throughput 
timings */
 
+/* check the routine for input/output relationships */
+void
+PNanalysis(Client cntxt, MalBlkPtr mb)
+{
+       int i, bskt;
+       InstrPtr p;
+       str schema, tbl;
+
+       for( i = 0; i < mb->stop; i++){
+               p= getInstrPtr(mb,i);
+               if ( getModuleId(p) == sqlRef){
+                       if ( getFunctionId(p) == bindRef && getVarConstant(mb, 
getArg(p, p->argc-1)).val.ival == 0){
+                               bskt = BSKTlocate( schema = 
getVarConstant(mb,getArg(p,2)).val.sval, tbl = 
getVarConstant(mb,getArg(p,3)).val.sval);
+                               if ( bskt == 0 )
+                                       mnstr_printf(cntxt->fdout,"#input 
basket %s.%s missing\n", schema,tbl);
+                       }
+                       if ( getFunctionId(p) == appendRef){
+                               bskt = BSKTlocate( schema = 
getVarConstant(mb,getArg(p,2)).val.sval, tbl = 
getVarConstant(mb,getArg(p,3)).val.sval);
+                               if ( bskt == 0 )
+                                       mnstr_printf(cntxt->fdout,"#output 
basket %s.%s missing\n", schema,tbl);
+                       }
+               }
+       }
+}
+str PNanalyseWrapper(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       Module scope;
+       Symbol s = 0;
+       str *modnme = (str *)getArgReference(stk, pci, 1);
+       str *fcnnme = (str *)getArgReference(stk, pci, 2);
+
+       (void) mb;
+       scope = findModule(cntxt->nspace, putName(*modnme, 
(int)strlen(*modnme)));
+       if (scope)
+               s = findSymbolInModule(scope, putName(*fcnnme, 
(int)strlen(*fcnnme)));
+       if (s == NULL)
+               throw(MAL, "petrinet.analysis", "Could not find function");
+
+       PNanalysis(cntxt,s->def);
+
+       return MAL_SUCCEED;
+}
+
 str PNregistration(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        Module scope;
@@ -148,7 +196,6 @@
        (void)mb;
 
        scope = findModule(cntxt->nspace, putName(*modnme, 
(int)strlen(*modnme)));
-
        if (scope)
                s = findSymbolInModule(scope, putName(*fcnnme, 
(int)strlen(*fcnnme)));
 
diff --git a/sql/backends/monet5/datacell/sensor.mx 
b/sql/backends/monet5/datacell/sensor.mx
--- a/sql/backends/monet5/datacell/sensor.mx
+++ b/sql/backends/monet5/datacell/sensor.mx
@@ -89,7 +89,8 @@
 static int batchsize = 1;
 static int sequence = -1;
 static int columns = 1;
-static int stamp = 1; /*if (timestamp!=0) sensor sends also the tsmp */
+static int autoincrement = 1;  /* if id != 0 then we increment and sent it 
along */
+static int timestamp = 1; /*if (timestamp!=0) sensor sends also the tsmp */
 static char *host = "localhost";
 static int port = 50500;
 static int trace = 0;
@@ -109,6 +110,7 @@
        mnstr_printf(SEout, "--port=<portnr>, default=50500 \n");
        mnstr_printf(SEout, "--sensor=<name> \n");
        mnstr_printf(SEout, "--protocol=<name> udp or tcp(default) \n");
+       mnstr_printf(SEout, "--autoincrement=<number>, default=0 \n");
        mnstr_printf(SEout, "--timestamp, default=off\n");
        mnstr_printf(SEout, "--columns=<number>, default=1\n");
        mnstr_printf(SEout, "--sequence=<sequence length>, (-1=forever,>0), 
default=1\n");
@@ -158,12 +160,13 @@
        char hostname[1024];
        Sensor se = NULL;
        static SOCKET sockfd;
-       static struct option long_options[15] = {
+       static struct option long_options[16] = {
+               { "autoincrement", 0, 0, 'a' },
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to