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