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

Reply via email to