Changeset: cd5fce670755 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cd5fce670755
Modified Files:
monetdb5/modules/mal/batExtensions.c
sql/backends/monet5/sql.c
Branch: default
Log Message:
Some defensive lines for non persisted tables and allocation checks
diffs (85 lines):
diff --git a/monetdb5/modules/mal/batExtensions.c
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -289,8 +289,10 @@ CMDBATvacuum(bat *r, const bat *bid)
if ((b = BATdescriptor(*bid)) == NULL)
throw(MAL, "bat.vacuum", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
- if ((bn = COLcopy(b, b->ttype, true, b->batRole)) == NULL)
+ if ((bn = COLcopy(b, b->ttype, true, b->batRole)) == NULL) {
+ BBPunfix(b->batCacheid);
throw(MAL, "bat.vacuum", GDK_EXCEPTION);
+ }
BBPkeepref(*r = bn->batCacheid);
BBPunfix(b->batCacheid);
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
@@ -5078,10 +5078,13 @@ SQLstr_column_vacuum(Client cntxt, MalBl
sql_table *t = NULL;
sql_column *c = NULL;
- if((s = mvc_bind_schema(m, sname)) == NULL)
+ if ((s = mvc_bind_schema(m, sname)) == NULL)
throw(SQL, "sql.str_column_vacuum", SQLSTATE(3F000) "Invalid or
missing schema %s",sname);
- if((t = mvc_bind_table(m, s, tname)) == NULL)
+ if ((t = mvc_bind_table(m, s, tname)) == NULL)
throw(SQL, "sql.str_column_vacuum", SQLSTATE(42S02) "Invalid or
missing table %s.%s",sname,tname);
+ if (!isTable(t))
+ throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "%s '%s' is
not persistent",
+ TABLE_TYPE_DESCRIPTION(t->type, t->properties),
t->base.name);
if ((c = mvc_bind_column(m, t, cname)) == NULL)
throw(SQL, "sql.str_column_vacuum", SQLSTATE(42S22) "Column not
found %s.%s",sname,tname);
@@ -5171,6 +5174,7 @@ SQLstr_column_auto_vacuum(Client cntxt,
char *tname = *getArgReference_str(stk, pci, 2);
char *cname = *getArgReference_str(stk, pci, 3);
int interval = *getArgReference_int(stk, pci, 4); // in sec
+ char *sname_copy = NULL, *tname_copy = NULL, *cname_copy = NULL;
if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
return msg;
@@ -5181,14 +5185,23 @@ SQLstr_column_auto_vacuum(Client cntxt,
sql_table *t = NULL;
sql_column *c = NULL;
- if((s = mvc_bind_schema(m, sname)) == NULL)
+ if ((s = mvc_bind_schema(m, sname)) == NULL)
throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(3F000)
"Invalid or missing schema %s",sname);
- if((t = mvc_bind_table(m, s, tname)) == NULL)
+ if ((t = mvc_bind_table(m, s, tname)) == NULL)
throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42S02)
"Invalid or missing table %s.%s",sname,tname);
+ if (!isTable(t))
+ throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42000) "%s
'%s' is not persistent",
+ TABLE_TYPE_DESCRIPTION(t->type, t->properties),
t->base.name);
if ((c = mvc_bind_column(m, t, cname)) == NULL)
throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42S22)
"Column not found %s.%s",sname,tname);
- void *argv[4] = {m->store, GDKstrdup(sname), GDKstrdup(tname),
GDKstrdup(cname)};
+ if (!(sname_copy = GDKstrdup(sname)) || !(tname_copy =
GDKstrdup(tname)) || !(cname_copy = GDKstrdup(cname))) {
+ GDKfree(sname_copy);
+ GDKfree(tname_copy);
+ GDKfree(cname_copy);
+ throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
+ void *argv[4] = {m->store, sname_copy, tname_copy, cname_copy};
gdk_return res;
if((res = gdk_add_callback("str_column_vacuum",
str_column_vacuum_callback, 4, argv, interval)) != GDK_SUCCEED) {
@@ -5217,10 +5230,13 @@ SQLstr_column_stop_vacuum(Client cntxt,
sql_table *t = NULL;
sql_column *c = NULL;
- if((s = mvc_bind_schema(m, sname)) == 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)
+ 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 (!isTable(t))
+ throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42000) "%s
'%s' is not persistent",
+ TABLE_TYPE_DESCRIPTION(t->type, t->properties),
t->base.name);
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);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list