neo4j-contrib / neomodel

An Object Graph Mapper (OGM) for the Neo4j graph database.
https://neomodel.readthedocs.io
MIT License
936 stars 231 forks source link

neomodel_inspect_database - Only writes first relationship #781

Closed schlopmyflop closed 3 months ago

schlopmyflop commented 7 months ago

Expected Behavior

neomodel_inspect_database writes all relationships to StructuredNode

Actual Behavior

neomodel_inspect_database only writes first relationship to StructuredNode

How to Reproduce the Problem

create node with 2 different outgoing relationship types

Simple Example

create (p1:Person)
create (p2:Person)
create (p3:Pet)
create (p1)-[:HAS_FRIEND]->(p2)
create (p1)-[:HAS_PET]->(p3)

run neomodel_inspect_database script

neomodel_inspect_database --db bolt://neo4j:neo4j@localhost:7687 --write-to output.py

output:

from neomodel import StructuredNode, RelationshipTo, StructuredRel, ZeroOrOne

class Person(StructuredNode):
    has_friend = RelationshipTo("Person", "HAS_FRIEND", cardinality=ZeroOrOne)

expected output (which can be replicated by removing the limit clause in RelationshipInspector.outgoing_relationships):

from neomodel import StructuredNode, RelationshipTo, StructuredRel, ZeroOrOne

class Person(StructuredNode):
    has_friend = RelationshipTo("Person", "HAS_FRIEND", cardinality=ZeroOrOne)
    has_pet = RelationshipTo("Pet", "HAS_PET", cardinality=ZeroOrOne)

Cause

the LIMIT clause in RelationshipInspector.outgoing_relationships causes only the first relationship to be returned: https://github.com/neo4j-contrib/neomodel/blob/4bd630261647d1f32f387c413dc57555a3106e2c/neomodel/scripts/neomodel_inspect_database.py#L119-L136

Specifications

Versions

mariusconjeaud commented 4 months ago

Hey ! Now that neomodel 5.3.0 is out and work on async is done ; I hope I can soon have a look into that !

Thank you for the nicely documented issue :)

mariusconjeaud commented 4 months ago

@schlopmyflop Fixed in the attached PR, should make it into 5.3.1