Changeset: 745d1c2aba6b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/745d1c2aba6b Modified Files: gdk/gdk.h gdk/gdk_bbp.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/scripts/26_sysmon.sql Branch: strheapvacuum Log Message:
add stop vacuum command diffs (147 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -2396,11 +2396,10 @@ typedef struct gdk_callback_list { gdk_callback *head; } gdk_callback_list; -typedef gdk_return callback_func(int argc, void *argv[]); -typedef void callback_args_free_func(int argc, void *argv[]); +typedef gdk_return gdk_callback_func(int argc, void *argv[]); -gdk_return gdk_add_callback(char *name, callback_func *f, int argc, void +gdk_return gdk_add_callback(char *name, gdk_callback_func *f, int argc, void *argv[], int interval); -gdk_return gdk_remove_callback(char *, callback_args_free_func *f); +gdk_return gdk_remove_callback(char *, gdk_callback_func *f); #endif /* _GDK_H_ */ diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -4250,10 +4250,9 @@ static gdk_callback_list callback_list = /* * @- Add a callback * Adds new callback to the callback list. - * Returns the count of the callbacks in the callback_list. */ gdk_return -gdk_add_callback(char *name, callback_func *f, int argc, void *argv[], int +gdk_add_callback(char *name, gdk_callback_func *f, int argc, void *argv[], int interval) { @@ -4303,10 +4302,9 @@ gdk_add_callback(char *name, callback_fu /* * @- Remove a callback * Removes a callback from the callback list with a given name as an argument. - * Returns the count of the callbacks in the callback_list. */ gdk_return -gdk_remove_callback(char *cb_name, callback_args_free_func *argsfree) +gdk_remove_callback(char *cb_name, gdk_callback_func *argsfree) { gdk_callback *curr = callback_list.head; gdk_callback *prev = NULL; diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -5133,7 +5133,7 @@ str_column_vacuum_callback(int argc, voi return res; } -static void +static gdk_return str_column_vacuum_callback_args_free(int argc, void *argv[]) { assert(argc == 4); @@ -5141,6 +5141,7 @@ str_column_vacuum_callback_args_free(int GDKfree(argv[1]); GDKfree(argv[2]); GDKfree(argv[3]); + return GDK_SUCCEED; } str @@ -5148,7 +5149,6 @@ SQLstr_column_auto_vacuum(Client cntxt, { mvc *m = NULL; str msg = NULL; - // gdk_callback *callback = NULL; char *sname = *getArgReference_str(stk, pci, 1); char *tname = *getArgReference_str(stk, pci, 2); char *cname = *getArgReference_str(stk, pci, 3); @@ -5178,14 +5178,41 @@ SQLstr_column_auto_vacuum(Client cntxt, throw(SQL, "sql.str_column_auto_vacuum", "adding vacuum callback failed!"); } - // TODO REMOVE test the callback - // callback->func(callback->argc, callback->argv); + return MAL_SUCCEED; +} + +str +SQLstr_column_stop_vacuum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + mvc *m = NULL; + str msg = NULL; + char *sname = *getArgReference_str(stk, pci, 1); + char *tname = *getArgReference_str(stk, pci, 2); + char *cname = *getArgReference_str(stk, pci, 3); + + if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL) + return msg; + if ((msg = checkSQLContext(cntxt)) != NULL) + return msg; + + sql_schema *s = NULL; + sql_table *t = NULL; + sql_column *c = NULL; + + if((s = mvc_bind_schema(m, sname)) == NULL) + throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(3F000) "Invalid or missing schema %s",sname); + if((t = mvc_bind_table(m, s, tname)) == NULL) + throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42S02) "Invalid or missing table %s.%s",sname,tname); + if ((c = mvc_bind_column(m, t, cname)) == NULL) + throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42S22) "Column not found %s.%s",sname,tname); + + if(gdk_remove_callback("str_column_vacuum", str_column_vacuum_callback_args_free) != GDK_SUCCEED) + throw(SQL, "sql.str_column_stop_vacuum", "removing vacuum callback failed!"); return MAL_SUCCEED; } - #include "wlr.h" #include "sql_cat.h" #include "sql_rank.h" @@ -6270,6 +6297,7 @@ static mel_func sql_init_funcs[] = { #endif pattern("sql", "vacuum", SQLstr_column_vacuum, false, "vacuum a string column", args(0,3, arg("sname",str),arg("tname",str),arg("cname",str))), pattern("sql", "vacuum", SQLstr_column_auto_vacuum, false, "auto vacuum string column with interval(sec)", args(0,4, arg("sname",str),arg("tname",str),arg("cname",str),arg("interval", int))), + pattern("sql", "stop_vacuum", SQLstr_column_stop_vacuum, false, "stop auto vacuum", args(0,3, arg("sname",str),arg("tname",str),arg("cname",str))), { .imp=NULL } }; #include "mal_import.h" diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h --- a/sql/backends/monet5/sql.h +++ b/sql/backends/monet5/sql.h @@ -305,6 +305,7 @@ extern str SQLsession_prepared_statement extern str SQLunionfunc(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); extern str SQLstr_column_vacuum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); extern str SQLstr_column_auto_vacuum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +extern str SQLstr_column_stop_vacuum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str getBackendContext(Client cntxt, backend **be); diff --git a/sql/scripts/26_sysmon.sql b/sql/scripts/26_sysmon.sql --- a/sql/scripts/26_sysmon.sql +++ b/sql/scripts/26_sysmon.sql @@ -55,3 +55,6 @@ create procedure sys.vacuum(sname string create procedure sys.vacuum(sname string, tname string, cname string, interval int) external name sql.vacuum; +create procedure sys.stop_vacuum(sname string, tname string, cname string) + external name sql.stop_vacuum; + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list