Changeset: 169c05f8e6b6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=169c05f8e6b6
Modified Files:
sql/backends/monet5/sql.mx
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_storage.h
sql/storage/sql_storage.h
Branch: newstorage
Log Message:
ready to fill timestamp bats
diffs (206 lines):
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -3811,7 +3811,8 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
BBPunfix(diff->batCacheid);
BBPunfix(d->batCacheid);
}
- BBPkeepref( *res = tids->batCacheid );
+ BBPkeepref( *res = tids->batCacheid );
+
return MAL_SUCCEED;
}
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
@@ -36,19 +36,19 @@ timestamp_delta( sql_delta *d, int ts)
static sql_dbat *
timestamp_dbat( sql_dbat *d, int ts)
{
+ printf("#in timestamp_dbat\n");
while (d->next && d->wtime > ts)
d = d->next;
return d;
}
-/**static sql_timestamps *
+static sql_timestamps *
timestamp_tsbats(sql_timestamps *ts, int timestamp) {
while (ts->next && ts->wtime > timestamp)
ts = ts->next;
return ts;
-}*/
-
+}
static BAT *
delta_bind_del(sql_dbat *bat, int access)
@@ -58,6 +58,7 @@ delta_bind_del(sql_dbat *bat, int access
#ifdef NDEBUG
(void) access; /* satisfy compiler */
#endif
+ printf("#in delta_bind_del\n");
assert(access == RDONLY || access == RD_INS);
assert(access!=RD_UPD);
@@ -70,6 +71,7 @@ delta_bind_del(sql_dbat *bat, int access
static BAT *
bind_del(sql_trans *tr, sql_table *t, int access)
{
+ printf("#in bind_del\n");
if (!t->data) {
sql_table *ot = tr_find_table(tr->parent, t);
t->data = timestamp_dbat(ot->data, tr->stime);
@@ -594,19 +596,11 @@ dup_tsbats(sql_trans *tr, sql_timestamps
ts->delname = _STRDUP(ots->delname);
ts->wtime = ots->wtime;
- if(ts->insbid) {
- if (is_new)
- ots->insbid = temp_copy(ts->insbid, temp);
- else
- ts->insbid = ebat_copy(ts->insbid, 0, temp);
- }
-
- if(ts->delbid) {
- if (is_new)
- ots->delbid = temp_copy(ts->delbid, temp);
- else
- ts->delbid = ebat_copy(ts->delbid, 0, temp);
- }
+ if(ts->insbid && is_new)
+ ots->insbid = temp_copy(ts->insbid, temp);
+
+ if(ts->delbid && is_new)
+ ots->delbid = temp_copy(ts->delbid, temp);
(void)tr;
return LOG_OK;
@@ -623,13 +617,20 @@ dup_timestamps(sql_trans *tr, sql_table
return ok;
}
-static int
+static void
claim_tab(sql_trans *tr, sql_table *t, int cnt) {
- (void)tr;
- (void)t;
-
- return cnt;
+ sql_timestamps *ts;
+
+ if (!t->timestamps || !t->base.allocated) {
+ sql_table *ot = tr_find_table(tr->parent, t);
+ sql_timestamps *ts = t->timestamps = ZNEW(sql_timestamps),
*ots = timestamp_tsbats(ot->timestamps, tr->stime);
+ dup_tsbats(tr, ots, ts, isNew(ot), isTempTable(t));
+ t->base.allocated = 1;
+ }
+
+ (void)ts;
+ cnt+=1;
}
static void
@@ -734,6 +735,7 @@ delete_tab(sql_trans *tr, sql_table * t,
{
BAT *b = ib;
sql_dbat *bat;
+ sql_timestamps *ts;
node *n;
printf("#in delete_tab\n");
@@ -745,9 +747,19 @@ delete_tab(sql_trans *tr, sql_table * t,
sql_table *ot = tr_find_table(tr->parent, t);
sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat =
timestamp_dbat(ot->data, tr->stime);
dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t));
- t->base.allocated = 1;
+ //t->base.allocated = 1;
}
bat = t->data;
+
+ if (!t->timestamps || !t->base.allocated) {
+ sql_table *ot = tr_find_table(tr->parent, t);
+ sql_timestamps *ts = t->timestamps = ZNEW(sql_timestamps),
*ots = timestamp_tsbats(ot->timestamps, tr->stime);
+ dup_tsbats(tr, ots, ts, isNew(ot), isTempTable(t));
+ t->base.allocated = 1;
+ }
+ ts = t->timestamps;
+ (void)ts;
+
/* delete all cached copies */
for (n = t->columns.set->h; n; n = n->next) {
sql_column *c = n->data;
@@ -845,6 +857,22 @@ count_del(sql_trans *tr, sql_table *t)
return d->cnt;
}
+static size_t
+count_timestamps(sql_trans *tr, sql_table *t) {
+
+ sql_timestamps *ts;
+
+ if(!t->timestamps) {
+ sql_table *ot = tr_find_table(tr->parent, t);
+ t->timestamps = timestamp_tsbats(ot->data, tr->stime);
+ }
+
+ ts = t->timestamps;
+ if (!ts)
+ return 0;
+ return ts->cnt;
+}
+
static sql_column *
find_col( sql_trans *tr, char *sname, char *tname, char *cname )
{
@@ -1759,6 +1787,8 @@ clear_dbat(sql_trans *tr, sql_dbat *bat)
{
BUN sz = 0;
+ printf("#in clear_dbat\n");
+
(void)tr;
if (bat->dbid) {
BAT *b = temp_descriptor(bat->dbid);
@@ -2492,6 +2522,7 @@ bat_storage_init( store_functions *sf)
sf->claim_tab = (claim_tab_fptr)&claim_tab;
sf->count_del = (count_del_fptr)&count_del;
+ sf->count_timestamps = (count_timestamps_fptr)&count_timestamps;
sf->count_col = (count_col_fptr)&count_col;
sf->count_idx = (count_idx_fptr)&count_idx;
sf->sorted_col = (sorted_col_fptr)&sorted_col;
diff --git a/sql/storage/bat/bat_storage.h b/sql/storage/bat/bat_storage.h
--- a/sql/storage/bat/bat_storage.h
+++ b/sql/storage/bat/bat_storage.h
@@ -50,7 +50,7 @@ typedef struct sql_timestamps {
char *insname;
int insbid;
int wtime;
- int cnt;
+ size_t cnt;
struct sql_timestamps *next;
} sql_timestamps;
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
@@ -114,6 +114,7 @@ typedef void (*claim_tab_fptr) (sql_tran
-- check for sortedness
*/
typedef size_t (*count_del_fptr) (sql_trans *tr, sql_table *t);
+typedef size_t (*count_timestamps_fptr) (sql_trans *tr, sql_table *t);
typedef size_t (*count_col_fptr) (sql_trans *tr, sql_column *c, int all /* all
or new only */);
typedef size_t (*count_idx_fptr) (sql_trans *tr, sql_idx *i, int all /* all or
new only */);
typedef int (*sorted_col_fptr) (sql_trans *tr, sql_column *c);
@@ -193,6 +194,7 @@ typedef struct store_functions {
claim_tab_fptr claim_tab;
count_del_fptr count_del;
+ count_timestamps_fptr count_timestamps;
count_col_fptr count_col;
count_idx_fptr count_idx;
sorted_col_fptr sorted_col;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list