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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list