Browse Source

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
main
mleku 1 month ago
parent
commit
1851ba39fa
No known key found for this signature in database
  1. 6
      pkg/neo4j/neo4j.go
  2. 17
      pkg/neo4j/query-events.go
  3. 2
      pkg/version/version

6
pkg/neo4j/neo4j.go

@ -65,6 +65,12 @@ func (r *CollectedResult) Len() int {
return len(r.records) 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 // init registers the neo4j database factory
func init() { func init() {
database.RegisterNeo4jFactory(func( database.RegisterNeo4jFactory(func(

17
pkg/neo4j/query-events.go

@ -10,7 +10,6 @@ import (
"git.mleku.dev/mleku/nostr/encoders/hex" "git.mleku.dev/mleku/nostr/encoders/hex"
"git.mleku.dev/mleku/nostr/encoders/tag" "git.mleku.dev/mleku/nostr/encoders/tag"
"next.orly.dev/pkg/database/indexes/types" "next.orly.dev/pkg/database/indexes/types"
"next.orly.dev/pkg/interfaces/resultiter"
"next.orly.dev/pkg/interfaces/store" "next.orly.dev/pkg/interfaces/store"
) )
@ -170,7 +169,7 @@ RETURN e.id AS id,
// Add limit if specified // Add limit if specified
limitClause := "" limitClause := ""
if *f.Limit > 0 { if f.Limit != nil && *f.Limit > 0 {
params["limit"] = *f.Limit params["limit"] = *f.Limit
limitClause = " LIMIT $limit" limitClause = " LIMIT $limit"
} }
@ -182,19 +181,13 @@ RETURN e.id AS id,
} }
// parseEventsFromResult converts Neo4j query results to Nostr events // 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) events := make([]*event.E, 0)
ctx := context.Background() 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 // Iterate through result records
for resultIter.Next(ctx) { for result.Next(ctx) {
record := resultIter.Record() record := result.Record()
if record == nil { if record == nil {
continue continue
} }
@ -252,7 +245,7 @@ func (n *N) parseEventsFromResult(result any) ([]*event.E, error) {
events = append(events, e) 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) return nil, fmt.Errorf("error iterating results: %w", err)
} }

2
pkg/version/version

@ -1 +1 @@
v0.32.0 v0.32.1
Loading…
Cancel
Save