Changeset: b5ef79db930a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b5ef79db930a Modified Files: sql/storage/bat/bat_storage.c sql/storage/store.c Branch: Jul2021 Log Message:
make sure we include the deleted last rows when we compute the mask (to be stored on disk). for other cases we don't want to include the last rows, ie we hope that reduces the need for bit vectors into simple ranges (ie dense candidate bats). diffs (60 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 @@ -303,6 +303,24 @@ segs_end( segments *segs, sql_trans *tr, return cnt; } +static size_t +segs_end_include_deleted( segments *segs, sql_trans *tr, sql_table *table) +{ + size_t cnt = 0; + + lock_table(tr->store, table->base.id); + segment *s = segs->h, *l = NULL; + + for(;s; s = s->next) { + if (s->ts == tr->tid || SEG_IS_VALID(s, tr)) + l = s; + } + if (l) + cnt = l->end; + unlock_table(tr->store, table->base.id); + return cnt; +} + static int segments2cs(sql_trans *tr, segments *segs, column_storage *cs, sql_table *t) { @@ -313,9 +331,9 @@ segments2cs(sql_trans *tr, segments *seg return LOG_ERR; segment *s = segs->h; - size_t nr = segs_end(segs, tr, t); + size_t nr = segs_end_include_deleted(segs, tr, t); size_t rounded_nr = ((nr+31)&~31); - if (rounded_nr >= BATcapacity(b) && BATextend(b, rounded_nr) != GDK_SUCCEED) { + if (rounded_nr > BATcapacity(b) && BATextend(b, rounded_nr) != GDK_SUCCEED) { bat_destroy(b); return LOG_ERR; } diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -5710,10 +5710,12 @@ sql_trans_drop_column(sql_trans *tr, sql oid rid; next->colnr--; - rid = store->table_api.column_find_row(tr, cid, &next->base.id, NULL); - assert(!is_oid_nil(rid)); - if ((res = store->table_api.column_update_value(tr, cnr, rid, &next->colnr))) - return res; + if (!isDeclaredTable(t)) { + rid = store->table_api.column_find_row(tr, cid, &next->base.id, NULL); + assert(!is_oid_nil(rid)); + if ((res = store->table_api.column_update_value(tr, cnr, rid, &next->colnr))) + return res; + } } } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list