Changeset: ca6a22295c47 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ca6a22295c47
Modified Files:
sql/include/sql_catalog.h
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
sql/storage/store.c
Branch: newstorage
Log Message:
buggy christmas
diffs (172 lines):
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -203,6 +203,7 @@ typedef struct sql_trans {
int rtime;
int wtime;
int btime; /* begin transaction timestamp */
+ BUN firstclaimed; /* 1st BAT slot to insert */
int schema_number; /* schema timestamp */
int schema_updates; /* set on schema changes */
int status; /* status of the last query */
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
@@ -463,7 +463,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
}
static void
-insert_val2col(sql_delta *col, void *i) {
+insert_val2col(sql_trans *tr ,sql_delta *col, void *i) {
BAT *c = temp_descriptor(col->bid);
@@ -475,7 +475,7 @@ insert_val2col(sql_delta *col, void *i)
assert(c->T->heap.storage != STORE_PRIV);
- BUNinplace(c, (BATcount(c) -1), c->H, i, TRUE);
+ BUNinplace(c, tr->firstclaimed, c->H, i, TRUE);
col->cnt++;
bat_destroy(c);
@@ -558,6 +558,8 @@ timestamps_insert(sql_trans *tr, sql_tab
wrd i;
int nts=0;
+ BUN first = tr->firstclaimed;
+
assert(!insb || insb->htype == TYPE_void);
assert(!delb || delb->htype == TYPE_void);
@@ -570,8 +572,9 @@ timestamps_insert(sql_trans *tr, sql_tab
/* insert negative timestamps until commit */
for(i=cnt; i>0; i--) {
- BUNinplace(insb, (BATcount(insb) - (BUN)i), insb->H, (ptr)&nts,
TRUE);
- BUNinplace(delb, (BATcount(delb) - (BUN)i), delb->H, &int_nil,
TRUE);
+ BUNinplace(insb, first, insb->H, (ptr)&nts, TRUE);
+ BUNinplace(delb, first, delb->H, &int_nil, TRUE);
+ first++;
}
bat_destroy(insb);
@@ -581,10 +584,11 @@ timestamps_insert(sql_trans *tr, sql_tab
}
static void
-insert_bat2col(sql_delta *col, BAT *i) {
+insert_bat2col(sql_trans *tr, sql_delta *col, BAT *i) {
BAT *c = temp_descriptor(col->bid);
BUN isz = 0;
+ BUN first = -1;
assert(!c || c->htype == TYPE_void);
assert(c->T->heap.storage != STORE_PRIV);
@@ -594,6 +598,7 @@ insert_bat2col(sql_delta *col, BAT *i) {
col->cached = NULL;
}
+ first = tr->firstclaimed;
isz = BATcount(i);
if(isz==0)
@@ -602,8 +607,9 @@ insert_bat2col(sql_delta *col, BAT *i) {
BUN p, q = 0;
BATloop(i, p, q) {
- BUNinplace(c, (BATcount(c) - isz), c->H,
(ptr)Tloc(i,p), TRUE);
- isz--;
+ BUNinplace(c, first /*(BATcount(c) - isz)*/, c->H,
(ptr)Tloc(i,p), TRUE);
+ first++;
+ //isz--;
}
}
bat_destroy(c);
@@ -626,6 +632,8 @@ claim_tab(sql_trans *tr, sql_table *t, w
store_lock();
+ //tr->firstclaimed = -1;
+
if (!t->data || !t->base.allocated) {
sql_table *ot = tr_find_table(tr->parent, t);
sql_timestamps *ts = t->data = ZNEW(sql_timestamps), *ots =
timestamp_tsbats(ot->data, tr->stime);
@@ -724,14 +732,16 @@ claim_tab(sql_trans *tr, sql_table *t, w
}
BATsetcount(delb, (BATcount(delb) + (BUN)cnt));
+ tr->firstclaimed = BATcount(insb) - (BUN)cnt;
+
bat_destroy(insb);
bat_destroy(delb);
ts->wtime /*= t->base.wtime = t->s->base.wtime */= tr->wtime =
tr->wstime;
+ store_unlock();
+
timestamps_insert(tr, t, ts, cnt);
-
- store_unlock();
}
static void
@@ -760,9 +770,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)
- insert_bat2col(bat, i);
+ insert_bat2col(tr, bat, i);
else
- insert_val2col(bat,i);
+ insert_val2col(tr, bat, i);
}
static void
@@ -789,9 +799,9 @@ append_idx(sql_trans *tr, sql_idx * i, v
bat->wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime =
tr->wtime = tr->wstime;
if (tpe == TYPE_bat)
- insert_bat2col(bat, ib);
+ insert_bat2col(tr, bat, ib);
else
- insert_val2col(bat,ib);
+ insert_val2col(tr, 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
@@ -117,8 +117,9 @@ delta_full_bat_(sql_trans *tr, sql_colum
}
b = BATmirror(res);*/
- if (!bat->cached && !c->base.wtime && !c->base.allocated && !s)
- bat->cached = temp_descriptor(b->batCacheid);
+ //if (!bat->cached && !c->base.wtime && !c->base.allocated && !s)
+ //bat->cached = temp_descriptor(b->batCacheid);
+ (void)c;
return b;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -940,6 +940,7 @@ create_trans(sql_allocator *sa, backend_
t->btime = btimestamp();
t->schema_updates = 0;
t->status = 0;
+ t->firstclaimed = -1;
t->parent = NULL;
t->stk = stk;
@@ -2273,6 +2274,7 @@ trans_init(sql_trans *t, backend_stack s
t->wtime = t->rtime = 0;
t->stime = ot->wtime;
t->wstime = timestamp();
+ t->firstclaimed = -1;
t->btime = btimestamp();
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list