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