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:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
v0.32.0
|
||||
v0.32.1
|
||||
Reference in New Issue
Block a user