Changeset: 078abbc7ba73 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=078abbc7ba73
Modified Files:
        sql/backends/monet5/50_cquery.mal
        sql/backends/monet5/sql_cquery.c
        sql/backends/monet5/sql_cquery.h
        sql/scripts/50_cquery.sql
Branch: timetrails
Log Message:

Add continuous query status overview.


diffs (111 lines):

diff --git a/sql/backends/monet5/50_cquery.mal 
b/sql/backends/monet5/50_cquery.mal
--- a/sql/backends/monet5/50_cquery.mal
+++ b/sql/backends/monet5/50_cquery.mal
@@ -73,6 +73,10 @@ address CQwindow
 comment "Set the input window size constraints";
 
 # continuous query status analysis
+pattern status() 
(tick:bat[:timestamp],mod:bat[:str],fcn:bat[:str],state:bat[:str],error:bat[:str])
+address CQstatus
+comment "Status of all registered continuous queries";
+
 pattern log() (tick:bat[:timestamp],mod:bat[:str],fcn:bat[:str], 
time:bat[:lng],error:bat[:str])
 address CQlog
 comment "The log of all CQ executions";
diff --git a/sql/backends/monet5/sql_cquery.c b/sql/backends/monet5/sql_cquery.c
--- a/sql/backends/monet5/sql_cquery.c
+++ b/sql/backends/monet5/sql_cquery.c
@@ -218,9 +218,69 @@ CQlog( Client cntxt, MalBlkPtr mb, MalSt
        BBPkeepref(*errorret = errbat->batCacheid);
        return MAL_SUCCEED;
 wrapup:
+       if( tickbat) BBPunfix(tickbat->batCacheid);
+       if( modbat) BBPunfix(modbat->batCacheid);
+       if( fcnbat) BBPunfix(fcnbat->batCacheid);
+       if( timebat) BBPunfix(timebat->batCacheid);
+       if( errbat) BBPunfix(errbat->batCacheid);
        return MAL_SUCCEED;
 }
 
+str
+CQstatus( Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
+       BAT *tickbat, *modbat, *fcnbat, *statusbat, *errbat;
+       bat *tickret, *modret, *fcnret, *statusret, *errorret;
+       int idx;
+       str msg= MAL_SUCCEED;
+       
+       (void) cntxt;
+       (void) mb;
+
+       tickret = getArgReference_bat(stk, pci, 0);
+       modret = getArgReference_bat(stk, pci, 1);
+       fcnret = getArgReference_bat(stk, pci, 2);
+       statusret = getArgReference_bat(stk, pci, 3);
+       errorret = getArgReference_bat(stk, pci, 4);
+
+       tickbat = COLnew(0, TYPE_timestamp, 0, TRANSIENT);
+       if(tickbat == NULL)
+               goto wrapup;
+       modbat = COLnew(0, TYPE_str, 0, TRANSIENT);
+       if(modbat == NULL)
+               goto wrapup;
+       fcnbat = COLnew(0, TYPE_str, 0, TRANSIENT);
+       if(fcnbat == NULL)
+               goto wrapup;
+       statusbat = COLnew(0, TYPE_str, 0, TRANSIENT);
+       if(statusbat == NULL)
+               goto wrapup;
+       errbat = COLnew(0, TYPE_str, 0, TRANSIENT);
+       if(errbat == NULL)
+               goto wrapup;
+
+       for( idx = 0; msg == MAL_SUCCEED && idx < pnettop; idx++)
+               if( BUNappend(tickbat, &pnet[idx].seen,FALSE) != GDK_SUCCEED ||
+                       BUNappend(modbat, pnet[idx].mod,FALSE) != GDK_SUCCEED ||
+                       BUNappend(fcnbat, pnet[idx].fcn,FALSE) != GDK_SUCCEED ||
+                       BUNappend(statusbat, 
statusname[pnet[idx].status],FALSE) != GDK_SUCCEED ||
+                       BUNappend(errbat, (pnet[idx].error ? 
pnet[idx].error:""),FALSE) != GDK_SUCCEED )
+                               msg = 
createException(SQL,"cquery.status",MAL_MALLOC_FAIL);
+
+       BBPkeepref(*tickret = tickbat->batCacheid);
+       BBPkeepref(*modret = modbat->batCacheid);
+       BBPkeepref(*fcnret = fcnbat->batCacheid);
+       BBPkeepref(*statusret = statusbat->batCacheid);
+       BBPkeepref(*errorret = errbat->batCacheid);
+       return msg;
+wrapup:
+       if( tickbat) BBPunfix(tickbat->batCacheid);
+       if( modbat) BBPunfix(modbat->batCacheid);
+       if( fcnbat) BBPunfix(fcnbat->batCacheid);
+       if( statusbat) BBPunfix(statusbat->batCacheid);
+       if( errbat) BBPunfix(errbat->batCacheid);
+       throw(SQL,"cquery.status",MAL_MALLOC_FAIL);
+}
+
 static int
 CQlocate(str modname, str fcnname)
 {
diff --git a/sql/backends/monet5/sql_cquery.h b/sql/backends/monet5/sql_cquery.h
--- a/sql/backends/monet5/sql_cquery.h
+++ b/sql/backends/monet5/sql_cquery.h
@@ -47,5 +47,6 @@ sql5_export str CQheartbeat(Client cntxt
 sql5_export str CQtumble(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str CQwindow(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str CQlog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+sql5_export str CQstatus(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 #endif
 
diff --git a/sql/scripts/50_cquery.sql b/sql/scripts/50_cquery.sql
--- a/sql/scripts/50_cquery.sql
+++ b/sql/scripts/50_cquery.sql
@@ -80,6 +80,10 @@ begin
  return select "schema","function", count(*), sum(time) from cquery.log() 
group by "schema","function";
 end;
 
+create function cquery.status()
+ returns table(tick timestamp,  "schema" string, "function" string, state 
string, errors string)
+ external name cquery.status;
+
 create function cquery.show("schema" string, qryname string)
 returns string
 external name cquery.show;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to