Releases: neo4j/cypher-builder
v2.1.0
Minor Changes
-
#471
1c671f1
Thanks @angrykoala! - Add support for dynamic labels by passing an expression tonode.label
:new Cypher.Match(new Cypher.Pattern(movie)).set(movie.label(Cypher.labels(anotherNode)));
MATCH (this0) SET this0:$(labels(this1))
Patch Changes
-
#476
79e1e87
Thanks @angrykoala! - Escapes variables using the following reserved words (case insensitive):-
where
-
is
-
contains
-
in
For example:
new Cypher.NamedVariable("Where").property("title");
Generates the following Cypher
`Where`.title
-
v2.0.2
Patch Changes
-
#463
57a3f9c
Thanks @angrykoala! - Fix order of set remove subclauses. The generated cypher will now maintain the order of multipleSET
andREMOVE
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
v2.0.1
Patch Changes
-
#457
85aa393
Thanks @angrykoala! - Fix types inUnwind
to reflect its behaviour in Cypher:- Unwind without alias is not supported in Cypher.
- Unwind does not support
*
- Unwind does not support multiple columns
v2.0.0
Major Changes
-
#389
88f4928
Thanks @angrykoala! - Patterns no longer create a variable by defaultconst 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 methodaddColumns
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 aCypherRawContext
instance with acompile
method to compile nested elements in custom cypher instead -
#407
88a300a
Thanks @angrykoala! - Remove methodCypher.concat
,Cypher.utils.concat
should be used instead -
#447
b82be57
Thanks @angrykoala! - RemovePath
andNamedPath
in favor ofPathVariable
andNamedPathVariable
-
#389
f5135f5
Thanks @angrykoala! - Removes the following deprecated features:pointDistance
utils.compileCypher
RawCypher
onCreate
method inMerge
clausesinnerWith
method inCall
clausesPatternComprehension
second parametercdc
namespace:cdc.current
cdc.earliest
cdc.query
rTrim
andlTrim
Pattern.withoutLabels
Pattern.withoutVariable
Pattern.withProperties
Pattern.withVariables
Pattern.related().withoutType
Pattern.related().withDirection
Pattern.related().withLength
Pattern.related().getVariables
Relationship.type
- Labels, types and properties in
Node
andRelationship
classes - Using
Node
directly in constructor of clauses
-
#453
f8a8120
Thanks @angrykoala! - Remove support for fine-grained prefix configurationNo longer supported:
myClause.build({ variable: "var_prefix_", params: "param_prefix_", });
-
#410
961933f
Thanks @angrykoala! - Removesprevious
argument fromPattern
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! - RemoveassignToPath
method from clauses, in favor ofassignTo
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
Patch Changes
-
#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 toWith.with
-
#448
253a6df
Thanks @angrykoala! - Support forVariable | undefined
as an input for Patterns
v1.22.4
Patch Changes
- #451
e0d7f4b
Thanks @angrykoala! - DeprecatesCypherEnvironment
exported types in favor ofRawCypherContext
for usage inCypher.Raw
v1.22.3
Patch Changes
-
#444
be3c49e
Thanks @angrykoala! - DeprecateassignToPath
in clauses in favor ofassignTo
in PatternBefore:
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! - DeprecateCypher.Path
andCypher.NamedPath
in favor ofCypher.PathVariable
andCypher.NamedPathVariable
respectively
v1.22.2
Patch Changes
-
#437
fa520b8
Thanks @angrykoala! - Add support for patterns insize()
for Neo4j 4const pattern = new Cypher.Pattern(new Cypher.Node()).related().to(); const cypherFunction = Cypher.size(pattern);
size((this0)-[this1]->(this2))
v1.22.1
Patch Changes
-
#430
f662ddd
Thanks @angrykoala! - Deprecate using aNode
as a constructor ofCypher.PatternComprehension
:const node = new Cypher.Node(); const comprehension = new Cypher.PatternComprehension(node);
v1.22.0
Minor Changes
-
#421
b9b75cd
Thanks @angrykoala! - Add support forOPTIONAL CALL
:new Cypher.OptionalCall(subquery);
Alternatively
new Cypher.Call(subquery).optional();
To generate the following Cypher:
OPTIONAL CALL { // Subquery }
Patch Changes
-
#420
77d8795
Thanks @angrykoala! - Add support forOFFSET
as an alias forSKIP
: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:- Call
- Merge
- Create
- Match
- Unwind
- Procedures
v1.21.0
Minor Changes
-
#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