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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list