Changeset: b2de397c8104 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b2de397c8104
Modified Files:
        sql/backends/monet5/iot/50_iot.sql
        sql/backends/monet5/iot/petrinet.c
        sql/backends/monet5/iot/petrinet.h
        sql/backends/monet5/iot/petrinet.mal
Branch: iot
Log Message:

Deregister continuous queries.


diffs (112 lines):

diff --git a/sql/backends/monet5/iot/50_iot.sql 
b/sql/backends/monet5/iot/50_iot.sql
--- a/sql/backends/monet5/iot/50_iot.sql
+++ b/sql/backends/monet5/iot/50_iot.sql
@@ -36,6 +36,12 @@ create procedure iot.deactivate("schema"
 create procedure iot.deactivate()
        external name iot.deactivate;
 
+create procedure iot.deregister("schema" string, name string)
+       external name iot.deregister;
+
+create procedure iot.deregister()
+       external name iot.deregister;
+
 -- resume with limited the number of scheduler before next pause
 create procedure iot.cycles(n integer)
        external name iot.cycles;
diff --git a/sql/backends/monet5/iot/petrinet.c 
b/sql/backends/monet5/iot/petrinet.c
--- a/sql/backends/monet5/iot/petrinet.c
+++ b/sql/backends/monet5/iot/petrinet.c
@@ -160,6 +160,7 @@ PNregisterInternal(Client cntxt, MalBlkP
        if (i != pnettop)
                throw(MAL, "petrinet.register", "Duplicate definition of 
transition");
 
+       memset((void*) (pnet+pnettop), 0, sizeof(PNnode));
        pnet[pnettop].modname = GDKstrdup(getModuleId(sig));
        pnet[pnettop].fcnname = GDKstrdup(getFunctionId(sig));
        snprintf(buf,IDLENGTH,"petri_%d",pnettop);
@@ -232,6 +233,46 @@ PNdeactivate(Client cntxt, MalBlkPtr mb,
        return PNstatus(cntxt, mb, stk, pci, PNREADY);
 }
 
+/*Remove a specific continuous query from the scheduler */
+str
+PNderegister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
+       str modname= NULL;
+       str fcnname= NULL;
+       int i;
+
+       (void) cntxt;
+       (void) mb;
+       PNdump(&i);
+       MT_lock_set(&iotLock);
+       if ( pci->argc == 3){
+               modname= *getArgReference_str(stk,pci,1);
+               fcnname= *getArgReference_str(stk,pci,2);
+               i = PNlocate(modname,fcnname);
+               if ( i == pnettop){
+                       MT_lock_unset(&iotLock);
+                       throw(SQL,"iot.pause","Continuous query not found");
+               }
+               GDKfree(pnet[i].modname);
+               GDKfree(pnet[i].fcnname);
+               for( ; i <pnettop-1;i++)
+                       pnet[i]= pnet[i+1];
+               memset((void*) (pnet+i), 0, sizeof(PNnode));
+               pnettop--;
+               _DEBUG_PETRINET_ mnstr_printf(PNout, "#scheduler deregistered 
%s.%s\n", modname,fcnname);
+               MT_lock_unset(&iotLock);
+               return MAL_SUCCEED;
+       }
+       for ( i = 0; i < pnettop; i++){
+               GDKfree(pnet[i].modname);
+               GDKfree(pnet[i].fcnname);
+               memset((void*) (pnet+i), 0, sizeof(PNnode));
+       }
+       pnettop = 0;
+       _DEBUG_PETRINET_ mnstr_printf(PNout, "#scheduler deregistered all\n");
+       MT_lock_unset(&iotLock);
+       return MAL_SUCCEED;
+}
+
 str
 PNcycles(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
        _DEBUG_PETRINET_ mnstr_printf(PNout, "#scheduler cycles set \n");
diff --git a/sql/backends/monet5/iot/petrinet.h 
b/sql/backends/monet5/iot/petrinet.h
--- a/sql/backends/monet5/iot/petrinet.h
+++ b/sql/backends/monet5/iot/petrinet.h
@@ -46,10 +46,10 @@
 
 iot_export str PNregisterInternal(Client cntxt, MalBlkPtr mb);
 iot_export str PNregister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+iot_export str PNderegister(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 iot_export str PNactivate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 iot_export str PNdeactivate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 iot_export str PNcycles(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
-iot_export str PNdrop(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 iot_export str PNdump(void *ret);
 
 iot_export str PNperiod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
diff --git a/sql/backends/monet5/iot/petrinet.mal 
b/sql/backends/monet5/iot/petrinet.mal
--- a/sql/backends/monet5/iot/petrinet.mal
+++ b/sql/backends/monet5/iot/petrinet.mal
@@ -42,13 +42,13 @@ pattern step(cnt:int)
 address PNstep
 comment "Limit number of petrinet steps";
 
-pattern drop()
-address PNdrop
-comment "Remove all transitions from the Petri net controller";
+pattern iot.deregister()
+address PNderegister
+comment "Remove all query from the Petri-net controller";
 
-pattern drop(mod:str,fcn:str)
-address PNdrop
-comment "Remove a transitions from the Petri net controller";
+pattern iot.deregister(mod:str,fcn:str)
+address PNderegister
+comment "Remove a query from the Petri-net controller";
 
 pattern period(t:int)
 address PNsetCycleDelay
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to