Changeset: 82a80848b1d3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=82a80848b1d3
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:

More checks


diffs (294 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
@@ -244,7 +244,8 @@ drop_trigger(mvc *sql, char *sname, char
                        return MAL_SUCCEED;
                throw(SQL,"sql.drop_trigger", SQLSTATE(3F000) "DROP TRIGGER: 
unknown trigger %s\n", tname);
        }
-       mvc_drop_trigger(sql, s, tri);
+       if(mvc_drop_trigger(sql, s, tri))
+               throw(SQL,"sql.drop_trigger", SQLSTATE(HY001) MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
 }
 
@@ -299,7 +300,8 @@ drop_table(mvc *sql, char *sname, char *
        if (!drop_action && mvc_check_dependency(sql, t->base.id, 
TABLE_DEPENDENCY, NULL))
                throw (SQL,"sql.droptable",SQLSTATE(42000) "DROP TABLE: unable 
to drop table %s (there are database objects which depend on it)\n", 
t->base.name);
 
-       mvc_drop_table(sql, s, t, drop_action);
+       if(mvc_drop_table(sql, s, t, drop_action))
+               throw(SQL,"sql.droptable", SQLSTATE(HY001) MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
 }
 
@@ -330,7 +332,8 @@ drop_view(mvc *sql, char *sname, char *t
        } else if (!drop_action && mvc_check_dependency(sql, t->base.id, 
VIEW_DEPENDENCY, NULL)) {
                throw(SQL,"sql.drop_view", SQLSTATE(42000) "DROP VIEW: cannot 
drop view '%s', there are database objects which depend on it", t->base.name);
        } else {
-               mvc_drop_table(sql, ss, t, drop_action);
+               if(mvc_drop_table(sql, ss, t, drop_action))
+                       throw(SQL,"sql.drop_view", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                return MAL_SUCCEED;
        }
 }
@@ -373,14 +376,18 @@ drop_index(Client cntxt, mvc *sql, char 
                if (i->type == ordered_idx) {
                        sql_kc *ic = i->columns->h->data;
                        BAT *b = mvc_bind(sql, s->base.name, 
ic->c->t->base.name, ic->c->base.name, 0);
-                       OIDXdropImplementation(cntxt, b);
-                       BBPunfix(b->batCacheid);
+                       if(b) {
+                               OIDXdropImplementation(cntxt, b);
+                               BBPunfix(b->batCacheid);
+                       }
                }
                if (i->type == imprints_idx) {
                        sql_kc *ic = i->columns->h->data;
                        BAT *b = mvc_bind(sql, s->base.name, 
ic->c->t->base.name, ic->c->base.name, 0);
-                       IMPSdestroy(b);
-                       BBPunfix(b->batCacheid);
+                       if(b) {
+                               IMPSdestroy(b);
+                               BBPunfix(b->batCacheid);
+                       }
                }
                if(mvc_drop_idx(sql, s, i))
                        throw(SQL,"sql.drop_index", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
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
@@ -1211,7 +1211,8 @@ create_trigger(mvc *sql, dlist *qname, i
                return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: cannot 
create trigger on view '%s'", base, tname);
        if (create && (st = mvc_bind_trigger(sql, ss, triggername)) != NULL) {
                if (replace) {
-                       mvc_drop_trigger(sql, ss, st);
+                       if(mvc_drop_trigger(sql, ss, st))
+                               return sql_error(sql, 02, SQLSTATE(HY001) "%s 
TRIGGER: %s", base, MAL_MALLOC_FAIL);
                } else {
                        return sql_error(sql, 02, SQLSTATE(42000) "%s TRIGGER: 
name '%s' already in use", base, triggername);
                }
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
@@ -1049,7 +1049,8 @@ rel_create_view(mvc *sql, sql_schema *ss
                        } else if (mvc_check_dependency(sql, t->base.id, 
VIEW_DEPENDENCY, NULL)) {
                                return sql_error(sql, 02, SQLSTATE(42000) "%s 
VIEW: cannot replace view '%s', there are database objects which depend on it", 
base, t->base.name);
                        } else {
-                               mvc_drop_table(sql, s, t, 0);
+                               if(mvc_drop_table(sql, s, t, 0))
+                                       return sql_error(sql, 02, 
SQLSTATE(HY001) "%s VIEW: %s", base, MAL_MALLOC_FAIL);
                        }
                } else {
                        return sql_error(sql, 02, SQLSTATE(42S01) "%s VIEW: 
name '%s' already in use", base, name);
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
@@ -1152,13 +1152,13 @@ mvc_create_tc(mvc *m, sql_trigger * i, s
        return i;
 }
 
-void
+int
 mvc_drop_trigger(mvc *m, sql_schema *s, sql_trigger *tri)
 {
        if (mvc_debug)
                fprintf(stderr, "#mvc_drop_trigger %s %s\n", s->base.name, 
tri->base.name);
 
-       sql_trans_drop_trigger(m->session->tr, s, tri->base.id, DROP_RESTRICT);
+       return sql_trans_drop_trigger(m->session->tr, s, tri->base.id, 
DROP_RESTRICT);
 }
 
 
@@ -1215,13 +1215,13 @@ mvc_create_remote(mvc *m, sql_schema *s,
        return t;
 }
 
-void
+int
 mvc_drop_table(mvc *m, sql_schema *s, sql_table *t, int drop_action)
 {
        if (mvc_debug)
                fprintf(stderr, "#mvc_drop_table %s %s\n", s->base.name, 
t->base.name);
 
-       sql_trans_drop_table(m->session->tr, s, t->base.id, drop_action ? 
DROP_CASCADE_START : DROP_RESTRICT);
+       return sql_trans_drop_table(m->session->tr, s, t->base.id, drop_action 
? DROP_CASCADE_START : DROP_RESTRICT);
 }
 
 BUN
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
@@ -180,7 +180,7 @@ extern int mvc_drop_all_func(mvc *c, sql
 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);
+extern int mvc_drop_table(mvc *c, sql_schema *s, sql_table * t, int 
drop_action);
 extern sql_table *mvc_create_table(mvc *c, sql_schema *s, const char *name, 
int tt, bit system, int persistence, int commit_action, int sz);
 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);
@@ -209,7 +209,7 @@ extern int mvc_drop_idx(mvc *c, sql_sche
 
 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 );
 extern sql_trigger * mvc_create_tc(mvc *m, sql_trigger * i, sql_column *c /*, 
extra options such as trunc */ );
-extern void mvc_drop_trigger(mvc *m, sql_schema *s, sql_trigger * tri);
+extern int mvc_drop_trigger(mvc *m, sql_schema *s, sql_trigger * tri);
 
 
 /*dependency control*/
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -361,7 +361,7 @@ extern sql_table *sql_trans_create_table
 extern sql_table *sql_trans_add_table(sql_trans *tr, sql_table *mt, sql_table 
*pt);
 extern sql_table *sql_trans_del_table(sql_trans *tr, sql_table *mt, sql_table 
*pt, int drop_action);
 
-extern void sql_trans_drop_table(sql_trans *tr, sql_schema *s, int id, int 
drop_action);
+extern int sql_trans_drop_table(sql_trans *tr, sql_schema *s, int id, int 
drop_action);
 extern BUN sql_trans_clear_table(sql_trans *tr, sql_table *t);
 extern sql_table *sql_trans_alter_access(sql_trans *tr, sql_table *t, sht 
access);
 
@@ -388,7 +388,7 @@ extern int sql_trans_drop_idx(sql_trans 
 
 extern sql_trigger * sql_trans_create_trigger(sql_trans *tr, 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 );
 extern sql_trigger * sql_trans_create_tc(sql_trans *tr, sql_trigger * i, 
sql_column *c /*, extra options such as trunc */ );
-extern void sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, int id, int 
drop_action);
+extern int sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, int id, int 
drop_action);
 
 extern sql_sequence *create_sql_sequence(sql_allocator *sa, sql_schema *s, 
const char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle 
);
 extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s, 
const char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit 
cycle, bit bedropped );
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3159,7 +3159,7 @@ conditional_table_dup(sql_trans *tr, int
                if (ot->commit_action == CA_DELETE) {
                        sql_trans_clear_table(tr, ot);
                } else if (ot->commit_action == CA_DROP) {
-                       sql_trans_drop_table(tr, ot->s, ot->base.id, 
DROP_RESTRICT);
+                       (void) sql_trans_drop_table(tr, ot->s, ot->base.id, 
DROP_RESTRICT);
                }
        }
        return NULL;
@@ -3184,7 +3184,8 @@ rollforward_update_schema(sql_trans *tr,
                                    t->commit_action == CA_DELETE) {
                                        sql_trans_clear_table(tr, t);
                                } else if (t->commit_action == CA_DROP) {
-                                       sql_trans_drop_table(tr, t->s, 
t->base.id, DROP_RESTRICT);
+                                       if(sql_trans_drop_table(tr, t->s, 
t->base.id, DROP_RESTRICT))
+                                               ok = LOG_ERR;
                                }
                                n = nxt;
                        }
@@ -3468,7 +3469,8 @@ reset_schema(sql_trans *tr, sql_schema *
                                    t->commit_action == CA_DELETE) {
                                        sql_trans_clear_table(tr, t);
                                } else if (t->commit_action == CA_DROP) {
-                                       sql_trans_drop_table(tr, t->s, 
t->base.id, DROP_RESTRICT);
+                                       if(sql_trans_drop_table(tr, t->s, 
t->base.id, DROP_RESTRICT))
+                                               ok = LOG_ERR;
                                }
                                n = nxt;
                        }
@@ -3647,7 +3649,7 @@ sql_trans_drop_all_dependencies(sql_tran
                                                        (void) 
sql_trans_drop_schema(tr, dep_id, DROP_CASCADE);
                                                        break;
                                case TABLE_DEPENDENCY :
-                                                       
sql_trans_drop_table(tr, s, dep_id, DROP_CASCADE);
+                                                       (void) 
sql_trans_drop_table(tr, s, dep_id, DROP_CASCADE);
                                                        break;
                                case COLUMN_DEPENDENCY :
                                                        t_id = 
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY);
@@ -3656,11 +3658,11 @@ sql_trans_drop_all_dependencies(sql_tran
                                                        t = NULL;
                                                        break;
                                case VIEW_DEPENDENCY :
-                                                       
sql_trans_drop_table(tr, s, dep_id, DROP_CASCADE );
+                                                       (void) 
sql_trans_drop_table(tr, s, dep_id, DROP_CASCADE );
                                                        break;
                                case TRIGGER_DEPENDENCY :
-                                                       
sql_trans_drop_trigger(tr, s, dep_id, DROP_CASCADE);
-                                                               break;
+                                                       (void) 
sql_trans_drop_trigger(tr, s, dep_id, DROP_CASCADE);
+                                                       break;
                                case KEY_DEPENDENCY :
                                                        (void) 
sql_trans_drop_key(tr, s, dep_id, DROP_CASCADE);
                                                        break;
@@ -4591,7 +4593,7 @@ create_sql_column(sql_allocator *sa, sql
        return col;
 }
 
-void
+int
 sql_trans_drop_table(sql_trans *tr, sql_schema *s, int id, int drop_action)
 {
        node *n = find_sql_table_node(s, id);
@@ -4599,14 +4601,20 @@ sql_trans_drop_table(sql_trans *tr, sql_
 
        if ((drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) 
&& 
            tr->dropped && list_find_id(tr->dropped, t->base.id))
-               return;
+               return 0;
 
        if (drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) {
-               // FIXME unchecked_malloc MNEW can return NULL
                int *local_id = MNEW(int);
-
-               if (! tr->dropped) 
+               if(!local_id)
+                       return -1;
+
+               if (! tr->dropped) {
                        tr->dropped = list_create((fdestroy) GDKfree);
+                       if(!tr->dropped) {
+                               _DELETE(local_id);
+                               return -1;
+                       }
+               }
                *local_id = t->base.id;
                list_append(tr->dropped, local_id);
        }
@@ -4623,6 +4631,7 @@ sql_trans_drop_table(sql_trans *tr, sql_
                list_destroy(tr->dropped);
                tr->dropped = NULL;
        }
+       return 0;
 }
 
 BUN
@@ -5381,18 +5390,24 @@ sql_trans_create_tc(sql_trans *tr, sql_t
        return i;
 }
 
-void
+int
 sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, int id, int drop_action)
 {
        node *n = list_find_base_id(s->triggers, id);
        sql_trigger *i = n->data;
        
        if (drop_action == DROP_CASCADE_START || drop_action == DROP_CASCADE) {
-               // FIXME unchecked_malloc MNEW can return NULL
                int *local_id = MNEW(int);
-
-               if (! tr->dropped) 
+               if(!local_id)
+                       return -1;
+
+               if (! tr->dropped) {
                        tr->dropped = list_create((fdestroy) GDKfree);
+                       if(!tr->dropped) {
+                               _DELETE(local_id);
+                               return -1;
+                       }
+               }
                *local_id = i->base.id;
                list_append(tr->dropped, local_id);
        }
@@ -5409,6 +5424,7 @@ sql_trans_drop_trigger(sql_trans *tr, sq
                list_destroy(tr->dropped);
                tr->dropped = NULL;
        }
+       return 0;
 }
 
 sql_sequence *
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to