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

Reply via email to