Changeset: abb1a779cc9e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=abb1a779cc9e
Modified Files:
        gdk/gdk_bat.c
        sql/storage/bat/bat_storage.c
Branch: default
Log Message:

on empty (non changing) insert/update/deletes don't mark transaction as dirty.


diffs (104 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1724,7 +1724,7 @@ void_inplace(BAT *b, oid id, const void 
        b->batInserted = 0;
        BUNfndVOID(p, bi, (ptr) &id);
 
-       assert(p >= b->batInserted);    /* we don't want delete/ins */
+       assert(force || p >= b->batInserted);   /* we don't want delete/ins */
        assert(force || !b->batRestricted);
        if (!BUNinplace(b, p, (ptr) &id, val, force))
                 res = GDK_FAIL;
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
@@ -365,8 +365,12 @@ dup_bat(sql_trans *tr, sql_table *t, sql
 static void
 update_col(sql_trans *tr, sql_column *c, void *tids, void *upd, int tpe)
 {
+       BAT *b = tids;
        sql_delta *bat;
 
+       if (tpe == TYPE_bat && !BATcount(b)) 
+               return;
+
        if (!c->data || !c->base.allocated) {
                int type = c->type.type->localtype;
                sql_column *oc = tr_find_column(tr->parent, c);
@@ -386,8 +390,12 @@ update_col(sql_trans *tr, sql_column *c,
 static void 
 update_idx(sql_trans *tr, sql_idx * i, void *tids, void *upd, int tpe)
 {
+       BAT *b = tids;
        sql_delta *bat;
 
+       if (tpe == TYPE_bat && !BATcount(b)) 
+               return;
+
        if (!i->data || !i->base.allocated) {
                int type = (i->type==join_idx)?TYPE_oid:TYPE_wrd;
                sql_idx *oi = tr_find_idx(tr->parent, i);
@@ -523,8 +531,12 @@ dup_del(sql_trans *tr, sql_table *ot, sq
 static void 
 append_col(sql_trans *tr, sql_column *c, void *i, int tpe)
 {
+       BAT *b = i;
        sql_delta *bat;
 
+       if (tpe == TYPE_bat && !BATcount(b)) 
+               return;
+
        if (!c->data || !c->base.allocated) {
                int type = c->type.type->localtype;
                sql_column *oc = tr_find_column(tr->parent, c);
@@ -544,8 +556,12 @@ append_col(sql_trans *tr, sql_column *c,
 static void
 append_idx(sql_trans *tr, sql_idx * i, void *ib, int tpe)
 {
+       BAT *b = ib;
        sql_delta *bat;
 
+       if (tpe == TYPE_bat && !BATcount(b)) 
+               return;
+
        if (!i->data || !i->base.allocated) {
                int type = (i->type==join_idx)?TYPE_oid:TYPE_wrd;
                sql_idx *oi = tr_find_idx(tr->parent, i);
@@ -601,13 +617,17 @@ delta_delete_val( sql_dbat *bat, oid rid
 static void
 delete_tab(sql_trans *tr, sql_table * t, void *ib, int tpe)
 {
+       BAT *b = ib;
        sql_dbat *bat;
        node *n;
 
+       if (tpe == TYPE_bat && !BATcount(b)) 
+               return;
+
        if (!t->data || !t->base.allocated) {
                sql_table *ot = tr_find_table(tr->parent, t);
                sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat = 
timestamp_dbat(ot->data, tr->stime);
-               dup_dbat(tr, obat, bat, isNew(ot), t->base.flag == TR_NEW); 
+               dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t)); 
                t->base.allocated = 1;
        }
                bat = t->data;
@@ -1350,7 +1370,7 @@ clear_del(sql_trans *tr, sql_table *t)
        if (!t->data || !t->base.allocated) {
                sql_table *ot = tr_find_table(tr->parent, t);
                sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat = 
timestamp_dbat(ot->data, tr->stime);
-               dup_dbat(tr, obat, bat, isNew(ot), t->base.flag == TR_NEW); 
+               dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t)); 
                t->base.allocated = 1;
        }
        return clear_dbat(tr, t->data);
@@ -1653,7 +1673,7 @@ update_table(sql_trans *tr, sql_table *f
        int ok = LOG_OK;
        node *n, *m;
 
-       if (ft->cleared) {
+       if (ft->cleared && store_nr_active == 1) {
                (void)store_funcs.clear_del(tr->parent, tt);
                for (n = tt->columns.set->h; n; n = n->next) 
                        (void)store_funcs.clear_col(tr->parent, n->data);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to