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