@neo4j/cypher-builder
Advanced tools
Changelog
2.0.2
#463 57a3f9c
Thanks @angrykoala! - Fix order of set remove subclauses. The generated cypher will now maintain the order of multiple SET
and REMOVE
statements.
For example:
const matchQuery = new Cypher.Match(new Cypher.Pattern(personNode, { labels: ["Person"] }))
.where(personNode, { name: nameParam })
.set([personNode.property("name"), evilKeanu])
.remove(personNode.property("anotherName"))
.set([personNode.property("anotherName"), new Cypher.Param(nameParam)])
.set([personNode.property("oldName"), new Cypher.Param(nameParam)])
.return(personNode);
Before
MATCH (this0:Person)
WHERE this0.name = $param0
SET
this0.name = $param1
this0.anotherName = $param2,
this0.oldName = $param3
REMOVE this0.anotherName
RETURN this0
After
MATCH (this0:Person)
WHERE this0.name = $param0
SET
this0.name = $param1
REMOVE this0.anotherName
SET
this0.anotherName = $param2,
this0.oldName = $param3
RETURN this0
Changelog
2.0.1
#457 85aa393
Thanks @angrykoala! - Fix types in Unwind
to reflect its behaviour in Cypher:
*
Changelog
2.0.0
#389 88f4928
Thanks @angrykoala! - Patterns no longer create a variable by default
const pattern = new Cypher.Pattern();
Before:
(this0)
Now:
()
#390 038d8b5
Thanks @angrykoala! - Clause build options are now passed as an object rather than parameters:
myClause.build({
prefix: "another-this",
extraParams: {
myParam: "hello",
},
labelOperator: "&",
});
All parameters are optional, and build
can still be called without parameters
#389 f5135f5
Thanks @angrykoala! - Remove support for adding new columns into an existing with clause with .with
, the method addColumns
should be used instead
#408 bba9d81
Thanks @angrykoala! - Escape literal strings if they contain invalid characters:
new Cypher.Literal(`Hello "World"`);
Would get translated into the following Cypher:
"Hello \"World\""
#409 adf599f
Thanks @angrykoala! - Cypher.Raw no longer exposes Cypher.Environment variable. It provides a CypherRawContext
instance with a compile
method to compile nested elements in custom cypher instead
#407 88a300a
Thanks @angrykoala! - Remove method Cypher.concat
, Cypher.utils.concat
should be used instead
#447 b82be57
Thanks @angrykoala! - Remove Path
and NamedPath
in favor of PathVariable
and NamedPathVariable
#389 f5135f5
Thanks @angrykoala! - Removes the following deprecated features:
pointDistance
utils.compileCypher
RawCypher
onCreate
method in Merge
clausesinnerWith
method in Call
clausesPatternComprehension
second parametercdc
namespace:
cdc.current
cdc.earliest
cdc.query
rTrim
and lTrim
Pattern.withoutLabels
Pattern.withoutVariable
Pattern.withProperties
Pattern.withVariables
Pattern.related().withoutType
Pattern.related().withDirection
Pattern.related().withLength
Pattern.related().getVariables
Relationship.type
Node
and Relationship
classesNode
directly in constructor of clauses#453 f8a8120
Thanks @angrykoala! - Remove support for fine-grained prefix configuration
No longer supported:
myClause.build({
variable: "var_prefix_",
params: "param_prefix_",
});
#410 961933f
Thanks @angrykoala! - Removes previous
argument from Pattern
constructor. This argument was never meant to be used externally and now it is not accessible
#391 d416ee6
Thanks @angrykoala! - Fix TypeScript typings for boolean operators when using array spread:
Cypher.and
Cypher.or
Cypher.xor
The following:
const predicates: Cypher.Predicate[] = [];
const andPredicate = Cypher.and(...predicates);
Will now return the correct type Cypher.Predicate | undefined
. This change means that additional checks may be needed when using boolean operators:
const predicates = [Cypher.true, Cypher.false];
const andPredicate = Cypher.and(...predicates); // type Cypher.Predicate | undefined
Passing parameters without spread will still return a defined type
#447 b82be57
Thanks @angrykoala! - Remove assignToPath
method from clauses, in favor of assignTo
in Patterns for the following clauses:
Match
Merge
Create
Before:
new Cypher.Match(pattern).assignToPath(pathVariable).return(pathVariable);
Now:
new Cypher.Match(pattern.assignTo(pathVariable)).return(pathVariable);
Generates the Cypher:
MATCH p = ()-[]-()
RETURN p
#389 f5135f5
Thanks @angrykoala! - Improves error message when multiple clauses are added to the same clause
#389 f5135f5
Thanks @angrykoala! - Add support for passing an existing With clause to With.with
#448 253a6df
Thanks @angrykoala! - Support for Variable | undefined
as an input for Patterns
Changelog
1.22.4
e0d7f4b
Thanks @angrykoala! - Deprecates CypherEnvironment
exported types in favor of RawCypherContext
for usage in Cypher.Raw
Changelog
1.22.3
#444 be3c49e
Thanks @angrykoala! - Deprecate assignToPath
in clauses in favor of assignTo
in Pattern
Before:
new Cypher.Match(pattern).assignToPath(path).return(path);
Now:
new Cypher.Match(pattern.assignTo(path)).return(path);
Generates the Cypher:
MATCH p = ()-[]-()
RETURN p
#444 0a5bf6c
Thanks @angrykoala! - Deprecate Cypher.Path
and Cypher.NamedPath
in favor of Cypher.PathVariable
and Cypher.NamedPathVariable
respectively
Changelog
1.22.2
#437 fa520b8
Thanks @angrykoala! - Add support for patterns in size()
for Neo4j 4
const pattern = new Cypher.Pattern(new Cypher.Node()).related().to();
const cypherFunction = Cypher.size(pattern);
size((this0)-[this1]->(this2))
Changelog
1.22.1
#430 f662ddd
Thanks @angrykoala! - Deprecate using a Node
as a constructor of Cypher.PatternComprehension
:
const node = new Cypher.Node();
const comprehension = new Cypher.PatternComprehension(node);
Changelog
1.22.0
#421 b9b75cd
Thanks @angrykoala! - Add support for OPTIONAL CALL
:
new Cypher.OptionalCall(subquery);
Alternatively
new Cypher.Call(subquery).optional();
To generate the following Cypher:
OPTIONAL CALL {
// Subquery
}
#420 77d8795
Thanks @angrykoala! - Add support for OFFSET
as an alias for SKIP
:
const matchQuery = new Cypher.Return(movieNode).orderBy([movieNode.property("age")]).offset(new Cypher.Param(10));
RETURN this0
ORDER BY this0.age ASC
OFFSET $param0
#425 e899ceb
Thanks @angrykoala! - Add support for order by, skip and limit chaining after the following clauses:
Changelog
1.21.0
#413 0f2dfe6
Thanks @angrykoala! - Add support for SHORTEST keyword in match and its variations:
.shortest(k)
.shortestGroups(k)
.allShortest
.any
For example:
new Cypher.Match(pattern).shortest(2).return(node);
MATCH ALL SHORTEST (this0:Movie)-[this1]->(this2:Person)
RETURN this0
#419 c7dd297
Thanks @angrykoala! - Add support for labels in set and remove:
const movie = new Cypher.Node();
const clause = new Cypher.Match(new Cypher.Pattern(movie)).set(movie.label("NewLabel"));
MATCH (this0)
SET
this0:NewLabel
Changelog
1.20.1
721fb85
Thanks @angrykoala! - Deprecates Cypher.concat
in favor of Cypher.utils.concat