static BAT * delta_full_bat_( sql_column *c, sql_delta *bat, int temp, BAT *d, BAT *s) { /* return full normalized column bat if (s) { b := b.semijoin(s); i := i.semijoin(s); u := u.semijoin(s); } b := b.kunion(i); b := b.kdiff(u); b := b.kunion(u); b := b.kdiff(reverse(d)); */ BAT *r, *b, *u, *i = temp_descriptor(bat->ibid); r = i; if (temp) { if (s) { r = BATsemijoin(i,s); bat_destroy(i); } return r; } b = temp_descriptor(bat->bid); u = temp_descriptor(bat->ubid); if (s) { BAT *t; t = BATsemijoin(b,s); bat_destroy(b); b = t; t = BATsemijoin(i,s); bat_destroy(i); i = t; t = BATsemijoin(u,s); bat_destroy(u); u = t; } assert(b->ttype == i->ttype); if (BATcount(i)) { r = BATkunion(b,i); bat_destroy(b); b = r; } bat_destroy(i); if (BATcount(u)) { r = BATkdiff(b,u); bat_destroy(b); b = r; assert(b->ttype == u->ttype); r = BATkunion(b,u); bat_destroy(b); b = r; } bat_destroy(u); if (d && BATcount(d)) { r = BATkdiff(b,BATmirror(d)); bat_destroy(b); b = r; } if (!bat->cached && !c->base.wtime && !s) bat->cached = temp_descriptor(b->batCacheid); return b; }
log_bid ebat_copy(log_bid b, oid ibase, int temp) { /* make a copy of b */ BAT *o = temp_descriptor(b); BAT *c; log_bid r; if (!ebats[o->ttype]) ebats[o->ttype] = bat_new(TYPE_void, o->ttype, 0); if (!temp && BATcount(o)) { c = BATcopy(o, TYPE_void, o->ttype, TRUE); BATseqbase(c, ibase ); c->H->dense = 1; BATcommit(o); BATcommit(c); bat_set_access(c, BAT_READ); r = temp_create(c); bat_destroy(c); } else { c = ebats[o->ttype]; r = temp_create(c); } bat_destroy(o); return r; }
BAT * e_BAT(int type) { if (!ebats[type]) ebats[type] = bat_new(TYPE_void, type, 0); return temp_descriptor(ebats[type]->batCacheid); }
static BAT * delta_cands(sql_trans *tr, sql_table *t) { sql_dbat *d; BAT *tids; if (!t->data) { sql_table *ot = tr_find_table(tr->parent, t); t->data = timestamp_dbat(ot->data, tr->stime); } d = t->data; if (!store_initialized && d->cached) return temp_descriptor(d->cached->batCacheid); tids = _delta_cands(tr, t); if (!store_initialized && !d->cached) /* only cache during catalog loading */ d->cached = temp_descriptor(tids->batCacheid); return tids; }
BAT * delta_full_bat( sql_column *c, sql_delta *bat, int temp, BAT *d, BAT *s) { if (bat->cached && s) return BATsemijoin(bat->cached, s); if (bat->cached) return temp_descriptor(bat->cached->batCacheid); return delta_full_bat_( c, bat, temp, d, s); }
log_bid ebat2real(log_bid b, oid ibase) { /* make a copy of b */ BAT *o = temp_descriptor(b); BAT *c = BATcopy(o, TYPE_void, ATOMtype(o->ttype), TRUE); log_bid r; BATseqbase(c, ibase ); c->H->dense = 1; r = temp_create(c); bat_destroy(c); bat_destroy(o); return r; }
log_bid temp_copy(log_bid b, int temp) { /* make a copy of b, if temp is set only create a empty bat */ BAT *o = temp_descriptor(b); BAT *c; log_bid r; if (!temp) { c = BATcopy(o, o->htype, o->ttype, TRUE); bat_set_access(c, BAT_READ); BATcommit(c); } else { c = bat_new(o->htype, o->ttype, COLSIZE); } r = temp_create(c); bat_destroy(c); bat_destroy(o); return r; }
static int table_dump(sql_trans *tr, sql_table *t) { node *n = cs_first_node(&t->columns); int i, l = cs_size(&t->columns); BAT **b = (BAT**)GDKzalloc(sizeof(BAT*) * l); (void)tr; for (i = 0; n; n = n->next, i++) { sql_column *c = n->data; sql_delta *bat = c->data; b[i] = temp_descriptor(bat->bid); } BATmultiprintf(GDKstdout, l +1, b, TRUE, 0, 1); for (i = 0; i < l; i++) bat_destroy(b[i]); GDKfree(b); return 0; }
static int table_check(sql_trans *tr, sql_table *t) { node *n = cs_first_node(&t->columns); BUN cnt = BUN_NONE; (void)tr; for (; n; n = n->next) { sql_column *c = n->data; sql_delta *bat = c->data; BAT *b = temp_descriptor(bat->bid); if (cnt == BUN_NONE) { cnt = BATcount(b); } else if (cnt != BATcount(b)) { assert(0); return (int)(cnt - BATcount(b)); } bat_destroy(b); } return 0; }
log_bid eubat_copy(log_bid b, int temp) { /* make a copy of b */ BAT *o = temp_descriptor(b); BAT *c; log_bid r; if (!eubats[o->ttype]) eubats[o->ttype] = bat_new(TYPE_oid, o->ttype, 0, TRANSIENT); if (!temp && BATcount(o)) { c = BATcopy(o, TYPE_oid, o->ttype, TRUE, PERSISTENT); BATcommit(c); r = temp_create(c); bat_set_access(c, BAT_READ); bat_destroy(c); } else { c = eubats[o->ttype]; r = temp_create(c); } bat_destroy(o); return r; }
static BAT * delta_full_bat_( sql_column *c, sql_delta *bat, int temp) { /* return full normalized column bat * b := b.copy() b := b.append(i); b := b.replace(u); */ BAT *r, *b, *ui, *uv, *i = temp_descriptor(bat->ibid); int needcopy = 1; if (!i) return NULL; r = i; if (temp) return r; b = temp_descriptor(bat->bid); if (!b) { b = i; } else { if (BATcount(i)) { r = COLcopy(b, b->ttype, true, TRANSIENT); bat_destroy(b); if (r == NULL) { bat_destroy(i); return NULL; } b = r; if (BATappend(b, i, NULL, true) != GDK_SUCCEED) { bat_destroy(b); bat_destroy(i); return NULL; } needcopy = 0; } bat_destroy(i); } if (bat->uibid && bat->ucnt) { ui = temp_descriptor(bat->uibid); uv = temp_descriptor(bat->uvbid); if (ui && BATcount(ui)) { if (needcopy) { r = COLcopy(b, b->ttype, true, TRANSIENT); bat_destroy(b); b = r; if(b == NULL) { bat_destroy(ui); bat_destroy(uv); return NULL; } } if (void_replace_bat(b, ui, uv, true) != GDK_SUCCEED) { bat_destroy(ui); bat_destroy(uv); bat_destroy(b); return NULL; } } bat_destroy(ui); bat_destroy(uv); } (void)c; if (!store_initialized && !bat->cached) bat->cached = b; return b; }