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

Inline {update,append}_{col,idx}_prepare

they are used only once now.
Leave the _executes alone because they are used for both columns and indices.


diffs (227 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
@@ -60,31 +60,6 @@ unlock_table(sqlstore *store, sqlid id)
        MT_lock_unset(&store->table_locks[id&(NR_TABLE_LOCKS-1)]);
 }
 
-/* used for communication between {append,update}_prepare and 
{append,update}_execute */
-struct prep_exec_cookie {
-       sql_trans *tr;
-       sql_delta *delta;
-       sql_table *table;
-       bool is_new; /* only used for updates */
-};
-
-/* creates a new cookie, backed by sql allocator memory so it is
- * automatically freed even if errors occur
- */
-static struct prep_exec_cookie *
-make_cookie(sql_allocator *sa, sql_trans *tr, sql_delta *delta, sql_table *t, 
bool is_new)
-{
-       struct prep_exec_cookie *cookie;
-       cookie = SA_NEW(sa, struct prep_exec_cookie);
-       if (!cookie)
-               return NULL;
-       cookie->tr = tr;
-       cookie->delta = delta;
-       cookie->table = t;
-       cookie->is_new = is_new;
-       return cookie;
-}
-
 static void
 destroy_segs(segment *s)
 {
@@ -1011,44 +986,33 @@ bind_col_data(sql_trans *tr, sql_column 
        return bat;
 }
 
-static struct prep_exec_cookie*
-update_col_prepare(sql_trans *tr, sql_allocator *sa, sql_column *c)
-{
-       sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
-
-       if ((delta = bind_col_data(tr, c, true)) == NULL)
-               return NULL;
-
-       assert(delta && delta->cs.ts == tr->tid);
-       if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t)) 
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
-               trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col, 
isLocalTemp(c->t)?NULL:&log_update_col);
-       return make_cookie(sa, tr, delta, c->t, isNew(c));
-}
-
 static int
-update_col_execute(struct prep_exec_cookie *cookie, void *incoming_tids, void 
*incoming_values, bool is_bat)
+update_col_execute(sql_trans *tr, sql_delta *delta, sql_table *table, bool 
is_new, void *incoming_tids, void *incoming_values, bool is_bat)
 {
        if (is_bat) {
                BAT *tids = incoming_tids;
                BAT *values = incoming_values;
                if (BATcount(tids) == 0)
                        return LOG_OK;
-               return delta_update_bat(cookie->tr, cookie->delta, 
cookie->table, tids, values, cookie->is_new);
+               return delta_update_bat(tr, delta, table, tids, values, is_new);
        }
        else
-               return delta_update_val(cookie->tr, cookie->delta, 
cookie->table, *(oid*)incoming_tids, incoming_values, cookie->is_new);
+               return delta_update_val(tr, delta, table, *(oid*)incoming_tids, 
incoming_values, is_new);
 }
 
 static int
 update_col(sql_trans *tr, sql_column *c, void *tids, void *upd, int tpe)
 {
-       struct prep_exec_cookie *cookie = update_col_prepare(tr, NULL, c);
-       if (cookie == NULL)
+       sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
+
+       if ((delta = bind_col_data(tr, c, true)) == NULL)
                return LOG_ERR;
 
-       int ok = update_col_execute(cookie, tids, upd, tpe == TYPE_bat);
-       _DELETE(cookie);
-       return ok;
+       assert(delta && delta->cs.ts == tr->tid);
+       if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t)) 
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
+               trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col, 
isLocalTemp(c->t)?NULL:&log_update_col);
+
+       return update_col_execute(tr, delta, c->t, isNew(c), tids, upd, tpe == 
TYPE_bat);
 }
 
 static sql_delta *
@@ -1083,30 +1047,19 @@ bind_idx_data(sql_trans *tr, sql_idx *i,
        return bat;
 }
 
-static struct prep_exec_cookie*
-update_idx_prepare(sql_trans *tr, sql_allocator *sa, sql_idx *i)
+static int
+update_idx(sql_trans *tr, sql_idx * i, void *tids, void *upd, int tpe)
 {
        sql_delta *delta, *odelta = ATOMIC_PTR_GET(&i->data);
 
        if ((delta = bind_idx_data(tr, i, true)) == NULL)
-               return NULL;
+               return LOG_ERR;
 
        assert(delta && delta->cs.ts == tr->tid);
        if ((!inTransaction(tr, i->t) && (odelta != delta || isTempTable(i->t)) 
&& isGlobal(i->t)) || (!isNew(i->t) && isLocalTemp(i->t)))
                trans_add(tr, &i->base, delta, &tc_gc_idx, &commit_update_idx, 
isLocalTemp(i->t)?NULL:&log_update_idx);
-       return make_cookie(sa, tr, delta, i->t, isNew(i));
-}
-
-static int
-update_idx(sql_trans *tr, sql_idx * i, void *tids, void *upd, int tpe)
-{
-       struct prep_exec_cookie *cookie = update_idx_prepare(tr, NULL, i);
-       if (cookie == NULL)
-               return LOG_ERR;
-
-       int ok = update_col_execute(cookie, tids, upd, tpe == TYPE_bat);
-       _DELETE(cookie);
-       return ok;
+
+       return update_col_execute(tr, delta, i->t, isNew(i), tids, upd, tpe == 
TYPE_bat);
 }
 
 static int
