Changeset: 5ff7e5c014a1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ff7e5c014a1 Modified Files: sql/storage/store.c Branch: default Log Message:
drop a tables triggers directly diffs (147 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3696,7 +3696,7 @@ sql_trans_drop_all_dependencies(sql_tran case TABLE_DEPENDENCY: case VIEW_DEPENDENCY: { sql_table *t = sql_trans_find_table(tr, dep_id); - if (sql_trans_drop_table_id(tr, t->s, dep_id, DROP_CASCADE)) + if (t && sql_trans_drop_table_id(tr, t->s, dep_id, DROP_CASCADE)) return DEPENDENCY_CHECK_ERROR; } break; case COLUMN_DEPENDENCY: { @@ -3708,20 +3708,20 @@ sql_trans_drop_all_dependencies(sql_tran } break; case TRIGGER_DEPENDENCY: { sql_trigger *t = sql_trans_find_trigger(tr, dep_id); - if (!list_find_id(tr->dropped, t->t->base.id) && /* table not jet dropped */ + if (t && !list_find_id(tr->dropped, t->t->base.id) && /* table not jet dropped */ sql_trans_drop_trigger(tr, t->t->s, dep_id, DROP_CASCADE)) return DEPENDENCY_CHECK_ERROR; } break; case KEY_DEPENDENCY: case FKEY_DEPENDENCY: { sql_key *k = sql_trans_find_key(tr, dep_id); - if (!list_find_id(tr->dropped, k->t->base.id) && /* table not jet dropped */ + if (k && !list_find_id(tr->dropped, k->t->base.id) && /* table not jet dropped */ sql_trans_drop_key(tr, k->t->s, dep_id, DROP_CASCADE)) return DEPENDENCY_CHECK_ERROR; } break; case INDEX_DEPENDENCY: { sql_idx *i = sql_trans_find_idx(tr, dep_id); - if (!list_find_id(tr->dropped, i->t->base.id) && /* table not jet dropped */ + if (i && !list_find_id(tr->dropped, i->t->base.id) && /* table not jet dropped */ sql_trans_drop_idx(tr, i->t->s, dep_id, DROP_CASCADE)) return DEPENDENCY_CHECK_ERROR; } break; @@ -3888,34 +3888,6 @@ sys_drop_tc(sql_trans *tr, sql_trigger * } static int -sys_drop_trigger(sql_trans *tr, sql_trigger * i) -{ - sqlstore *store = tr->store; - node *n; - sql_schema *syss = find_sql_schema(tr, isGlobal(i->t)?"sys":"tmp"); - sql_table *systrigger = find_sql_table(tr, syss, "triggers"); - oid rid = store->table_api.column_find_row(tr, find_sql_column(systrigger, "id"), &i->base.id, NULL); - - if (is_oid_nil(rid)) - return -1; - if (store->table_api.table_delete(tr, systrigger, rid)) - return -2; - - for (n = i->columns->h; n; n = n->next) { - sql_kc *tc = n->data; - - if (sys_drop_tc(tr, i, tc)) - return -3; - } - /* remove trigger from schema */ - if (isGlobal(i->t)) - if (os_del(i->t->s->triggers, tr, i->base.name, dup_base(&i->base))) - return -4; - sql_trans_drop_dependencies(tr, i->base.id); - return 0; -} - -static int sys_drop_sequence(sql_trans *tr, sql_sequence * seq, int drop_action) { sqlstore *store = tr->store; @@ -4005,6 +3977,34 @@ sql_trans_drop_obj_priv(sql_trans *tr, s } static int +sys_drop_trigger(sql_trans *tr, sql_trigger * i) +{ + sqlstore *store = tr->store; + node *n; + sql_schema *syss = find_sql_schema(tr, isGlobal(i->t)?"sys":"tmp"); + sql_table *systrigger = find_sql_table(tr, syss, "triggers"); + oid rid = store->table_api.column_find_row(tr, find_sql_column(systrigger, "id"), &i->base.id, NULL); + + if (is_oid_nil(rid)) + return -1; + if (store->table_api.table_delete(tr, systrigger, rid)) + return -2; + + for (n = i->columns->h; n; n = n->next) { + sql_kc *tc = n->data; + + if (sys_drop_tc(tr, i, tc)) + return -3; + } + /* remove trigger from schema */ + if (isGlobal(i->t)) + if (os_del(i->t->s->triggers, tr, i->base.name, dup_base(&i->base))) + return -4; + sql_trans_drop_dependencies(tr, i->base.id); + return 0; +} + +static int sys_drop_column(sql_trans *tr, sql_column *col, int drop_action) { sqlstore *store = tr->store; @@ -4065,6 +4065,21 @@ sys_drop_idxs(sql_trans *tr, sql_table * } static int +sys_drop_triggers(sql_trans *tr, sql_table *t) +{ + node *n; + + if (cs_size(&t->triggers)) + for (n = t->triggers.set->h; n; n = n->next) { + sql_trigger *i = n->data; + + if (sys_drop_trigger(tr, i)) + return -1; + } + return 0; +} + +static int sys_drop_columns(sql_trans *tr, sql_table *t, int drop_action) { node *n; @@ -4164,6 +4179,8 @@ sys_drop_table(sql_trans *tr, sql_table return -3; if (sys_drop_idxs(tr, t, drop_action)) return -4; + if (sys_drop_triggers(tr, t)) + return -4; if (partition_find_part(tr, t, NULL)) if (sys_drop_parts(tr, t, drop_action)) @@ -6126,7 +6143,8 @@ sql_trans_drop_trigger(sql_trans *tr, sq list_append(tr->dropped, local_id); } - sys_drop_trigger(tr, i); + if (sys_drop_trigger(tr, i)) + return -1; node *n = cs_find_name(&i->t->triggers, i->base.name); if (n) cs_del(&i->t->triggers, store, n, i->base.flags); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list