diff --git a/lib/neo4j/core/query.rb b/lib/neo4j/core/query.rb index 82601d67..54266ca1 100644 --- a/lib/neo4j/core/query.rb +++ b/lib/neo4j/core/query.rb @@ -164,7 +164,7 @@ def inspect # DETACH DELETE clause # @return [Query] - METHODS = %w[start match optional_match call using where create create_unique merge set on_create_set on_match_set remove unwind delete detach_delete with with_distinct return order skip limit] # rubocop:disable Metrics/LineLength + METHODS = %w[start match optional_match call using where create create_unique merge on_create_set on_match_set set remove unwind delete detach_delete with with_distinct return order skip limit] # rubocop:disable Metrics/LineLength BREAK_METHODS = %(with with_distinct call) CLAUSIFY_CLAUSE = proc { |method| const_get(method.to_s.split('_').map(&:capitalize).join + 'Clause') } diff --git a/spec/neo4j/core/query_spec.rb b/spec/neo4j/core/query_spec.rb index a9135797..aa7aa150 100644 --- a/spec/neo4j/core/query_spec.rb +++ b/spec/neo4j/core/query_spec.rb @@ -855,6 +855,11 @@ def self.it_generates(cypher, params = {}) it_generates 'ON CREATE SET n = {name: "Brian"}' end + # ON CREATE SET must come before SET (and immediately after MERGE) or the cypher is invalid + describe '.on_create_set(n: { name: "Brian" }).set(n: { age: 30 })' do + it_generates 'ON CREATE SET n.`name` = {setter_n_name} SET n.`age` = {setter_n_age}', setter_n_name: 'Brian', setter_n_age: 30 + end + describe '.on_create_set(n: {})' do it_generates '', {} end @@ -877,6 +882,11 @@ def self.it_generates(cypher, params = {}) it_generates 'ON MATCH SET n = {name: "Brian"}' end + # ON MATCH SET must come before SET (and immediately after MERGE) or the cypher is invalid + describe '.on_match_set(n: { name: "Brian" }).set(n: { age: 30 })' do + it_generates 'ON MATCH SET n.`name` = {setter_n_name} SET n.`age` = {setter_n_age}', setter_n_name: 'Brian', setter_n_age: 30 + end + describe '.on_match_set(n: {})' do it_generates '', {} end