fix type and nil panic errors
Some checks failed
Go / build-and-release (push) Has been cancelled

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
This commit is contained in:
2025-12-03 12:59:23 +00:00
parent de290aeb25
commit 1851ba39fa
3 changed files with 12 additions and 13 deletions

View File

@@ -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)
}