Build type predicate expressions

This section outlines the process of creating type predicate expressions within your queries using Cypher® Builder.

A type predicate expression serves to validate the type of a variable, literal, property, or another Cypher® expression. It follows the syntax below in Cypher®:

<expr> IS :: <TYPE>

For example:

movie.title IS :: STRING

isType

Type predicate expressions can be constructed using Cypher®.isType (distinct from the .hasType method for relationships). The isType function takes a Cypher® variable and a type specified in Cypher.TYPE:

Cypher.isType(new Cypher.Variable(), Cypher.TYPE.INTEGER);
var0 IS :: INTEGER

Type predicate expressions can be used in a WHERE statement, for example:

const node = new Cypher.Node();
const matchClause = new Cypher.Match(node).where(Cypher.isType(node.property("title"), Cypher.TYPE.STRING)).return(node);
MATCH (this0)
WHERE this0.title IS :: STRING
RETURN this0

Using Union types

Union types, for example, INTEGER | STRING, can be used by passing an array to .isType:

Cypher.isType(new Cypher.Variable(), [Cypher.TYPE.INTEGER, Cypher.TYPE.STRING]);
var0 IS :: INTEGER | STRING

List Types

List types, for instance, LIST<INTEGER>, can be created using Cypher®.TYPES.list():

Cypher.isType(new Cypher.Variable(), Cypher.TYPE.list(Cypher.TYPE.STRING));
var0 IS :: LIST<STRING>

Union types can also be used within a list:

Cypher.isType(new Cypher.Variable(), Cypher.TYPE.list([Cypher.TYPE.STRING, Cypher.TYPE.INTEGER]));
var0 IS :: LIST<STRING | INTEGER>

Type predicate expressions with NOT

It is also possible to verify that a Cypher® expression is not of a certain type with the function Cypher.isNotType:

Cypher.isNotType(new Cypher.Variable(), Cypher.TYPE.INTEGER);
var0 IS NOT :: INTEGER

Type predicate expressions for non-nullable types

Type predicate expressions evaluate to true in Cypher® for NULL values unless a NOT NULL is appended. In Cypher® Builder, this can be achieved using the .notNull method:

Cypher.isType(new Cypher.Variable(), Cypher.TYPE.INTEGER).notNull();
var0 IS :: INTEGER NOT NULL

Non-nullable types can also be used within a list type:

Cypher.isType(new Cypher.Variable(), Cypher.TYPE.list(Cypher.TYPE.STRING).notNull());
var0 IS :: LIST<STRING NOT NULL>