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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list