Changeset: 20113b6276df for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=20113b6276df
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_storage.h
Branch: copybinary
Log Message:
Refactor update_col
diffs (78 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
@@ -610,26 +610,48 @@ bind_col_data(sql_trans *tr, sql_column
return LOG_OK;
}
+static void*
+update_col_prepare(sql_trans *tr, sql_column *c)
+{
+ if (bind_col_data(tr, c) == LOG_ERR)
+ return NULL;
+
+ sql_delta *delta = c->data;
+ delta->wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime =
tr->wtime = tr->wstime;
+ assert(tr != gtrans);
+ c->base.rtime = c->t->base.rtime = c->t->s->base.rtime = tr->stime;
+
+ delta->is_new = isNew(c);
+
+ return delta;
+}
+
+static int
+update_col_execute(void *incoming_delta, void *incoming_tids, void
*incoming_values, bool is_bat)
+{
+ sql_delta *delta = incoming_delta;
+
+ if (is_bat) {
+ BAT *tids = incoming_tids;
+ BAT *values = incoming_values;
+ if (BATcount(tids) == 0)
+ return LOG_OK;
+ return delta_update_bat(delta, tids, values, delta->is_new);
+ }
+ else
+ return delta_update_val(delta, *(oid*)incoming_tids,
incoming_values);
+}
+
static int
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 LOG_OK;
-
- if (bind_col_data(tr, c) == LOG_ERR)
+ sql_delta *delta = update_col_prepare(tr, c);
+ if (delta == NULL)
return LOG_ERR;
- bat = c->data;
- bat->wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime =
tr->wtime = tr->wstime;
- assert(tr != gtrans);
- c->base.rtime = c->t->base.rtime = c->t->s->base.rtime = tr->stime;
- if (tpe == TYPE_bat)
- return delta_update_bat(bat, tids, upd, isNew(c));
- else
- return delta_update_val(bat, *(oid*)tids, upd);
+ int ok = update_col_execute(delta, tids, upd, tpe == TYPE_bat);
+
+ return ok;
}
static int
diff --git a/sql/storage/bat/bat_storage.h b/sql/storage/bat/bat_storage.h
--- a/sql/storage/bat/bat_storage.h
+++ b/sql/storage/bat/bat_storage.h
@@ -20,6 +20,7 @@ typedef struct sql_delta {
int uibid; /* bat with positions of updates */
int uvbid; /* bat with values of updates */
int cleared;
+ bool is_new;
size_t cnt; /* number of tuples (excluding the deletes) */
size_t ucnt; /* number of updates */
BAT *cached; /* cached copy, used for schema bats only */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list