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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list