@@ -1215,79 +1168,56 @@ dup_storage( sql_trans *tr, storage *oba
        return dup_cs(tr, &obat->cs, &bat->cs, TYPE_msk, temp);
 }
 
-
-static struct prep_exec_cookie*
-append_col_prepare(sql_trans *tr, sql_allocator *sa, sql_column *c)
-{
-       sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
-       int in_transaction = segments_in_transaction(tr, c->t);
-
-       if ((delta = bind_col_data(tr, c, false)) == NULL)
-               return NULL;
-
-       assert(delta && (!isTempTable(c->t) || delta->cs.ts == tr->tid));
-       if (isTempTable(c->t))
-       if ((!inTransaction(tr, c->t) && (odelta != delta || !in_transaction || 
isTempTable(c->t)) && isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
-               trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col, 
isLocalTemp(c->t)?NULL:&log_update_col);
-       return make_cookie(sa, tr, delta, c->t, false);
-}
-
 static int
-append_col_execute(struct prep_exec_cookie *cookie, size_t offset, void 
*incoming_data, bool is_bat)
+append_col_execute(sql_trans *tr, sql_delta *delta, sql_table *table, size_t 
offset, void *incoming_data, bool is_bat)
 {
        int ok = LOG_OK;
 
-       lock_table(cookie->tr->store, cookie->table->base.id);
+       lock_table(tr->store, table->base.id);
        if (is_bat) {
                BAT *bat = incoming_data;
 
                if (BATcount(bat))
-                       ok = delta_append_bat(cookie->delta, offset, bat);
+                       ok = delta_append_bat(delta, offset, bat);
        } else {
-               ok = delta_append_val(cookie->delta, offset, incoming_data);
+               ok = delta_append_val(delta, offset, incoming_data);
        }
-       unlock_table(cookie->tr->store, cookie->table->base.id);
+       unlock_table(tr->store, table->base.id);
        return ok;
 }
 
 static int
 append_col(sql_trans *tr, sql_column *c, size_t offset, void *i, int tpe)
 {
-       struct prep_exec_cookie *cookie = append_col_prepare(tr, NULL, c);
-       if (cookie == NULL)
+       sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
+       int in_transaction = segments_in_transaction(tr, c->t);
+
+       if ((delta = bind_col_data(tr, c, false)) == NULL)
                return LOG_ERR;
 
-       int ok = append_col_execute(cookie, offset, i, tpe == TYPE_bat);
-       _DELETE(cookie);
-       return ok;
+       assert(delta && (!isTempTable(c->t) || delta->cs.ts == tr->tid));
+       if (isTempTable(c->t))
+       if ((!inTransaction(tr, c->t) && (odelta != delta || !in_transaction || 
isTempTable(c->t)) && isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
+               trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col, 
isLocalTemp(c->t)?NULL:&log_update_col);
+
+       return append_col_execute(tr, delta, c->t, offset, i, tpe == TYPE_bat);
 }
 
-static struct prep_exec_cookie*
-append_idx_prepare(sql_trans *tr, sql_allocator *sa, sql_idx *i)
+static int
+append_idx(sql_trans *tr, sql_idx * i, size_t offset, void *data, int tpe)
 {
        sql_delta *delta, *odelta = ATOMIC_PTR_GET(&i->data);
        int in_transaction = segments_in_transaction(tr, i->t);
 
        if ((delta = bind_idx_data(tr, i, false)) == NULL)
-               return NULL;
+               return LOG_ERR;
 
        assert(delta && (!isTempTable(i->t) || delta->cs.ts == tr->tid));
        if (isTempTable(i->t))
        if ((!inTransaction(tr, i->t) && (odelta != delta || !in_transaction || 
isTempTable(i->t)) && isGlobal(i->t)) || (!isNew(i->t) && isLocalTemp(i->t)))
                trans_add(tr, &i->base, delta, &tc_gc_idx, &commit_update_idx, 
isLocalTemp(i->t)?NULL:&log_update_idx);
-       return make_cookie(sa, tr, delta, i->t, false);
-}
-
-static int
-append_idx(sql_trans *tr, sql_idx * i, size_t offset, void *data, int tpe)
-{
-       struct prep_exec_cookie *cookie = append_idx_prepare(tr, NULL, i);
-       if (cookie == NULL)
-               return LOG_ERR;
-
-       int ok = append_col_execute(cookie, offset, data, tpe == TYPE_bat);
-       _DELETE(cookie);
-       return ok;
+
+       return append_col_execute(tr, delta, i->t, offset, data, tpe == 
TYPE_bat);
 }
 
 static int
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to