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

Reply via email to