Changeset: d02260c7025d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d02260c7025d Modified Files: sql/storage/bat/bat_storage.c Branch: default Log Message:
fix bug were rolled back new 'rows' aren't marked as deleted diffs (43 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 @@ -286,11 +286,38 @@ segments2cs(sql_trans *tr, segments *seg if (s->start >= nr) break; if (s->ts == tr->tid && s->end != s->start) { + BUN cnt = BATcount(b); + if (cnt < s->start) { /* first mark as deleted ! */ + size_t lnr = s->start-cnt; + size_t pos = cnt; + dst = (uint32_t *) Tloc(b, 0) + (pos/32); + uint32_t cur = 0; + + size_t used = pos&31, end = 32; + if (used) { + if (lnr < (32-used)) + end = used + lnr; + for(size_t j=used; j < end; j++, lnr--) + cur |= 1U<<j; + *dst++ |= cur; + cur = 0; + } + size_t full = lnr/32; + size_t rest = lnr%32; + for(size_t i = 0; i<full; i++, lnr-=32) + *dst++ = ~0; + if (rest) { + for(size_t j=0; j < rest; j++, lnr--) + cur |= 1U<<j; + *dst |= cur; + } + assert(lnr==0); + } b->batDirtydesc = true; b->theap->dirty = true; size_t lnr = s->end-s->start; size_t pos = s->start; - dst = (uint32_t *) Tloc(b, 0) + (s->start/32); + dst = (uint32_t *) Tloc(b, 0) + (pos/32); uint32_t cur = 0; if (s->deleted) { size_t used = pos&31, end = 32; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list