neo4jrb / activegraph

An active model wrapper for the Neo4j Graph Database for Ruby.
http://neo4jrb.io
MIT License
1.4k stars 277 forks source link

Missing error handling when there is a node property existence constraint #1626

Open kapone89 opened 4 years ago

kapone89 commented 4 years ago

When I add a node property existence constraint to the database and try to create invalid node using the ActiveNode model, there is no error and new object is returned. However the node is not created.

Code example (inline, gist, or repo)

Neo4j::ActiveBase.current_session.query "CREATE CONSTRAINT ON (n:Bug) ASSERT n.uuid IS UNIQUE"
Neo4j::ActiveBase.current_session.query "CREATE CONSTRAINT ON (n:Bug) ASSERT exists(n.desc)"

class Bug
  include Neo4j::ActiveNode
end

# using raw query
Neo4j::ActiveBase.current_session.query "CREATE (b:Bug)"
CYPHER CREATE (b:Bug) 
Neo4j::Core::CypherSession::SchemaErrors::ConstraintValidationFailedError:   Cypher error: Neo.ClientError.Schema.ConstraintValidationFailed: org.neo4j.kernel.api.exceptions.ConstraintViolationTransactionFailureException: Node(3666) with label `Bug` must have the property `desc`

# using ActiveNode
b = Bug.create!
CYPHER CREATE (n:`Bug`) SET n = {props} RETURN n | {:props=>{:uuid=>"238996bb-65a9-479a-bdb1-cf58a1025fb5"}}
=> #<Bug uuid: "238996bb-65a9-479a-bdb1-cf58a1025fb5">

# however the node is not created
Bug.count
CYPHER MATCH (n:`Bug`) RETURN count(n) AS count
=> 0

Runtime information:

Neo4j database version: 3.5.16-enterprise neo4j gem version: 9.6.2 neo4j-core gem version: 9.0.0