Changeset: 67918c4ef78d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/67918c4ef78d
Modified Files:
        sql/server/rel_basetable.c
        sql/storage/bat/bat_storage.c
Branch: nested
Log Message:

cleanup count* functions


diffs (42 lines):

diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -290,7 +290,7 @@ rel_nested_basetable(mvc *sql, sql_table
        ba->basenr = sql->nid;
        sql->nid += end;
        if (isTable(t) && t->s && !isDeclaredTable(t)) /* count active rows 
only */
-               set_count_prop(sql->sa, rel, 
(BUN)store->storage_api.count_del(sql->session->tr, t, CNT_ACTIVE));
+               set_count_prop(sql->sa, rel, 
(BUN)store->storage_api.count_col(sql->session->tr, 
ol_last_node(t->columns)->data, CNT_ACTIVE));
        assert(atname);
        if (!a_cmp_obj_name(atname, t->base.name))
                ba->name = atname;
@@ -381,7 +381,7 @@ rel_basetable(mvc *sql, sql_table *t, sq
        ba->basenr = sql->nid;
        sql->nid += end;
        if (isTable(t) && t->s && !isDeclaredTable(t)) /* count active rows 
only */
-               set_count_prop(sql->sa, rel, 
(BUN)store->storage_api.count_del(sql->session->tr, t, CNT_ACTIVE));
+               set_count_prop(sql->sa, rel, 
(BUN)store->storage_api.count_col(sql->session->tr, 
ol_last_node(t->columns)->data, CNT_ACTIVE));
        assert(atname);
        if (!a_cmp_obj_name(atname, t->base.name))
                ba->name = atname;
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
@@ -2836,8 +2836,16 @@ count_del(sql_trans *tr, sql_table *t, i
                return d->cs.ucnt;
        if (access == RD_INS)
                return count_inserts(d->segs->h, tr);
-       if (access == CNT_ACTIVE) /* special case for counting the number of 
segments */
+       assert(access != CNT_ACTIVE);
+       if (access == CNT_SEGS) /* special case for counting the number of 
segments */
                return count_segs(d->segs->h);
+       if (access == CNT_RDONLY) {
+               size_t cnt = segs_end(d->segs, tr, t);
+               lock_table(tr->store, t);
+               cnt -= count_deletes_in_range(d->segs->h, tr, 0, cnt);
+               unlock_table(tr->store, t);
+               return cnt;
+       }
        return count_deletes(d->segs->h, tr);
 }
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to