Changeset: bc22a6045c0b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bc22a6045c0b
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: copybinary
Log Message:

Expose store funcs append_col_{prep,exec}


diffs (117 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
@@ -846,30 +846,50 @@ dup_del(sql_trans *tr, sql_table *ot, sq
        return ok;
 }
 
-static int
-append_col(sql_trans *tr, sql_column *c, void *i, int tpe)
+static void*
+append_col_prepare(sql_trans *tr, sql_column *c)
 {
-       int ok = LOG_OK;
-       BAT *b = i;
-       sql_delta *bat;
-
-       if (tpe == TYPE_bat && !BATcount(b))
-               return ok;
-
        if (bind_col_data(tr, c) == LOG_ERR)
-               return LOG_ERR;
-
-       bat = c->data;
+               return NULL;
+
+       sql_delta *delta = c->data;
+
        /* appends only write */
-       bat->wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime = 
tr->wtime = tr->wstime;
+       delta->wtime = c->base.wtime = c->t->base.wtime = c->t->s->base.wtime = 
tr->wtime = tr->wstime;
        /* inserts are ordered with the current delta implementation */
        /* therefor mark appends as reads */
        assert(tr != gtrans);
        c->t->s->base.rtime = c->t->base.rtime = tr->stime;
-       if (tpe == TYPE_bat)
-               ok = delta_append_bat(bat, i);
-       else
-               ok = delta_append_val(bat, i);
+
+       return delta;
+}
+
+static int
+append_col_execute(void *incoming_delta, void *incoming_bat)
+{
+       sql_delta *delta = incoming_delta;
+       BAT *bat = incoming_bat;
+
+       if (!BATcount(bat))
+               return LOG_OK;
+       int ok = delta_append_bat(delta, bat);
+       return ok;
+}
+
+static int
+append_col(sql_trans *tr, sql_column *c, void *i, int tpe)
+{
+       sql_delta *delta = append_col_prepare(tr, c);
+       if (delta == NULL)
+               return LOG_ERR;
+
+       int ok;
+       if (tpe == TYPE_bat) {
+               ok = append_col_execute(delta, i);
+       } else {
+               ok = delta_append_val(delta, i);
+       }
+
        return ok;
 }
 
@@ -3110,6 +3130,8 @@ bat_storage_init( store_functions *sf)
        sf->bind_del_data = (bind_del_data_fptr)&bind_del_data;
 
        sf->append_col = (append_col_fptr)&append_col;
+       sf->append_col_prep = (append_col_prep_fptr)&append_col_prepare;
+       sf->append_col_exec = (append_col_exec_fptr)&append_col_execute;
        sf->append_idx = (append_idx_fptr)&append_idx;
        sf->update_col = (update_col_fptr)&update_col;
        sf->update_idx = (update_idx_fptr)&update_idx;
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -136,6 +136,8 @@ typedef void *(*bind_del_data_fptr) (sql
 -- append/update to columns and indices
 */
 typedef int (*append_col_fptr) (sql_trans *tr, sql_column *c, void *d, int t);
+typedef void *(*append_col_prep_fptr) (sql_trans *tr, sql_column *c);
+typedef void *(*append_col_exec_fptr) (void *dlt, void *b);
 typedef int (*append_idx_fptr) (sql_trans *tr, sql_idx *i, void *d, int t);
 typedef int (*update_col_fptr) (sql_trans *tr, sql_column *c, void *tids, void 
*d, int t);
 typedef int (*update_idx_fptr) (sql_trans *tr, sql_idx *i, void *tids, void 
*d, int t);
@@ -236,6 +238,8 @@ typedef struct store_functions {
        bind_del_data_fptr bind_del_data;
 
        append_col_fptr append_col;
+       append_col_prep_fptr append_col_prep;
+       append_col_exec_fptr append_col_exec;
        append_idx_fptr append_idx;
        update_col_fptr update_col;
        update_idx_fptr update_idx;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -38,9 +38,9 @@ int store_readonly = 0;
 int store_singleuser = 0;
 int store_initialized = 0;
 
-store_functions store_funcs;
-table_functions table_funcs;
-logger_functions logger_funcs;
+store_functions store_funcs = { NULL };
+table_functions table_funcs = { NULL };
+logger_functions logger_funcs = { NULL };
 
 static int schema_number = 0; /* each committed schema change triggers a new
                                 schema number (session wise unique number) */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to