Skip to content

Releases: neo4j/cypher-builder

v2.1.0

16 Dec 13:49
6b9ffdf
Compare
Choose a tag to compare

Minor Changes

  • #471 1c671f1 Thanks @angrykoala! - Add support for dynamic labels by passing an expression to node.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

27 Nov 13:53
545088d
Compare
Choose a tag to compare

Patch Changes

  • #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

v2.0.1

12 Nov 10:56
b2c2380
Compare
Choose a tag to compare

Patch Changes

  • #457 85aa393 Thanks @angrykoala! - Fix types in Unwind 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

07 Nov 15:59
2ed59c7
Compare
Choose a tag to compare

Major Changes

  • #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 clauses
    • innerWith method in Call clauses
    • PatternComprehension second parameter
    • cdc 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
    • Labels, types and properties in Node and Relationship classes
    • Using Node 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

Patch Changes

v1.22.4

07 Nov 14:50
c65a092
Compare
Choose a tag to compare

Patch Changes

  • #451 e0d7f4b Thanks @angrykoala! - Deprecates CypherEnvironment exported types in favor of RawCypherContext for usage in Cypher.Raw

v1.22.3

05 Nov 16:17
9ce6d0c
Compare
Choose a tag to compare

Patch Changes

  • #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

v1.22.2

29 Oct 16:28
bdfdb2c
Compare
Choose a tag to compare

Patch Changes

  • #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))

v1.22.1

28 Oct 15:53
ae77d59
Compare
Choose a tag to compare

Patch Changes

  • #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);

v1.22.0

24 Oct 13:52
9081a57
Compare
Choose a tag to compare

Minor Changes

  • #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
    }

Patch Changes

  • #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:

    • Call
    • Merge
    • Create
    • Match
    • Unwind
    • Procedures

v1.21.0

07 Oct 14:48
7e4b769
Compare
Choose a tag to compare

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