From 909cc8813d4eebdd33c1487d765f932e3546386a Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Thu, 25 Sep 2025 12:03:42 -0700 Subject: [PATCH] Implement count --- zooid/events.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/zooid/events.go b/zooid/events.go index d166cb7..529423d 100644 --- a/zooid/events.go +++ b/zooid/events.go @@ -3,7 +3,6 @@ package zooid import ( "encoding/hex" "encoding/json" - "errors" "fmt" "iter" @@ -314,6 +313,18 @@ func (events *EventStore) ReplaceEvent(evt nostr.Event) error { return nil } -func (events *EventStore) CountEvents(nostr.Filter) (uint32, error) { - return 0, errors.New("COUNT is not supported") +func (events *EventStore) CountEvents(filter nostr.Filter) (uint32, error) { + // Build a count query based on the select query but with COUNT(*) instead + qb := events.buildSelectQuery(filter, 0) + + // Convert the select query to a count query + countQb := squirrel.Select("COUNT(*)").FromSelect(qb, "subquery") + + var count uint32 + err := countQb.RunWith(GetDb()).QueryRow().Scan(&count) + if err != nil { + return 0, fmt.Errorf("failed to count events: %w", err) + } + + return count, nil }