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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list