Changeset: 6b8ccab2b97a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6b8ccab2b97a Modified Files: sql/backends/monet5/sql_cat.c sql/server/rel_psm.c sql/server/rel_schema.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/storage/sql_storage.h sql/storage/store.c Branch: Mar2018 Log Message:
Allocation checks in storage diffs (truncated from 665 to 300 lines): diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -351,7 +351,8 @@ drop_key(mvc *sql, char *sname, char *kn throw(SQL,"sql.drop_key", SQLSTATE(42000) "ALTER TABLE: no such constraint '%s'", kname); if (!drop_action && mvc_check_dependency(sql, key->base.id, KEY_DEPENDENCY, NULL)) throw(SQL,"sql.drop_key", SQLSTATE(42000) "ALTER TABLE: cannot drop constraint '%s': there are database objects which depend on it", key->base.name); - mvc_drop_key(sql, ss, key, drop_action); + if(mvc_drop_key(sql, ss, key, drop_action)) + throw(SQL,"sql.drop_key", SQLSTATE(HY001) MAL_MALLOC_FAIL); return MAL_SUCCEED; } @@ -381,7 +382,8 @@ drop_index(Client cntxt, mvc *sql, char IMPSdestroy(b); BBPunfix(b->batCacheid); } - mvc_drop_idx(sql, s, i); + if(mvc_drop_idx(sql, s, i)) + throw(SQL,"sql.drop_index", SQLSTATE(HY001) MAL_MALLOC_FAIL); } return NULL; } @@ -477,13 +479,15 @@ drop_func(mvc *sql, char *sname, char *n if (!action && mvc_check_dependency(sql, func->base.id, !IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL)) throw(SQL,"sql.drop_func", SQLSTATE(42000) "DROP %s%s: there are database objects dependent on %s%s %s;", KF, F, kf, f, func->base.name); - mvc_drop_func(sql, s, func, action); + if(mvc_drop_func(sql, s, func, action)) + throw(SQL,"sql.drop_func", SQLSTATE(HY001) MAL_MALLOC_FAIL); } } else if(fid == -2) { //if exists option return MAL_SUCCEED; } else { //fid == -1 node *n = NULL; list *list_func = schema_bind_func(sql, s, name, type); + int res; if (!mvc_schema_privs(sql, s)) { list_destroy(list_func); @@ -497,8 +501,10 @@ drop_func(mvc *sql, char *sname, char *n throw(SQL,"sql.drop_func", SQLSTATE(42000) "DROP %s%s: there are database objects dependent on %s%s %s;", KF, F, kf, f, func->base.name); } } - mvc_drop_all_func(sql, s, list_func, action); + res = mvc_drop_all_func(sql, s, list_func, action); list_destroy(list_func); + if(res) + throw(SQL,"sql.drop_func", SQLSTATE(HY001) MAL_MALLOC_FAIL); } return MAL_SUCCEED; } @@ -598,7 +604,8 @@ alter_table(Client cntxt, mvc *sql, char /* propagate alter table .. drop column */ sql_column *c = n->data; sql_column *nc = mvc_bind_column(sql, nt, c->base.name); - mvc_drop_column(sql, nt, nc, c->drop_action); + if(mvc_drop_column(sql, nt, nc, c->drop_action)) + throw(SQL,"sql.alter_table", SQLSTATE(HY001) MAL_MALLOC_FAIL); } /* check for changes on current cols */ for (n = t->columns.set->h; n != t->columns.nelm; n = n->next) { @@ -650,7 +657,8 @@ alter_table(Client cntxt, mvc *sql, char for (n = t->idxs.dset->h; n; n = n->next) { sql_idx *i = n->data; sql_idx *ni = mvc_bind_idx(sql, s, i->base.name); - mvc_drop_idx(sql, s, ni); + if(mvc_drop_idx(sql, s, ni)) + throw(SQL,"sql.alter_table", SQLSTATE(HY001) MAL_MALLOC_FAIL); } /* alter add index */ for (n = t->idxs.nelm; n; n = n->next) { @@ -668,10 +676,13 @@ alter_table(Client cntxt, mvc *sql, char } } if (i->type == imprints_idx) { + gdk_return r; sql_kc *ic = i->columns->h->data; BAT *b = mvc_bind(sql, nt->s->base.name, nt->base.name, ic->c->base.name, 0); - BATimprints(b); + r = BATimprints(b); BBPunfix(b->batCacheid); + if (r != GDK_SUCCEED) + throw(SQL, "sql.alter_table", GDK_EXCEPTION); } mvc_copy_idx(sql, nt, i); } @@ -682,8 +693,10 @@ alter_table(Client cntxt, mvc *sql, char for (n = t->keys.dset->h; n; n = n->next) { sql_key *k = n->data; sql_key *nk = mvc_bind_key(sql, s, k->base.name); - if (nk) - mvc_drop_key(sql, s, nk, k->drop_action); + if (nk) { + if(mvc_drop_key(sql, s, nk, k->drop_action)) + throw(SQL,"sql.alter_table", SQLSTATE(HY001) MAL_MALLOC_FAIL); + } } /* alter add key */ for (n = t->keys.nelm; n; n = n->next) { @@ -708,8 +721,10 @@ UPGdrop_func(Client cntxt, MalBlkPtr mb, return msg; func = sql_trans_find_func(sql->session->tr, id); - if (func) - mvc_drop_func(sql, func->s, func, 0); + if (func) { + if(mvc_drop_func(sql, func->s, func, 0)) + throw(SQL, "sql.drop_func", SQLSTATE(HY001) MAL_MALLOC_FAIL); + } return msg; } @@ -885,7 +900,8 @@ SQLdrop_schema(Client cntxt, MalBlkPtr m !list_empty(s->funcs.set) || !list_empty(s->seqs.set))) { throw(SQL,"sql.drop_schema",SQLSTATE(2BM37) "DROP SCHEMA: unable to drop schema '%s' (there are database objects which depend on it)", sname); } else { - mvc_drop_schema(sql, s, action); + if(mvc_drop_schema(sql, s, action)) + throw(SQL,"sql.drop_schema", SQLSTATE(HY001) MAL_MALLOC_FAIL); } return msg; } diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c --- a/sql/server/rel_psm.c +++ b/sql/server/rel_psm.c @@ -815,7 +815,8 @@ rel_create_func(mvc *sql, dlist *qname, return sql_error(sql, 02, SQLSTATE(42000) "CREATE OR REPLACE %s%s: not allowed to replace system %s%s %s;", KF, F, kf, fn, func->base.name); } - mvc_drop_func(sql, s, func, action); + if(mvc_drop_func(sql, s, func, action)) + return sql_error(sql, 02, SQLSTATE(HY001) MAL_MALLOC_FAIL); sf = NULL; } else { if (params) { diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -880,7 +880,10 @@ table_element(mvc *sql, symbol *s, sql_s } } } - mvc_drop_column(sql, t, col, drop_action); + if(mvc_drop_column(sql, t, col, drop_action)) { + sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE: %s\n", MAL_MALLOC_FAIL); + return SQL_ERR; + } } break; case SQL_DROP_CONSTRAINT: assert(0); diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -991,22 +991,22 @@ mvc_create_func(mvc *sql, sql_allocator return f; } -void +int mvc_drop_func(mvc *m, sql_schema *s, sql_func *f, int drop_action) { if (mvc_debug) fprintf(stderr, "#mvc_drop_func %s %s\n", s->base.name, f->base.name); - sql_trans_drop_func(m->session->tr, s, f->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); + return sql_trans_drop_func(m->session->tr, s, f->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); } -void +int mvc_drop_all_func(mvc *m, sql_schema *s, list *list_func, int drop_action) { if (mvc_debug) fprintf(stderr, "#mvc_drop_all_func %s %s\n", s->base.name, ((sql_func *) list_func->h->data)->base.name); - sql_trans_drop_all_func(m->session->tr, s, list_func, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); + return sql_trans_drop_all_func(m->session->tr, s, list_func, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); } sql_schema * @@ -1021,12 +1021,12 @@ mvc_create_schema(mvc *m, const char *na return s; } -void +int mvc_drop_schema(mvc *m, sql_schema * s, int drop_action) { if (mvc_debug) fprintf(stderr, "#mvc_drop_schema %s\n", s->base.name); - sql_trans_drop_schema(m->session->tr, s->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); + return sql_trans_drop_schema(m->session->tr, s->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); } sql_ukey * @@ -1080,15 +1080,16 @@ mvc_create_fkc(mvc *m, sql_fkey *fk, sql return sql_trans_create_fkc(m->session->tr, fk, c); } -void +int mvc_drop_key(mvc *m, sql_schema *s, sql_key *k, int drop_action) { if (mvc_debug) fprintf(stderr, "#mvc_drop_key %s %s\n", s->base.name, k->base.name); - if (k->t->persistence == SQL_DECLARED_TABLE) + if (k->t->persistence == SQL_DECLARED_TABLE) { drop_sql_key(k->t, k->base.id, drop_action); - else - sql_trans_drop_key(m->session->tr, s, k->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); + return 0; + } else + return sql_trans_drop_key(m->session->tr, s, k->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); } sql_idx * @@ -1117,17 +1118,18 @@ mvc_create_ic(mvc *m, sql_idx * i, sql_c return sql_trans_create_ic(m->session->tr, i, c); } -void +int mvc_drop_idx(mvc *m, sql_schema *s, sql_idx *i) { if (mvc_debug) fprintf(stderr, "#mvc_drop_idx %s %s\n", s->base.name, i->base.name); - if (i->t->persistence == SQL_DECLARED_TABLE) + if (i->t->persistence == SQL_DECLARED_TABLE) { /* declared tables should not end up in the catalog */ drop_sql_idx(i->t, i->base.id); - else - sql_trans_drop_idx(m->session->tr, s, i->base.id, DROP_RESTRICT); + return 0; + } else + return sql_trans_drop_idx(m->session->tr, s, i->base.id, DROP_RESTRICT); } sql_trigger * @@ -1251,15 +1253,16 @@ mvc_create_column(mvc *m, sql_table *t, return sql_trans_create_column(m->session->tr, t, name, tpe); } -void +int mvc_drop_column(mvc *m, sql_table *t, sql_column *col, int drop_action) { if (mvc_debug) fprintf(stderr, "#mvc_drop_column %s %s\n", t->base.name, col->base.name); - if (col->t->persistence == SQL_DECLARED_TABLE) + if (col->t->persistence == SQL_DECLARED_TABLE) { drop_sql_column(t, col->base.id, drop_action); - else - sql_trans_drop_column(m->session->tr, t, col->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); + return 0; + } else + return sql_trans_drop_column(m->session->tr, t, col->base.id, drop_action ? DROP_CASCADE_START : DROP_RESTRICT); } void diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h --- a/sql/server/sql_mvc.h +++ b/sql/server/sql_mvc.h @@ -174,10 +174,10 @@ extern sql_type *mvc_create_type(mvc *sq extern int mvc_drop_type(mvc *sql, sql_schema *s, sql_type *t, int drop_action); extern sql_func *mvc_create_func(mvc *sql, sql_allocator *sa, sql_schema *s, const char *name, list *args, list *res, int type, int lang, const char *mod, const char *impl, const char *query, bit varres, bit vararg); -extern void mvc_drop_func(mvc *c, sql_schema *s, sql_func * func, int drop_action); -extern void mvc_drop_all_func(mvc *c, sql_schema *s, list *list_func, int drop_action); +extern int mvc_drop_func(mvc *c, sql_schema *s, sql_func * func, int drop_action); +extern int mvc_drop_all_func(mvc *c, sql_schema *s, list *list_func, int drop_action); -extern void mvc_drop_schema(mvc *c, sql_schema *s, int drop_action); +extern int mvc_drop_schema(mvc *c, sql_schema *s, int drop_action); extern sql_schema *mvc_create_schema(mvc *m, const char *name, int auth_id, int owner); extern BUN mvc_clear_table(mvc *m, sql_table *t); extern void mvc_drop_table(mvc *c, sql_schema *s, sql_table * t, int drop_action); @@ -185,7 +185,7 @@ extern sql_table *mvc_create_table(mvc * extern sql_table *mvc_create_view(mvc *c, sql_schema *s, const char *name, int persistence, const char *sql, bit system); extern sql_table *mvc_create_remote(mvc *c, sql_schema *s, const char *name, int persistence, const char *loc); -extern void mvc_drop_column(mvc *c, sql_table *t, sql_column *col, int drop_action); +extern int mvc_drop_column(mvc *c, sql_table *t, sql_column *col, int drop_action); extern sql_column *mvc_create_column(mvc *c, sql_table *t, const char *name, sql_subtype *type); extern sql_column *mvc_create_column_(mvc *c, sql_table *t, const char *name, const char *type, int digits); extern sql_column *mvc_null(mvc *c, sql_column *col, int flag); @@ -201,11 +201,11 @@ extern sql_fkey *mvc_create_fkey(mvc *m, extern sql_key *mvc_create_kc(mvc *m, sql_key *k, sql_column *c); extern sql_fkey *mvc_create_fkc(mvc *m, sql_fkey *fk, sql_column *c); -extern void mvc_drop_key(mvc *c, sql_schema *s, sql_key *key, int drop_action); +extern int mvc_drop_key(mvc *c, sql_schema *s, sql_key *key, int drop_action); extern sql_idx *mvc_create_idx(mvc *m, sql_table *t, const char *iname, idx_type it); extern sql_idx *mvc_create_ic(mvc *m, sql_idx * i, sql_column *c); -extern void mvc_drop_idx(mvc *c, sql_schema *s, sql_idx * i); +extern int mvc_drop_idx(mvc *c, sql_schema *s, sql_idx * i); extern sql_trigger * mvc_create_trigger(mvc *m, sql_table *t, const char *name, sht time, sht orientation, sht event, const char *old_name, const char *new_name, const char *condition, const char *statement ); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list