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

Reply via email to