From 1851ba39faeb48be9e4e1521909e561688f8e2f7 Mon Sep 17 00:00:00 2001 From: mleku Date: Wed, 3 Dec 2025 12:59:23 +0000 Subject: [PATCH] fix type and nil panic errors 1. Added Err() method to CollectedResult (pkg/neo4j/neo4j.go:68-72): - The resultiter.Neo4jResultIterator interface requires Err() error - CollectedResult was missing this method, causing the type assertion to fail - Since CollectedResult pre-fetches all records, Err() always returns nil 2. Fixed nil pointer dereference in buildCypherQuery (pkg/neo4j/query-events.go:173): - Changed if *f.Limit > 0 to if f.Limit != nil && *f.Limit > 0 - This prevents a panic when filters don't specify a limit 3. Simplified parseEventsFromResult signature (pkg/neo4j/query-events.go:185): - Changed from func (n *N) parseEventsFromResult(result any) to accept *CollectedResult directly - This eliminates the runtime type assertion since ExecuteRead already returns *CollectedResult - Removed the now-unused resultiter import --- pkg/neo4j/neo4j.go | 6 ++++++ pkg/neo4j/query-events.go | 17 +++++------------ pkg/version/version | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/pkg/neo4j/neo4j.go b/pkg/neo4j/neo4j.go index d38d093..f7bfbfc 100644 --- a/pkg/neo4j/neo4j.go +++ b/pkg/neo4j/neo4j.go @@ -65,6 +65,12 @@ func (r *CollectedResult) Len() int { return len(r.records) } +// Err returns any error from iteration (always nil for pre-collected results) +// This method satisfies the resultiter.Neo4jResultIterator interface +func (r *CollectedResult) Err() error { + return nil +} + // init registers the neo4j database factory func init() { database.RegisterNeo4jFactory(func( diff --git a/pkg/neo4j/query-events.go b/pkg/neo4j/query-events.go index 5ea77ad..3ee574c 100644 --- a/pkg/neo4j/query-events.go +++ b/pkg/neo4j/query-events.go @@ -10,7 +10,6 @@ import ( "git.mleku.dev/mleku/nostr/encoders/hex" "git.mleku.dev/mleku/nostr/encoders/tag" "next.orly.dev/pkg/database/indexes/types" - "next.orly.dev/pkg/interfaces/resultiter" "next.orly.dev/pkg/interfaces/store" ) @@ -170,7 +169,7 @@ RETURN e.id AS id, // Add limit if specified limitClause := "" - if *f.Limit > 0 { + if f.Limit != nil && *f.Limit > 0 { params["limit"] = *f.Limit limitClause = " LIMIT $limit" } @@ -182,19 +181,13 @@ RETURN e.id AS id, } // parseEventsFromResult converts Neo4j query results to Nostr events -func (n *N) parseEventsFromResult(result any) ([]*event.E, error) { +func (n *N) parseEventsFromResult(result *CollectedResult) ([]*event.E, error) { events := make([]*event.E, 0) ctx := context.Background() - // Type assert to the result iterator interface - resultIter, ok := result.(resultiter.Neo4jResultIterator) - if !ok { - return nil, fmt.Errorf("invalid result type: expected resultiter.Neo4jResultIterator") - } - // Iterate through result records - for resultIter.Next(ctx) { - record := resultIter.Record() + for result.Next(ctx) { + record := result.Record() if record == nil { continue } @@ -252,7 +245,7 @@ func (n *N) parseEventsFromResult(result any) ([]*event.E, error) { events = append(events, e) } - if err := resultIter.Err(); err != nil { + if err := result.Err(); err != nil { return nil, fmt.Errorf("error iterating results: %w", err) } diff --git a/pkg/version/version b/pkg/version/version index ae99bf7..4426b61 100644 --- a/pkg/version/version +++ b/pkg/version/version @@ -1 +1 @@ -v0.32.0 \ No newline at end of file +v0.32.1 \ No newline at end of file