Changeset: 6c7ee21b1d97 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6c7ee21b1d97
Modified Files:
        sql/server/sql_semantic.c
        sql/storage/store.c
Branch: nospare
Log Message:

added more cleanup code


diffs (116 lines):

diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -464,8 +464,10 @@ sql_bind_func__(mvc *sql, list *ff, cons
        if (ops && ops->h)
                input_type = ops->h->data;
 
-       if (ff)
-               for (node *n = ff->h; n; n = n->next) {
+       if (ff) {
+               node *n;
+               //for (node *n = ff->h; n; n = n->next) {
+               sql_base_loop( ff, n) {
                        sql_func *f = n->data;
 
                        if (f->type != type && f->type != filt)
@@ -473,6 +475,7 @@ sql_bind_func__(mvc *sql, list *ff, cons
                        if (strcmp(f->base.name, fname) == 0 && 
list_cmp(f->ops, ops, (fcmp) &arg_subtype_cmp) == 0)
                                return (type == F_AGGR) ? _dup_subaggr(sql->sa, 
f, input_type) : sql_dup_subfunc(sql->sa, f, ops, NULL);
                }
+       }
        return NULL;
 }
 
@@ -665,7 +668,7 @@ sql_find_funcs_by_name_internal(mvc *sql
                        for (sql_hash_e *he = 
ff->ht->buckets[key&(ff->ht->size-1)]; he; he = he->chain) {
                                sql_func *f = he->value;
 
-                               if (f->type != type)
+                               if (f->base.deleted || f->type != type)
                                        continue;
                                if (strcmp(f->base.name, fname) == 0) {
                                        if (!res)
@@ -677,7 +680,7 @@ sql_find_funcs_by_name_internal(mvc *sql
                        for (node *n = ff->h; n; n = n->next) {
                                sql_func *f = n->data;
 
-                               if (f->type != type)
+                               if (f->base.deleted || f->type != type)
                                        continue;
                                if (strcmp(f->base.name, fname) == 0) {
                                        if (!res)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -290,6 +290,25 @@ tc_gc_func(sqlstore *store, sql_change *
 }
 
 static int
+tc_gc_trigger(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
+{
+       sql_trigger *t = (sql_trigger*)change->obj;
+
+       (void)store;
+       if (t->base.deleted || !commit_ts) {
+               if (t->base.ts < oldest || (t->base.ts == commit_ts && 
commit_ts == oldest) || !commit_ts) {
+                       int ok = LOG_OK;
+                       base_destroy(store, &t->base, commit_ts, 
t->t->triggers.set, t->t->s->triggers);
+                       if (ok == LOG_OK)
+                               return 1; /* handled */
+                       else
+                               return LOG_ERR;
+               }
+       }
+       return 0;
+}
+
+static int
 tc_gc_key(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest)
 {
        sql_key *k = (sql_key*)change->obj;
@@ -4313,7 +4332,7 @@ sql_trans_create_func(sql_trans *tr, sql
                sqlid id = next_oid(tr->store);
                store->table_api.table_insert(tr, sysarg, &id, &t->base.id, 
a->name, a->type.type->sqlname, &a->type.digits, &a->type.scale, &a->inout, 
&number);
        }
-       trans_add(tr, &t->base, NULL, NULL, NULL);
+       trans_add(tr, &t->base, NULL, &tc_gc_func, NULL);
        return t;
 }
 
@@ -5491,7 +5510,7 @@ sql_trans_create_ukey(sql_trans *tr, sql
        list_append(t->s->keys, nk);
 
        store->table_api.table_insert(tr, syskey, &nk->base.id, &t->base.id, 
&nk->type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : &neg, &action );
-       trans_add(tr, &nk->base, NULL, NULL, NULL);
+       trans_add(tr, &nk->base, NULL, &tc_gc_key, NULL);
        return nk;
 }
 
@@ -5539,7 +5558,7 @@ sql_trans_create_fkey(sql_trans *tr, sql
        store->table_api.table_insert(tr, syskey, &nk->base.id, &t->base.id, 
&nk->type, nk->base.name, (nk->type == fkey) ? &((sql_fkey *) 
nk)->rkey->k.base.id : &neg, &action);
 
        sql_trans_create_dependency(tr, ((sql_fkey *) nk)->rkey->k.base.id, 
nk->base.id, FKEY_DEPENDENCY);
-       trans_add(tr, &nk->base, NULL, NULL, NULL);
+       trans_add(tr, &nk->base, NULL, &tc_gc_key, NULL);
        return (sql_fkey*) nk;
 }
 
@@ -5756,7 +5775,7 @@ sql_trans_create_idx(sql_trans *tr, sql_
                store->storage_api.create_idx(tr, ni);
        if (!isDeclaredTable(t))
                store->table_api.table_insert(tr, sysidx, &ni->base.id, 
&t->base.id, &ni->type, ni->base.name);
-       trans_add(tr, &ni->base, NULL, NULL, NULL);
+       trans_add(tr, &ni->base, NULL, &tc_gc_idx, NULL);
        return ni;
 }
 
@@ -5885,7 +5904,7 @@ sql_trans_create_trigger(sql_trans *tr, 
        store->table_api.table_insert(tr, systrigger, &ni->base.id, 
ni->base.name, &t->base.id, &ni->time, &ni->orientation,
                                                         &ni->event, 
(ni->old_name)?ni->old_name:nilptr, (ni->new_name)?ni->new_name:nilptr,
                                                         
(ni->condition)?ni->condition:nilptr, ni->statement);
-       trans_add(tr, &ni->base, NULL, NULL, NULL);
+       trans_add(tr, &ni->base, NULL, &tc_gc_trigger, NULL);
        return ni;
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to