Changeset: 8b5dc770368b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b5dc770368b
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
Branch: newstorage
Log Message:
do BUNinplace on column main bat instead of BATappend/BUNappend on delta insert
bat. (bug: columns of sys.schemas have empty main bat)
diffs (217 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
@@ -80,6 +80,11 @@ bind_del(sql_trans *tr, sql_table *t, in
return delta_bind_del(t->data, access);
}
+/**static BAT *
+bind_ts_insert(sql_trans *tr, sql_table *t, int access) {
+
+}*/
+
static BAT *
delta_bind_ubat(sql_delta *bat, int access, int type)
{
@@ -448,7 +453,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
else
assert(0);
}
-
+/**
static void
delta_append_bat( sql_delta *bat, BAT *i )
{
@@ -471,14 +476,14 @@ delta_append_bat( sql_delta *bat, BAT *i
bat->cached = NULL;
}
assert(!c || BATcount(c) == bat->ibase);
- if (!bat->ibase && !BATcount(b) && BBP_refs(id) == 1 && BBP_lrefs(id)
== 1 && !isVIEW(i) && i->ttype /* we need info if this is comming from copy
into, like role == PERSISTENT */){
+ if (!bat->ibase && !BATcount(b) && BBP_refs(id) == 1 && BBP_lrefs(id)
== 1 && !isVIEW(i) && i->ttype*/ /* we need info if this is comming from copy
into, like role == PERSISTENT *//*){
temp_destroy(bat->ibid);
bat->ibid = id;
temp_dup(id);
bat_destroy(b);
} else {
if (!isEbat(b)){
- /* try to use mmap() */
+ *//* try to use mmap() *//*
if (BATcount(b)+BATcount(i) > (BUN) REMAP_PAGE_MAXSIZE)
{
BATmmap(b, STORE_MMAP, STORE_MMAP,
STORE_MMAP, STORE_MMAP, 1);
}
@@ -495,8 +500,43 @@ delta_append_bat( sql_delta *bat, BAT *i
}
bat->cnt += BATcount(i);
}
+*/
static void
+insert_val2col(sql_delta *col, void *i) {
+
+ BAT *c;
+
+ if(col->bid)
+ c = temp_descriptor(col->bid);
+ else
+ return;
+
+ printf("#in INSERTVAL2COL\n");
+
+ assert(!c || c->htype == TYPE_void);
+ if (col->cached) {
+ bat_destroy(col->cached);
+ col->cached = NULL;
+ }
+
+ assert(!c || BATcount(c) == col->ibase);
+ /**if (isEbat(c)) {
+ temp_destroy(col->bid);
+ col->bid = temp_copy(c->batCacheid, FALSE);
+ bat_destroy(c);
+ c = temp_descriptor(col->bid);
+ }*/
+
+ assert(c->T->heap.storage != STORE_PRIV);
+
+ BUNinplace(c, BATcount(c), c->H, i, TRUE);
+
+ col->cnt++;
+ bat_destroy(c);
+}
+
+/**static void
delta_append_val( sql_delta *bat, void *i )
{
@@ -524,7 +564,7 @@ delta_append_val( sql_delta *bat, void *
assert(BUNlast(b) > b->batInserted);
bat->cnt ++;
bat_destroy(b);
-}
+}*/
static int
dup_col(sql_trans *tr, sql_column *oc, sql_column *c )
@@ -645,10 +685,10 @@ timestamps_insert(sql_trans *tr, sql_tim
nts = ((long)(tr->wtime)) * (-1);
- for(i=0; i<cnt; i++) {
+ for(i=cnt; i>0; i--) {
/* insert negative timestamps until commit */
- BUNinplace(insb, BATcount(insb), insb->H, (ptr)&(nts), TRUE);
- BUNinplace(delb, BATcount(delb), delb->H, (ptr)&(nts), TRUE);
+ BUNinplace(insb, (BATcount(insb) - i), insb->H, (ptr)&nts,
TRUE);
+ BUNinplace(delb, (BATcount(delb) - i), delb->H, (ptr)&lng_nil,
TRUE);
}
bat_destroy(insb);
bat_destroy(delb);
@@ -657,6 +697,47 @@ timestamps_insert(sql_trans *tr, sql_tim
}
static void
+insert_bat2col(sql_delta *col, BAT *i) {
+
+ BAT *c;
+ BUN isz = 0;
+
+ /**if (isEbat(c)) {
+ temp_destroy(col->bid);
+ col->bid = temp_copy(c->batCacheid, FALSE);
+ bat_destroy(c);
+ c = temp_descriptor(col->bid);
+ }*/
+
+ if(col->bid)
+ c = temp_descriptor(col->bid);
+ else
+ return;
+
+ assert(!c || c->htype == TYPE_void);
+ assert(c->T->heap.storage != STORE_PRIV);
+ /**if (col->cached) {
+ bat_destroy(col->cached);
+ col->cached = NULL;
+ }*/
+
+ isz = BATcount(i);
+
+ if(isz==0)
+ return;
+ else {
+ BUN p, q = 0;
+
+ BATloop(i, p, q) {
+ BUNinplace(c, (BATcount(c) - isz), c->H,
(ptr)Tloc(i,q), TRUE);
+ isz--;
+ }
+ }
+ bat_destroy(c);
+ col->cnt += BATcount(i);
+}
+
+static void
claim_tab(sql_trans *tr, sql_table *t, wrd cnt) {
sql_timestamps *ts;
@@ -665,6 +746,8 @@ claim_tab(sql_trans *tr, sql_table *t, w
node *n, *in;
int growF=0;
+ printf("#in CLAIM\n");
+
store_lock();
if (!t->data || !t->base.allocated) {
@@ -710,7 +793,7 @@ claim_tab(sql_trans *tr, sql_table *t, w
if(newCap > grows)
grows = newCap;
- if(BATextend(cmbat, grows) == NULL)
+ if(BATextend(cmbat, grows) == NULL) /* temp
solution. will extend block-wise */
return;
}
BATsetcount(cmbat, (BATcount(cmbat) + (BUN)cnt));
@@ -814,9 +897,9 @@ append_col(sql_trans *tr, sql_column *c,
/* therefor mark appends as reads */
c->t->s->base.rtime = c->t->base.rtime = tr->stime;
if (tpe == TYPE_bat)
- delta_append_bat(bat, i);
+ insert_bat2col(bat, i);
else
- delta_append_val(bat, i);
+ insert_val2col(bat,i);
}
static void
@@ -840,10 +923,11 @@ append_idx(sql_trans *tr, sql_idx * i, v
bat = i->data;
/* appends only write */
bat->wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime =
tr->wtime = tr->wstime;
+
if (tpe == TYPE_bat)
- delta_append_bat(bat, ib);
+ insert_bat2col(bat, ib);
else
- delta_append_val(bat, ib);
+ insert_val2col(bat,ib);
}
static void
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -183,10 +183,12 @@ table_insert(sql_trans *tr, sql_table *t
void *val = NULL;
int cnt = 0;
-
printf("#in table_insert\n");
va_start(va, t);
+
+ store_funcs.claim_tab(tr, t, 1);
+
for (val = va_arg(va, void *); n && val; n = n->next, val = va_arg(va,
void *))
{
sql_column *c = n->data;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list