Changeset: a2d9f9e5a5af for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a2d9f9e5a5af
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/temp2.stable.out
        sql/test/leaks/Tests/temp3.stable.out
Branch: Oct2014
Log Message:

once tables get persistent they should no longer be flaged as 'new'. Solves
problems with deletes. Thanks too Richard Hughes for finding the problem.
See also bug 3577.


diffs (125 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1658,7 +1658,8 @@ tr_update_delta( sql_trans *tr, sql_delt
                } else {
                        assert(cur->T->heap.storage != STORE_PRIV);
                        assert((BATcount(cur) + BATcount(ins)) == cbat->cnt);
-                       assert((BATcount(cur) + BATcount(ins)) == (obat->cnt + 
(BUNlast(ins) - ins->batInserted)));
+                       //assert((BATcount(cur) + BATcount(ins)) == (obat->cnt 
+ (BUNlast(ins) - ins->batInserted)));
+                       assert(!BATcount(ins) || !isEbat(ins));
                        BATappend(cur,ins,TRUE);
                        BATcleanProps(cur);
                        temp_destroy(cbat->bid);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1750,8 +1750,10 @@ key_dup_(sql_trans *tr, int flag, sql_ke
                        }
        }
        list_append(t->s->keys, nk);
-       if (!copy && flag == TR_NEW && tr->parent == gtrans) 
+       if (!copy && flag == TR_NEW && tr->parent == gtrans) {
                k->base.flag = TR_OLD;
+               nk->base.flag = TR_OLD;
+       }
        return nk;
 }
 
@@ -1823,8 +1825,11 @@ idx_dup(sql_trans *tr, int flag, sql_idx
            (i->base.allocated && flag == TR_OLD && tr->parent != gtrans))
                if (isTable(ni->t)) 
                        store_funcs.dup_idx(tr, i, ni);
-       if (isNew(i) && flag == TR_NEW && tr->parent == gtrans) 
+
+       if (isNew(i) && flag == TR_NEW && tr->parent == gtrans) {
                i->base.flag = TR_OLD;
+               ni->base.flag = TR_OLD;
+       }
 
        for (n = i->columns->h; n; n = n->next) {
                sql_kc *okc = n->data;
@@ -1911,8 +1916,10 @@ trigger_dup(sql_trans *tr, int flag, sql
                list_append(nt->columns, kc_dup(tr, flag, okc, t));
        }
        list_append(t->s->triggers, nt);
-       if (flag == TR_NEW && tr->parent == gtrans) 
+       if (flag == TR_NEW && tr->parent == gtrans) {
                i->base.flag = TR_OLD;
+               nt->base.flag = TR_OLD;
+       }
        return nt;
 }
 
@@ -1941,8 +1948,10 @@ column_dup(sql_trans *tr, int flag, sql_
            (oc->base.allocated && flag == TR_OLD && tr->parent != gtrans))
                if (isTable(c->t)) 
                        store_funcs.dup_col(tr, oc, c);
-       if (isNew(oc) && flag == TR_NEW && tr->parent == gtrans) 
+       if (isNew(oc) && flag == TR_NEW && tr->parent == gtrans) {
                oc->base.flag = TR_OLD;
+               c->base.flag = TR_OLD;
+       }
        return c;
 }
 
@@ -2089,8 +2098,10 @@ table_dup(sql_trans *tr, int flag, sql_t
                }
                ot->triggers.nelm = NULL;
        }
-       if (isNew(ot) && flag == TR_NEW && tr->parent == gtrans) 
+       if (isNew(ot) && flag == TR_NEW && tr->parent == gtrans) {
                ot->base.flag = TR_OLD;
+               t->base.flag = TR_OLD;
+       }
        return t;
 }
 
@@ -2234,8 +2245,10 @@ schema_dup(sql_trans *tr, int flag, sql_
                }
                os->seqs.nelm = NULL;
        }
-       if (flag == TR_NEW && tr->parent == gtrans) 
+       if (flag == TR_NEW && tr->parent == gtrans) {
                os->base.flag = TR_OLD;
+               s->base.flag = TR_OLD;
+       }
        return s;
 }
 
diff --git a/sql/test/leaks/Tests/check0.stable.out 
b/sql/test/leaks/Tests/check0.stable.out
--- a/sql/test/leaks/Tests/check0.stable.out
+++ b/sql/test/leaks/Tests/check0.stable.out
@@ -79,7 +79,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 394     ]
+[ "transient", 322     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L1, .L2 # table_name
 % L1,  L2 # name
diff --git a/sql/test/leaks/Tests/temp2.stable.out 
b/sql/test/leaks/Tests/temp2.stable.out
--- a/sql/test/leaks/Tests/temp2.stable.out
+++ b/sql/test/leaks/Tests/temp2.stable.out
@@ -33,7 +33,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 173     ]
+[ "transient", 176     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L1, .L2 # table_name
 % L1,  L2 # name
diff --git a/sql/test/leaks/Tests/temp3.stable.out 
b/sql/test/leaks/Tests/temp3.stable.out
--- a/sql/test/leaks/Tests/temp3.stable.out
+++ b/sql/test/leaks/Tests/temp3.stable.out
@@ -32,7 +32,7 @@ Ready.
 % L1,  L2 # name
 % char,        wrd # type
 % 9,   3 # length
-[ "transient", 178     ]
+[ "transient", 176     ]
 #select 'persistent', count(*) from bbp() as bbp where kind like 'pers%';
 % .L1, .L2 # table_name
 % L1,  L2 # name
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to