-
#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))
-
#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
-
#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
-
#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
-
#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
-
#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
- #451
e0d7f4b
Thanks @angrykoala! - DeprecatesCypherEnvironment
exported types in favor ofRawCypherContext
for usage inCypher.Raw
-
#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
-
#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))
-
#430
f662ddd
Thanks @angrykoala! - Deprecate using aNode
as a constructor ofCypher.PatternComprehension
:const node = new Cypher.Node(); const comprehension = new Cypher.PatternComprehension(node);
-
#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 }
-
#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
-
#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
- #374
721fb85
Thanks @angrykoala! - DeprecatesCypher.concat
in favor ofCypher.utils.concat
-
#399
02c7e99
Thanks @angrykoala! - Add support for variable scope in CALL:const movieNode = new Cypher.Node(); const actorNode = new Cypher.Node(); const clause = new Cypher.Call(new Cypher.Create(new Cypher.Pattern(movieNode).related().to(actorNode)), [ movieNode, actorNode, ]);
CALL (this0, this1) { CREATE (this0)-[this2]->(this1) }
-
#403
eed7686
Thanks @angrykoala! - Add support for addingCall
clauses toMatch
andWith
:const match = new Cypher.Match(new Cypher.Pattern(movieNode, { labels: ["Movie"] })) .call(new Cypher.Create(new Cypher.Pattern(movieNode).related().to(actorNode)), [movieNode]) .return(movieNode);
MATCH (this0:Movie) CALL (this0) { CREATE (this0)-[this2]->(this1) } RETURN this0
-
#396
f39056f
Thanks @angrykoala! - Add support for GQL type aliases introduced in Neo4j 5.23:Cypher.TYPE.TIMESTAMP_WITHOUT_TIME_ZONE
Cypher.TYPE.TIME_WITHOUT_TIME_ZONE
Cypher.TYPE.TIMESTAMP_WITH_TIME_ZONE
Cypher.TYPE.TIME_WITH_TIME_ZONE
-
#373
99eb375
Thanks @angrykoala! - Add support fornew Union().distinct()
-
#378
51ae499
Thanks @angrykoala! - Add support for trimCharacter on rtrim and ltrim -
#377
d4c790e
Thanks @angrykoala! - Add support forbtrim
-
#378
51ae499
Thanks @angrykoala! - DeprecateslTrim
andrTrim
in favour ofltrim
andrtrim
-
#369
3514bdd
Thanks @angrykoala! - Add support for LOAD CSV:const row = new Cypher.Variable(); const loadClause = new Cypher.LoadCSV("https://data.neo4j.com/bands/artists.csv", row).return(row);
-
#354
ef49a96
Thanks @angrykoala! - Add support for quantifier patterns:const m = new Cypher.Node(); const m2 = new Cypher.Node(); const quantifiedPath = new Cypher.QuantifiedPath( new Cypher.Pattern(m, { labels: ["Movie"], properties: { title: new Cypher.Param("V for Vendetta") } }), new Cypher.Pattern({ labels: ["Movie"] }) .related({ type: "ACTED_IN" }) .to({ labels: ["Person"] }) .quantifier({ min: 1, max: 2 }), new Cypher.Pattern(m2, { labels: ["Movie"], properties: { title: new Cypher.Param("Something's Gotta Give") }, }) ); const query = new Cypher.Match(quantifiedPath).return(m2);
Cypher
MATCH (this0:Movie { title: $param0 }) ((:Movie)-[:ACTED_IN]->(:Person)){1,2} (this1:Movie { title: $param1 }) RETURN this1
-
#371
6d1b0c4
Thanks @angrykoala! - AddLOAD CSV
related functions:file()
linenumber()
-
#366
5fa3f51
Thanks @angrykoala! - Add support for multiple expressions on the simple CASE:matchClause.return( new Cypher.Case(person.property("eyes")) .when(new Cypher.Literal("brown"), new Cypher.Literal("hazel")) .then(new Cypher.Literal(2))
-
#365
6f20b0a
Thanks @angrykoala! - Add support forCALL { … } IN CONCURRENT TRANSACTIONS
:new Cypher.Call(subquery).inTransactions({ concurrentTransactions: 3, });
CALL { // Subquery } IN 3 CONCURRENT TRANSACTIONS
-
#357
22f87f3
Thanks @angrykoala! - Support for procedures in the tx namespace:tx.getMetaData
tx.setMetaData
-
#363
47ee1ef
Thanks @angrykoala! - Add functionslower
andupper
-
#361
e769f61
Thanks @angrykoala! - Add support for missing fulltext procedures:db.index.fulltext.awaitEventuallyConsistentIndexRefresh
db.index.fulltext.listAvailableAnalyzers
-
#361
e769f61
Thanks @angrykoala! - Add support for missing db procedures:db.ping
db.propertyKeys
db.relationshipTypes
db.resampleIndex
db.resampleOutdatedIndexes
-
#355
acddbc3
Thanks @angrykoala! - Add the following procedures:db.nameFromElementId
db.info
db.createLabel
db.createProperty
db.createRelationshipType
db.schema.nodeTypeProperties
db.schema.relTypeProperties
db.schema.visualization
-
#351
ef73177
Thanks @angrykoala! - Exports type ROUND_PRECISION_MODE
-
#346
65661c3
Thanks @mjfwebb! - Add callProcedure method to With and Match clausesconst withQuery = new Cypher.With("*").callProcedure(Cypher.db.labels()).yield("label");
-
#340
b1b7acf
Thanks @angrykoala! - Add vector similarity functions:Cypher.vector.similarity.euclidean(param1, param2); Cypher.vector.similarity.cosine(param1, param2);
-
#342
5bba4b5
Thanks @angrykoala! - Add support for FINISH clauses:new Cypher.Finish() new Cypher.Match(...).finish() new Cypher.Create(...).finish() new Cypher.Merge(...).finish()
-
#333
2593296
Thanks @mjfwebb! - Adds support for genai functiongenai.vector.encode()
and proceduregenai.vector.encodeBatch()
-
#328
628ec62
Thanks @mjfwebb! - Adds support for vector index functionsdb.index.vector.queryNodes()
anddb.index.vector.queryRelationships()
-
#310
13fd317
Thanks @angrykoala! - Add support for arbitrary variables in Patterns instead of only Node and Relationship:
-
#310
13fd317
Thanks @angrykoala! - The following methods inPattern
class and chains are deprecated:withoutLabels
withoutVariable
withProperties
getVariables
withoutType
withDirection
withLength
Instead, these properties should be passed as an object, for example:
const a = new Cypher.Variable(); const rel = new Cypher.Variable(); const b = new Cypher.Variable(); const pattern = new Cypher.Pattern(a, { labels: ["Movie"] }).related(rel, { type: "ACTED_IN" }).to(b);
-
#310
98a8b2f
Thanks @angrykoala! - Deprecate using Node directly on Match, Create and Merge clauses. Use a Pattern instead -
#310
7574aee
Thanks @angrykoala! - Deprecate setting up labels and types in Node and Relationship. The following examples are now deprecated:new Cypher.Node({ labels: ["Movie"] });
new Cypher.Relationship({ type: "ACTED_IN" });
Instead, Nodes and Relationships should be created without parameters. Labels and types should be set in a Pattern:
const n = new Cypher.Node(); const r = new Cypher.Relationship(); const pattern = new Cypher.Pattern(n, { labels: ["Movie"] }).related(r, { type: "ACTED_IN" }).to();
- #321
0acf69b
Thanks @angrykoala! - Add support forIN TRANSACTIONS
in CALL statements using the methodinTransactions()
-
#312
3060a56
Thanks @angrykoala! - Add support fornormalize
function:Cypher.normalize(new Cypher.Param("my string"), "NFC");
-
#314
dbb6a4a
Thanks @angrykoala! - AddisNormalized
andisNotNormalized
operators:const stringLiteral = new Cypher.Literal("the \\u212B char"); const query = new Cypher.Return([Cypher.isNormalized(stringLiteral, "NFC"), "normalized"]); const { cypher } = query.build();
RETURN "the \u212B char" IS NFC NORMALIZED AS normalized
-
#315
e3a7505
Thanks @angrykoala! - DeprecateCypher.cdc
Procedures in favor ofCypher.db.cdc
:Cypher.cdc.current
in favor ofCypher.db.cdc.current
Cypher.cdc.earliest
in favor ofCypher.db.cdc.earliest
Cypher.cdc.query
in favor ofCypher.db.cdc.query
This new procedures also update the generated Cypher namespace to
db.cdc
-
#301
f2f679b
Thanks @angrykoala! - Add support for Collect subqueries:const dog = new Cypher.Node({ labels: ["Dog"] }); const person = new Cypher.Node({ labels: ["Person"] }); const subquery = new Cypher.Match( new Cypher.Pattern(person).related(new Cypher.Relationship({ type: "HAS_DOG" })).to(dog) ).return(dog.property("name")); const match = new Cypher.Match(person) .where(Cypher.in(new Cypher.Literal("Ozzy"), new Cypher.Collect(subquery))) .return(person);
MATCH (this0:Person) WHERE "Ozzy" IN COLLECT { MATCH (this0:Person)-[this1:HAS_DOG]->(this2:Dog) RETURN this2.name } RETURN this0
-
#294
07280b6
Thanks @angrykoala! - Support for WHERE predicates in patters:const movie = new Cypher.Node({ labels: ["Movie"] }); new Cypher.Pattern(movie).where(Cypher.eq(movie.property("title"), new Cypher.Literal("The Matrix")));
(this0:Movie WHERE this0.title = "The Matrix")
-
#277
f97c229
Thanks @angrykoala! - Add support for type predicate expressions with the functionsCypher.isType
andCypher.isNotType
:const variable = new Cypher.Variable(); const unwindClause = new Cypher.Unwind([new Cypher.Literal([42, true, "abc", null]), variable]).return( variable, Cypher.isType(variable, Cypher.TYPE.INTEGER) );
UNWIND [42, true, \\"abc\\", NULL] AS var0 RETURN var0, var0 IS :: INTEGER
-
#283
566e1d4
Thanks @angrykoala! - Prepends WITH on each UNION subquery when.importWith
is set in parent CALL:const returnVar = new Cypher.Variable(); const n1 = new Cypher.Node({ labels: ["Movie"] }); const query1 = new Cypher.Match(n1).return([n1, returnVar]); const n2 = new Cypher.Node({ labels: ["Movie"] }); const query2 = new Cypher.Match(n2).return([n2, returnVar]); const unionQuery = new Cypher.Union(query1, query2); const callQuery = new Cypher.Call(unionQuery).importWith(new Cypher.Variable());
The statement
WITH var0
will be added to each UNION subqueryCALL { WITH var0 MATCH (this1:Movie) RETURN this1 AS var2 UNION WITH var0 MATCH (this3:Movie) RETURN this3 AS var2 }
-
#283
566e1d4
Thanks @angrykoala! - DeprecateCall.innerWith
in favor ofCall.importWith
-
#289
b9a2ad6
Thanks @angrykoala! - Deprecates the second parameter of patternComprehensions in favor of new.map
method:old
new Cypher.PatternComprehension(pattern, expr);
new
new Cypher.PatternComprehension(pattern).map(expr);
-
#279
4620a2e
Thanks @angrykoala! - Add support for "*" parameter in MapProjection:new Cypher.MapProjection(new Cypher.Variable(), "*");
var0 { .* }
- #274
d154995
Thanks @MacondoExpress! - Fix a bug where the delete clause where not being attached toCypher.Call
-
#271
5834c61
Thanks @angrykoala! - AddlabelOperator
option on build to change the default labelAND
operator:const node = new Cypher.Node({ labels: ["Movie", "Film"] }); const query = new Cypher.Match(node); const queryResult = new TestClause(query).build( undefined, {}, { labelOperator: "&", } );
Will return:
MATCH (this:Movie&Film)
-
#269
6d9d3e2
Thanks @angrykoala! - Add chained clauses to Procedures after YIELD:.unwind
.match
.optionalMatch
.delete
.detachDelete
.set
.merge
.create
.remove
-
#263
4c4f49b
Thanks @angrykoala! - Support for NODETACH:new Cypher.Match(n).noDetachDelete(n);
MATCH(n) NODETACH DELETE n
-
#261
f018078
Thanks @angrykoala! - Add support for nullIf functionCypher.nullIf(expr1, expr2)
-
#253
da0b3ab
Thanks @angrykoala! - Add support for type filtering on relationshipsnew Cypher.Match(new Cypher.Pattern().related(new Cypher.Relationship()).to()).where( relationship.hasType("ACTED_IN") );
MATCH(this0)-[this1]->(this2) WHERE this1:ACTED_IN
-
#251
80e1bca
Thanks @angrykoala! - Add support for label expressions onhasLabel
:const query = new Cypher.Match(node).where(node.hasLabel(Cypher.labelExpr.or("Movie", "Film")));
MATCH (this0:Movie) WHERE this0:(Movie|Film)
-
#256
602c237
Thanks @angrykoala! - Add support forON MATCH SET
afterMERGE
:const node = new Cypher.Node({ labels: ["MyLabel"], }); const countProp = node.property("count"); const query = new Cypher.Merge(node) .onCreateSet([countProp, new Cypher.Literal(1)]) .onMatchSet([countProp, Cypher.plus(countProp, new Cypher.Literal(1))]);
MERGE (this0:MyLabel) ON MATCH SET this0.count = (this0.count + 1) ON CREATE SET this0.count = 1
-
#245
a63337d
Thanks @angrykoala! - DeprecateMerge.onCreate
in favor ofMerge.onCreateSet
to better reflect the resulting CypherON CREATE SET
-
#244
347ae01
Thanks @angrykoala! - Fix clauses order when usingMerge.onCreate
along with.set
For example:
const query = new Cypher.Merge(node) .onCreate([node.property("age"), new Cypher.Param(23)]) .set([node.property("age"), new Cypher.Param(10)]);
MERGE (this0:MyLabel) ON CREATE SET this0.age = $param1 SET this0.age = $param0
-
#236
34552dc
Thanks @angrykoala! - Support for chained.yield
:const customProcedure = new Cypher.Procedure("customProcedure", []).yield("result1").yield(["result2", "aliased"]);
is equivalent to:
const customProcedure = new Cypher.Procedure("customProcedure", []).yield("result1", ["result2", "aliased"]);
and results in the Cypher:
CALL customProcedure() YIELD result1, result2 AS aliased
-
#230
f37cc99
Thanks @angrykoala! - Support for passingundefined
to.where
:const n = new Cypher.Node(); new Cypher.Match(n).where(undefined).return(n);
This will generate the following Cypher:
MATCH(n) RETURN n
Note that the
WHERE
clause is omitted if the predicate isundefined
- #226
84b1534
Thanks @angrykoala! - Support fornew Call().innerWith("*")
to generateWITH *
inside aCALL
subquery
-
#218
81dc823
Thanks @angrykoala! - Add support for CDC procedures:cdc.current
cdc.earliest
cdc.query
-
#224
c872abd
Thanks @angrykoala! - Implement functions from Cypher 5.13:valueType
char_length
character_length
- #219
cae1828
Thanks @angrykoala! - Removes duplication between RawCypher (deprecated) and Raw
-
#211
2e76445
Thanks @angrykoala! - Add chained clauses in unwind:Unwind.return
Unwind.remove
Unwind.set
-
fa3d246
Thanks @angrykoala! - Add chained methods in Merge:Merge.remove
Merge.with
-
#213
64edcdd
Thanks @angrykoala! - Add methods for chained Merge:Match.merge
Create.merge
Call.merge
Foreach.merge
Merge.merge
Unwind.merge
With.merge
-
#206
1ef6244
Thanks @angrykoala! - Add methods for chained match clauses:With.match
With.optionalMatch
Unwind.match
Unwind.optionalMatch
Call.match
Call.optionalMatch
-
#204
8227ade
Thanks @angrykoala! - Add chained clauses in CALL clause:Call.remove
Call.set
Call.delete
Call.detachDelete
-
#212
33ceb71
Thanks @angrykoala! - Add methods for chained Create method:Match.create
Call.create
Foreach.create
Merge.create
Unwind.create
With.create
-
#200
d582e1a
Thanks @angrykoala! - Add support nested match clauses #90:Match.match()
Match.optionalMatch()
-
#210
9388048
Thanks @angrykoala! - Add chained subclauses for foreach:Foreach.return
Foreach.remove
Foreach.set
Foreach.delete
Foreach.detachDelete
-
#201
70c60b1
Thanks @angrykoala! - Support for chained unwind:Unwind.unwind
Match.unwind
With.unwind
-
#203
d7d0d2f
Thanks @angrykoala! - Add support for chained methods on Create clause:Create.remove
Create.delete
Create.detachDelete
Create.with
Create.create
-
#194
0c40f04
Thanks @angrykoala! - Refactors mixins. Due to this, multiple top-level clauses nested in the same clause will explicitly fail, instead of silent failing:The following is not supported;
const match = new Cypher.Match(); match.with(); match.return();
In favor of the following:
const match = new Cypher.Match(); match.with().return();
-
#195
6b24fdd
Thanks @angrykoala! - Support for expressions on Pattern properties:const pattern = new Cypher.Pattern(node).withProperties({ name: Cypher.plus(new Cypher.Literal("The "), new Cypher.Literal("Matrix")), });
Results in:
(this0: {name: "The " + "Matrix"})
-
#199
58dfee6
Thanks @angrykoala! - Fix RawCypher types -
#198
bfb1c97
Thanks @angrykoala! - Deprecates usingWith.with
when nested with already exists in favour ofaddColumn
:const withQuery = new Cypher.With(node); withQuery.with(node2); withQuery.with("*");
Instead, it should be:
const withQuery = new Cypher.With(node); const nestedWith = withQuery.with(node2); nestedWith.addColumn("*");
- #185
75e083e
Thanks @angrykoala! - DeprecatesCypher.RawCypher
in favor ofCypher.Raw
- #171
888dca7
Thanks @angrykoala! - Addsdb.nameFromElementId
function
-
#127
574f5f6
Thanks @angrykoala! - DeprecatesCypher.utils.compileCypher
and.getCypher
in favor ofenv.compile
:Previously:
new Cypher.RawCypher((env) => { const myVar = new Cypher.Variable(); return myVar.getCypher(env); });
Or
new Cypher.RawCypher((env) => { const myVar = new Cypher.Variable(); return Cypher.utils.compileCypher(myVar, env); });
Now:
new Cypher.RawCypher((env) => { const myVar = new Cypher.Variable(); return env.compile(myVar); });
- #139
480d3b4
Thanks @angrykoala! - Change mixins class hierarchy, removing intermediate "ClauseMixin"
-
#106
7474e62
Thanks @angrykoala! - Add instant temporal functions:- time
- localtime
- localdatetime
- datetime
- date
As well as the related nested functions:
- *.realtime
- *.statement
- *.transaction
- *.truncate
- datetime.fromepoch
- datetime.fromepochmillis
-
#100
73d9cba
Thanks @angrykoala! - Add duration functions:- duration
- duration.between
- duration.inMonths
- duration.inDays
- duration.inSeconds
-
#110
f405df2
Thanks @angrykoala! - Fix RegExp with super-linear runtime -
#107
ed13cb8
Thanks @angrykoala! - Add sugar syntaxCypher.true
andCypher.false
fornew Cypher.Literal(true)
andnew Cypher.Literal(false)
-
#96
7cb59d1
Thanks @angrykoala! - Add missing spatial functions:- withinBBox
-
#91
0940e2b
Thanks @angrykoala! - Add missing aggregation functions:- percentileCont
- percentileDisc
- stDev
- stDevP
-
#96
7cb59d1
Thanks @angrykoala! - DeprecatespointDistance
in favour ofpoint.distance
-
#99
11d89d3
Thanks @angrykoala! - Update types on label expressions & and | to support 1 or 0 parameters -
#95
0550f83
Thanks @angrykoala! - Fix typings on.skip()
and.limit()
to support expressions
- #84
c083fc0
Thanks @angrykoala! - Fix relationship patterns length with value of 0
- #81
0af8a3a
Thanks @angrykoala! - Reverts types for Call innerWith, With without parameters will not be rendered
- #80
ecbfd52
Thanks @angrykoala! - AddgetVariables
method to Pattern
-
#75
a71639e
Thanks @angrykoala! - Fix typings on innerWith so at least a parameter is required -
#79
d542fe7
Thanks @angrykoala! - Fix typings forapoc.date.convertFormat
input
-
#50
91ee39c
Thanks @angrykoala! - Escape variable names if needed -
#7
6f57eaf
Thanks @angrykoala! - Escape relationship types if needed -
#72
0777c76
Thanks @angrykoala! - Remove Reference class. Node, Relationship, Path and Param now extend the class Variable -
#1
79f4834
Thanks @angrykoala! - Escape properties in map projections
-
#70
e2339ff
Thanks @angrykoala! - Support for expressions on .skip and .limit subqueries -
#7
6f57eaf
Thanks @angrykoala! - Support for label expressions for nodes and relationshipsFor example:
(:A&(B|C))
-
#41
28e5b35
Thanks @angrykoala! - Add predicate functions -
#63
9c26ff2
Thanks @angrykoala! - Add graph functions -
#71
01badcf
Thanks @angrykoala! - Add support for list index access in property references -
#44
9b4d351
Thanks @angrykoala! - Add missing scalar functions -
#45
f483ab1
Thanks @angrykoala! - Add mathematical functions -
#57
af799a4
Thanks @angrykoala! - Add missing list functions (https://neo4j.com/docs/cypher-manual/current/functions/list/)
-
#50
91ee39c
Thanks @angrykoala! - Updates escape logic so names with numbers are not escaped unless they begin with a number:this0
OK0this
Should be escaped
-
#68
d331655
Thanks @renovate! - Update types to remove usage of any -
#58
9c78c25
Thanks @angrykoala! - Remove spaces between list content: [ 1, 2 ] -> [1, 2] -
#6
554a58d
Thanks @angrykoala! - Only escape labels if needed -
#73
2ed4de8
Thanks @angrykoala! - Add string as a possible type for alias in procedure yield
-
#53
7623c25
Thanks @angrykoala! - Add support for number params in skip and limit -
#34
ee295d0
Thanks @angrykoala! - RemovesgetReference
method from the Environment class -
#27
9d6cfe3
Thanks @angrykoala! - Updates CypherResult type to Record<string, unknown>, better reflecting the results of the parameters
-
#51
f2394db
Thanks @angrykoala! - Add support for count(*) -
#30
c92b67a
Thanks @angrykoala! - Add support for COUNT subqueries -
#26
9c46104
Thanks @angrykoala! - Fix typings for predicate functions
- #22
9aadbad
Thanks @angrykoala! - Adds@internal
methods to the output .d.ts to avoid errors in client builds
-
#17
1089034
Thanks @angrykoala! - Escapes properties in patterns.e.g.
MATCH (m:Movie { `$myProp`: "Text" })
-
#11
63ffbbf
Thanks @angrykoala! - Adds db.index.fulltext.queryRelationships -
#13
41a15dd
Thanks @darrellwarde! - Change the abstract class Reference to accept nested properties
-
708d9de
Thanks @angrykoala! - Adds NamedRelationship -
#8
b77f6b0
Thanks @angrykoala! - Add Cypher.utils.compileCypher method -
#8
b77f6b0
Thanks @angrykoala! - Add escapeType and escapeProperty utils
- #2
c2f4af7
Thanks @angrykoala! - Deprecates runFirstColumn clause in favor of apoc.cypher.runFirstColumnSingle and runFirstColumnMany function to better reflect Cypher behaviour
-
19892cb
Thanks @angrykoala! - Update repository to https://github.com/neo4j/cypher-builder -
#3
1c1bd0c
Thanks @angrykoala! - Groups mathematical operators with parenthesis
-
#3370
ddae88e48
Thanks @angrykoala! - Exports utility "toCypherParams" -
#3369
42d2f6938
Thanks @angrykoala! - Add support for clauses as input of sub-clauses methods where possible
- #3220
2d3661476
Thanks @angrykoala! - Serialize properties if needed
-
#3191
f0d6d45b0
Thanks @angrykoala! - Fix Unwind parameters -
#3191
f0d6d45b0
Thanks @angrykoala! - Add .delete chain methods to With, Unwind and Merge
-
#3147
2bc2c7019
Thanks @angrykoala! - Refactor Cypher.Map to use a Map internally, include .size method and remove support for undefined fields -
#3106
bfae63097
Thanks @darrellwarde! - The typeCypher.PropertyRef
is now fully exported underCypher.Property
for use with utilities such asinstanceof
. However, it maintains the current behaviour of not being directly instantiable. -
#3115
a04ef4469
Thanks @angrykoala! - Map projections inject the leading dot (.) in the map fields automatically.
-
#3091
0d7a140ae
Thanks @angrykoala! - Add support for using sets when defining the labels of a Node -
#3153
d47624ea1
Thanks @MacondoExpress! - Addsdivide
,multiply
,mod
,pow
to the Math Operators. -
#3154
b276bbae2
Thanks @angrykoala! - Add inequality operator (<>) with Cypher.neq
- #3025
507f9f7ff
Thanks @angrykoala! - CallProcedure clause deprecated and improvements on Procedures API
-
#3012
cdbf0c1fe
Thanks @angrykoala! - Add support for USE in CypherBuilder -
#2984
084e0e036
Thanks @angrykoala! - Support for path variables over patterns -
#3008
c4b9f120a
Thanks @angrykoala! - Adds support for DISTINCT in aggregation functions
-
#2868
c436ab040
Thanks @angrykoala! - Add timezone parameter to temporal functions -
#2884
1a2101c33
Thanks @darrellwarde! - Addid()
andelementId()
functions
- #2855
d4455881c
Thanks @angrykoala! - Support for patterns with multiple relationships and variable-length patterns
-
#2827
81df28ed9
Thanks @angrykoala! - Add support for square brackets syntax on variable properties -
#2862
4fdb5135f
Thanks @angrykoala! - Add XOR operation
- #2827
81df28ed9
Thanks @angrykoala! - Add support for square brackets syntax on varaible properties
- #2678
ddf51ccfe
Thanks @angrykoala! - Fix variable name generation when reusing named params
- #2545
2d2cb2e42
Thanks @angrykoala! - Support for UNWIND statement after CALL { ... }
- #2530
c8c2d2d4d
Thanks @MacondoExpress! - Introduce ListIndex and add support to the square bracket notation.
- #2406
150b64c04
Thanks @MacondoExpress! - Apoc.util.validate is now invocable from CallProcedure
-
#2427
e23691152
Thanks @angrykoala! - Add string functions and expose Function class for arbitrary functions -
#2429
4c79ec3cf
Thanks @angrykoala! - Add reduce function
- #2345
94b6cea4f
Thanks @angrykoala! - Remove dependencies on nodejs utils
- #2115
7aff0cf19
Thanks @MacondoExpress! - Included List, date, localtime, localdatetime, time, randomUUID. It's possible now to set edge properties from the Merge clause.
- #2301
42771f950
Thanks @angrykoala! - Fix indentation on apoc.fulltext
- #2247
f37a58d5b
Thanks @angrykoala! - Cypher Builder package initial release