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