0% found this document useful (0 votes)
12 views

neo4j-status-codes-5

This document outlines the status codes for errors and notifications in Neo4j, detailing the GQL standard compliance introduced in versions 5.23 and 5.25. It describes the structure and interpretation of GQL-status and Neo4j-status error objects, as well as the handling of server errors and notifications. The manual serves as a comprehensive guide for understanding the outcomes of Cypher requests and the associated error codes.

Uploaded by

Vedaant Dutt
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

neo4j-status-codes-5

This document outlines the status codes for errors and notifications in Neo4j, detailing the GQL standard compliance introduced in versions 5.23 and 5.25. It describes the structure and interpretation of GQL-status and Neo4j-status error objects, as well as the handling of server errors and notifications. The manual serves as a comprehensive guide for understanding the outcomes of Cypher requests and the associated error codes.

Uploaded by

Vedaant Dutt
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 161

Status Codes for Errors and

Notifications
Table of Contents
Server errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
GQL-status error object Label—version 5.25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Classes of GQLSTATUS error codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Neo4j-status error object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Types of server errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Error internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Query logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Server-driver version compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
List of GQLSTATUS error codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
List of Neo4j error codes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Server notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
GQL-status notification object Label—version 5.23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Neo4j-status notification object Label—deprecated 5.26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Server notification grouping and filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Notification internals Label—deprecated 5.26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Server-driver version compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
List of notification codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Changes to status codes per Neo4j version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Neo4j 5.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Neo4j 5.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Neo4j 5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Neo4j 5.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Neo4j 5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Neo4j 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Neo4j 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Neo4j 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Neo4j 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Neo4j 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
This manual covers all status codes for errors and notifications that a Neo4j server
may return to indicate the result of a Cypher request.

Starting from 5.23 for notifications and 5.25 for errors, Neo4j supports the GQL standard.
GQL is the new ISO International Standard query language for graph databases. Cypher®, Neo4j’s query
language, supports most mandatory and a substantial portion of the optional GQL features (as defined by
the ISO/IEC 39075:2024(en) - Information technology - Database languages - GQL Standard). For more
information, see Cypher Manual → GQL conformance.

As part of this GQL compliance, Cypher also includes status codes that a GQL-compliant DBMS returns to
indicate the outcome of a request. For more information on the GQL-status object framework for
notifications and errors, see Server notifications and Server errors.

License: Creative Commons 4.0

1
Server errors
Neo4j returns a server error to indicate that the outcome of a Cypher query or command execution is
unsuccessful. The driver receives these errors and sends them to the Neo4j tools (e.g. Browser, Bloom,
Cypher Shell) or the user application, which display them to the user.

Starting from version 5.26, the Neo4j error codes have an additional GQL-status object along with the
Neo4j exception that provides information about the status of a Cypher query or command execution in
compliance with the ISO/IEC 39075:2024(en) - Information technology - Database languages - GQL
Standard. This additional GQL-status object is also displayed in the query log from Neo4j 5.25 onwards.
For more information, see Operations Manual → GQL error information.

The default GQLSTATUS code 50N42 is returned when an exception does not have a
GQL-status object. Starting from Neo4j 5.25, we started adding GQL objects to
exceptions. Therefore, you can expect many 50N42 codes during this transition period.
 However, it is important not to rely on this default code, as future Neo4j versions might
change it by adding an appropriate GQL object to the exception. Additionally, GQL codes
for external procedures are not yet stable.

This page describes the GQL-status and the Neo4j-status object frameworks for errors, their structure, the
objects they provide for errors, and how to interpret them. It also explains the error internals and the
server-driver compatibility for both the GQLSTATUS and errors.

GQL-status error object Label—version 5.25


In the GQL-status object framework, when a user executes a query to the server, it always produces a
result known as the execution outcome. If an error occurs during execution, the outcome is recorded as an
exception condition, indicating a failed outcome with no result. The execution outcome for errors is
represented as a list of GQL-status objects with a failed outcome, which are organized according to the
following precedence rules:

1. Every exception that results in a transaction rollback takes precedence over other exceptions.

2. Every exception takes precedence over any completion condition. For completion conditions, see the
GQL-status notification object.

The GQL-status object also includes Neo4j-specific information, such as severity level and error
classification.

Each GQL-status object consists of the following fields:

Table 1. GQLSTATUS error object

GQLSTATUS code A 5-character string that is the concatenation of a 2-character class code followed
by a 3-character subclass code, which identifies the condition of the error.

2
StatusDescription A human-readable description of the GQLSTATUS, which consists of a condition, a
subcondition, and an optional additional text about the condition. The format is
error: condition - subcondition. AdditionalInfo. The condition and
subcondition are textual representations of the class and subclass codes,
respectively. The subcondition for the subclass 000 is empty.

DiagnosticRecord Extra information about the status, given as key-value pairs, both on the server and
driver side. To retrieve the full diagnostic record, you can use the
diagnosticRecord() on the server side or the corresponding method on the driver
sides. Additional helper methods are exposed for some useful fields.

Field Description

OPERATION The operation that the error is related to. Always defaults to empty.

OPERATION_CODE The operation code that the error is related to. Always defaults to 0.

CURRENT_SCHEMA The current schema that the error is related to. Always defaults to /.

_classification The Neo4j error classification, which can be CLIENT_ERROR, TRANSIENT_ERROR,


or DATABASE_ERROR.

_position (Optional) The position, given by offset, line and column, where the error is
relevant in the query text.

A GQL-status error object can also contain an optional GQL-status object that represents the cause of the
error and is used to provide additional, more specific diagnostic information.

Classes of GQLSTATUS error codes


The GQLSTATUS codes are divided into classes and subclasses. The class code is a 2-character string that
indicates the general condition of the status, such as connection exception, data exception, etc. The
subclass code is a 3-character string that provides more detailed information about the condition.

The following table lists the GQLSTATUS classes and their meanings:

Table 2. GQLSTATUS code classes

Class Condition

08 connection exception

22 data exception

25 invalid transaction state

40 transaction rollback

42 syntax error or access rule violation

50 general processing exception

51 system configuration or operation exception

3
52 procedure exception

Neo4j-status error object


The Neo4j-status object for errors contains diagnostic information representing the unsuccessful outcome
of a Cypher query or command execution, including severity, status code, category, description, message,
and position in the query text where the error is relevant. Depending on the application, some of the fields
from the error object might not be visible.

The error object consists of the following fields:

Table 3. Neo4j error object

Neo4j code The Neo4j code in the form of Neo.[Type].[SubType].[Name].

Description The description of the specific error.

Message The error message.

Severity level ERROR

Category The category of the error. Available categories are CLIENT_ERROR, TRANSIENT_ERROR,
and DATABASE_ERROR.

Position (Optional) The position, given by offset, line and column, where the error is relevant
in the query text.

For more information, see the List of Neo4j error codes.

Types of server errors


The fact that an error is returned by the server does not always mean that it is a fatal error. Status codes
can also indicate transient problems that may go away if you retry the request. The server error group
determines the effect on the transaction.

Table 4. Server error types

Type Description Effect on the transaction

ClientError These errors are caused by the client (user input or user Rollback
application) and are usually related to the request itself.
Changing the request might yield a successful outcome.
Neo4j codes have the prefix Neo.ClientError, while the
GQLSTATUS codes have ErrorClassification of type
CLIENT_ERROR.

4
Type Description Effect on the transaction

TransientError These errors are detected by the server and are usually Rollback
related to some kind of database unavailability, such as limits
reached, out-of-memory, timeouts, etc. The error can be
temporary, therefore retrying later might yield a successful
outcome. Neo4j codes have the prefix Neo.TransientError,
while the GQLSTATUS codes have ErrorClassification of
type TRANSIENT_ERROR.

DatabaseError These errors are caused by the database and are usually Rollback
related to the database state and mean that the database
failed to service the request. Neo4j codes have the prefix
Neo.DatabaseError, while the GQLSTATUS codes have
ErrorClassification of type DATABASE_ERROR.

Error internals
Neo4j supports server errors in the form of Java exceptions. Most of these implement the HasStatus
interface, which means they have a status code in addition to the exception message.

On the server side, an exception contains normal Java constructors and methods like getMessage(),
getCause(), etc., and additionally the status() method from the HasStatus API, which returns the status
code.

The exceptions also get new compulsary fields for gqlStatus, statusDescription, diagnosticRecord, and
an optional field for cause. The cause field in turn has its own GQLSTATUS, status description, diagnostic
record, and message.
The getMessage() method is kept as Java exceptions inherently have this method. And a new classification
field is added to cover the division of client errors, transient errors, and database errors, which today is part
of the Neo4j code. All of these fields construct the GQLSTATUS object, which is sent to the driver as part
of the Failure Bolt message. Exactly how this looks, depends on the combination of driver and server
versions. See Server-driver version compatibility for more information.

On the driver side, the Neo4jException is extended with the corresponding methods as on the server side.
The driver receives the Failure Bolt message and extracts the status code and the error message. Then, it
constructs an exception with the status code, error message, and other relevant information, and sends it
to the client.

Query logging
Since the query log is server-side and DBMS wide, multiple clients connected to the same DBMS write to
the same query log. As the clients can have separate driver versions, they may have different error
framework formats.

In Neo4j 5.25, the default JSON template for the query log is updated to include an errorInfo entry. This
entry contains GQLSTATUS, statusDescription, classification, position (if applicable), and cause (if
applicable) with the same entries.

5
Server-driver version compatibility
The server and driver communicate with each other through the Bolt protocol. During the handshake
process, they agree on using the newest possible Bolt protocol version that both the server and the driver
support. For more information on the Bolt versions supported by different server versions, see the Bolt
Protocol documentation.

The new error framework with the additional GQL-status object for errors is available in the JSON format
query log for Neo4j server Neo4j 5.25 and later versions. It is supported over Bolt since Bolt 5.7, which
corresponds to version 5.26 or later on both server and driver side.

To fully utilize the new error framework, both your server and the driver must support it. Drivers that are
older than 5.26 will not send any GQL-status object for exceptions, even if server is 5.26 or later.

If a driver of version 5.26 or later talks to a server that is older than 5.26, the driver needs to poly-fill the
exceptions with a GQL-status object. In this case, the default GQLSTATUS code 50N42 is returned for all
exceptions.

Table 5. Error compatibility matrix

Driver 5.25 or older Driver 5.26 or newer

Server 5.24 or older Bolt: existing error information Bolt: additional GQL-status object with default
values
Query log: existing error information
Query log: existing error information

Server 5.25 Bolt: existing error information Bolt: additional GQL-status object with default
values
Query log: additional errorInfo entry
Query log: additional errorInfo entry

Server 5.26 or newer Bolt: existing error information Bolt: additional GQL-status object

Query log: additional errorInfo entry Query log: additional errorInfo entry

List of GQLSTATUS error codes


The following page provides an overview of all GQLSTATUS server error codes in Neo4j. All errors in
Neo4j have severity level ERROR.

Please note that while GQLSTATUS codes remain stable (any changes to them will be
breaking), changes to status descriptions associated with these codes are not breaking
 and may happen at any time. For this reason, parsing the status descriptions or
incorporating them into scripts is not recommended.

Connection exceptions
Connection exceptions occur when the client (e.g. Browser/Bloom/Cypher Shell) is unable to connect to the
server for various reasons such as network issues, server-side routing being disabled, or the database
being unavailable, etc.

6
08000
Status description
error: connection exception

08007
Status description
error: connection exception - transaction resolution unknown

08N00
Status description
error: connection exception - unable to connect to database. Unable to connect to database { $db }.
Unable to get bolt address of the leader. Check the status of the database. Retrying your request at a
later time may succeed.

08N01
Status description
error: connection exception - unable to write to database. Unable to write to database { $db } on this
server. Server-side routing is disabled. Either connect to the database leader directly or enable server-
side routing by setting '{ $cfgSetting }=true'.

08N02
Status description
error: connection exception - unable to connect to database. Unable to connect to database { $db }.
Server-side routing is disabled. Either connect to { $db } directly, or enable server-side routing by
setting '{ $cfgSetting }=true'.

Example error description


error: connection exception - unable to route to database. Unable to connect to database my_db. Server-
side routing is disabled. Either connect to my_db directly, or enable server-side routing by setting
'dbms.routing.enabled=true'.

08N03
Status description
error: connection exception - failed to write to graph. Failed to write to graph { $graph }. Check the
defined access mode in both driver and database.

08N04
Status description
error: unable to route use clause. Routing with { $clause } is not supported in embedded sessions.
Connect to the database directly or try running the query using a Neo4j driver or the HTTP API.

7
08N05
Status description
error: connection exception - unable to route administration command. Routing administration
commands is not supported in embedded sessions. Connect to the system database directly or try
running the query using a Neo4j driver or the HTTP API.

08N06
Status description
error: connection exception - protocol error. General network protocol error.

08N07
Status description
error: connection exception - not the leader. This member is not the leader.

08N08
Status description
error: connection exception - database is read only. This database is read only on this server.

08N09
Status description
error: connection exception - database unavailable. The database { $db } is currently unavailable.
Check the database status. Retry your request at a later time.

08N10
Status description
error: connection exception - invalid server state. Message { $msg } cannot be handled by session in
the { $boltServerState } state.

08N11
Status description
error: connection exception - request error. The request is invalid and could not be processed by the
server. See cause for further details.

08N12
Status description
error: connection exception - failed to parse bookmark. Failed to parse the supplied bookmark. Verify it
is correct or check the debug log for more information.

8
08N13
Status description
error: connection exception - database not up to requested bookmark. The database { $db } is not up
to the requested bookmark { $transactionId1 }. The latest transaction ID is { $transactionId2 }.

08N14
Status description
error: connection exception - alias chains are not permitted. Unable to provide a routing table for the
database identifed by the alias { $alias1 } because the request comes from another alias { $alias2 }
and alias chains are not permitted.

08N15
Status description
error: connection exception - no such routing policy. Policy definition of the routing policy {
$routingPolicy } could not be found. Verify that the spelling is correct.

08N16
Status description
error: connection exception - general driver client error. Remote execution failed with message { $msg
}.

08N17
Status description
error: connection exception - general driver transient error. Remote execution failed with message {
$msg }.

08N18
Status description
error: connection exception - general driver database error. Remote execution failed with message {
$msg }.

Data exceptions
Database exceptions occur when a client request contains the wrong format, types, or other unsupported
input. Some examples are data and constraint creation, which conflicts with existing constraints,
properties of non-storable type, and spatial and temporal values with invalid components.

22000

9
Status description
error: data exception

22003
Status description
error: data exception - numeric value out of range. The numeric value { $value } is outside the required
range.

22007
Status description
error: data exception - invalid date, time, or datetime format

22015
Status description
error: data exception - interval field overflow

22G03
Status description
error: data exception - invalid value type

22N00
Status description
error: data exception - unsupported value. The provided value is unsupported and cannot be processed.

22N01
Status description
error: data exception - invalid type. Expected the value { $value } to be of type { $valueTypeList },
but was of type { $valueType }.

22N02
Status description
error: data exception - specified negative numeric value. Expected { $option } to be a positive number
but found { $value } instead.

22N03
Status description
error: data exception - specified numeric value out of range. Expected { $component } to be of type {
$valueType } and in the range { $lower } to { $upper } but found { $value }.

10
22N04
Status description
error: data exception - invalid input value. Invalid input { $input } for { $context }. Expected {
$inputList }.

22N05
Status description
error: data exception - input failed validation. Invalid input { $input } for { $context }.

22N06
Status description
error: data exception - empty input string. Invalid input. { $option } needs to be specified.

22N07
Status description
error: data exception - invalid pre-parser option key. Invalid pre-parser option(s): { $optionList }.

22N08
Status description
error: data exception - invalid pre-parser combination. Invalid pre-parser option, cannot combine {
$option1 } with { $option2 }.

22N09
Status description
error: data exception - conflicting pre-parser combination. Invalid pre-parser option, cannot specify
multiple conflicting values for { $option }.

22N10
Status description
error: data exception - invalid pre-parser option value. Invalid pre-parser option, specified { $input } is
not valid for option { $option }. Valid options are: { $optionList }.

22N11
Status description
error: data exception - invalid argument. Invalid argument: cannot process { $input }.

11
22N12
Status description
error: data exception - invalid date, time, or datetime format. Invalid argument: cannot process { $input
}.

22N13
Status description
error: data exception - invalid time zone. Specified time zones must include a date component.

22N14
Status description
error: data exception - invalid temporal value combination. Cannot select both { $temporal } and {
$component }.

22N15
Status description
error: data exception - invalid temporal component. Cannot read the specified { $component }
component from { $temporal }.

22N18
Status description
error: data exception - incomplete spatial value. A { $crs } POINT must contain { $mapKeyList }.

22N19
Status description
error: data exception - invalid spatial value. A POINT must contain either 'x' and 'y', or 'latitude' and
'longitude'.

22N20
Status description
error: data exception - invalid spatial value dimensions. Cannot create POINT with { $dim1 }D
coordinate reference system (CRS) and { $value } coordinates. Use the equivalent { $dim2 }D
coordinate reference system instead.

22N22
Status description
error: data exception - invalid spatial value combination. Cannot specify both coordinate reference
system (CRS) and spatial reference identifier (SRID).

12
22N23
Status description
error: data exception - invalid latitude value. Cannot create WGS84 POINT with invalid coordinate: {
$coordinates }. The valid range for the latitude coordinate is [-90, 90].

22N24
Status description
error: data exception - invalid coordinate arguments. Cannot construct a { $valueType } from {
$coordinates }.

22N25
Status description
error: data exception - invalid temporal arguments. Cannot construct a { $valueType } from {
$temporal }.

22N26
Status description
error: data exception - unsupported rounding mode. Unknown rounding mode. Valid values are:
CEILING, FLOOR, UP, DOWN, HALF_EVEN, HALF_UP, HALF_DOWN, UNNECESSARY.

22N27
Status description
error: data exception - invalid entity type. Invalid input { $input } for { $context }. Expected to be {
$valueTypeList }.

22N28
Status description
error: data exception - overflow error. The result of the operation { $operation } has caused an
overflow.

22N32
Status description
error: data exception - non-deterministic sort expression. 'ORDER BY' expressions must be
deterministic.

22N33
Status description
error: data exception - invalid shortest path expression. Shortest path expressions must contain start

13
and end nodes. Cannot find: { $variable }.

22N35
Status description
error: data exception - invalid date format. Cannot parse { $input } as a DATE. Calendar dates need to
be specified using the format 'YYYY-MM', while ordinal dates need to be specified using the format
'YYYY-DDD'.

22N36
Status description
error: data exception - invalid temporal format. Cannot parse { $input } as a { $valueType }.

22N37
Status description
error: data exception - invalid coercion. Cannot coerce { $value } to { $valueType }.

22N38
Status description
error: data exception - invalid function argument. Invalid argument to the function { $fun }.

22N41
Status description
error: data exception - merge node uniqueness constraint violation. The 'MERGE' clause did not find a
matching node { $variable } and cannot create a new node due to conflicts with existing uniqueness
constraints.

22N42
Status description
error: data exception - merge relationship uniqueness constraint violation. The 'MERGE' clause did not
find a matching relationship { $variable } and cannot create a new relationship due to conflicts with
existing uniqueness constraints.

22N43
Status description
error: data exception - unable to load external resource. Could not load external resource from { $url
}.

14
22N44
Status description
error: data exception - parallel runtime disabled. Parallel runtime has been disabled, enable it or
upgrade to a bigger Aura instance.

22N46
Status description
error: data exception - unsupported use of parallel runtime. Parallel runtime does not support updating
queries or a change in the state of transactions. Use another runtime.

22N47
Status description
error: data exception - invalid parallel runtime configuration. No workers are configured for the parallel
runtime. Set 'server.cypher.parallel.worker_limit' to a larger value.

22N49
Status description
error: data exception - CSV buffer size overflow. Cannot read a CSV field larger than the set buffer size.
Ensure the field does not have an unterminated quote, or increase the buffer size via
'dbms.import.csv.buffer_size'.

22N51
Status description
error: data exception - database or alias does not exist. A [composite] database or alias with the name {
$db } does not exist. Verify that the spelling is correct.

22N52
Status description
error: data exception - invalid combination of PROFILE and EXPLAIN. 'PROFILE' and 'EXPLAIN' cannot
be combined.

22N53
Status description
error: data exception - invalid use of PROFILE. Cannot 'PROFILE' query before results are materialized.

22N54
Status description
error: data exception - invalid map. Multiple conflicting entries specified for { $mapKey }.

15
22N56
Status description
error: data exception - protocol message length limit overflow. Protocol message length limit exceeded
(limit: { $boltMsgLenLimit }).

22N66
Status description
error: data exception - conflicting constraint already exists. A conflicting constraint already exists: {
$constrDescrOrName }.

22N67
Status description
error: data exception - duplicated constraint name. A constraint with the same name already exists: {
$constr }.

22N69
Status description
error: data exception - index does not exist. The index specified by { $idxDescrOrName } does not exist.

22N71
Status description
error: data exception - index with the same name already exists. An index with the same name already
exists: { $idx }.

22N77
Status description
error: data exception - property presence verification failed. { $entityType } ({ $entityId }) with {
$tokenType } { $token } must have the following properties: { $propKeyList }.

22N78
Status description
error: data exception - property type verification failed. { $entityType } ({ $entityId }) with {
$tokenType } { $token } must have the property $propKey with value type { $valueType }.

22N81
Status description
error: data exception - expression type unsupported here. Invalid input: { $exprType } is not supported
in { $context }.

16
22N82
Status description
error: data exception - input contains invalid characters. Input { $input } contains invalid characters for
{ $context }. Special characters may require that the input is quoted using backticks.

22N84
Status description
error: data exception - string too long. Expected the string to be no more than { $upper } characters
long.

22N85
Status description
error: data exception - string too short. Expected the string to be at least { $lower } characters long.

22N86
Status description
error: data exception - numeric range 0 disallowed. Expected a nonzero number.

22N88
Status description
error: data exception - not a valid CIDR IP. { $input } is not a valid CIDR IP.

22N89
Status description
error: data exception - new password cannot be the same as the old password. Expected the new
password to be different from the old password.

22N90
Status description
error: data exception - property type unsupported in constraint. { $item } is not supported in property
type constraints.

22N91
Status description
error: data exception - cannot convert alias local to remote or remote to local. Failed to alter the
specified database alias { $alias }. Altering remote alias to a local alias or vice versa is not supported.
Drop and recreate the alias instead.

17
22N92
Status description
error: data exception - missing RETURN. This query requires a RETURN clause.

22N93
Status description
error: data exception - missing YIELD. A required YIELD clause is missing.

22N94
Status description
error: data exception - invalid YIELD *. 'YIELD *' is not supported in this context. Explicitly specify which
columns to yield.

22N95
Status description
error: data exception - parsing JSON exception. Invalid JSON input. Please check the format.

22N96
Status description
error: data exception - mapping JSON exception. Unable to map the JSON input. Please verify the
structure.

22N97
Status description
error: data exception - unexpected struct tag. Unexpected struct tag: { $value }.

22N98
Status description
error: data exception - wrong first field during deserialization. Unable to deserialize request. Expected
first field to be { $field }, but was '{ $value }'.

22N99
Status description
error: data exception - wrong token during deserialization. Unable to deserialize request. Expected {
$token }, found { $value }.

18
22NA0
Status description
error: data exception - invalid property based access control rule. Failed to administer property rule.

22NA4
Status description
error: data exception - invalid property based access control rule involving comparison with NULL. The
property value access rule pattern { $pred } always evaluates to 'NULL'.

22NA5
Status description
error: data exception - invalid property based access control rule involving IS NULL. The property value
access rule pattern { $pred } always evaluates to 'NULL'. Use `IS NULL' instead.

22NA6
Status description
error: data exception - invalid property based access control rule involving IS NOT NULL. The property
value access rule pattern { $pred } always evaluates to 'NULL'. Use 'IS NOT NULL' instead.

22NA8
Status description
error: data exception - parsing JSON failure. Underlying error: { $cause }.

22NB0
Status description
error: data exception - invalid property based access control rule involving WHERE and IS NULL. The
property value access rule pattern { $pred } always evaluates to 'NULL'. Use WHERE syntax in
combination with IS NULL instead.

22NB1
Status description
error: data exception - type mismatch. Type mismatch: expected to be { $valueTypeList } but was {
$input }.

Invalid transaction state


Invalid transaction state errors occur when the transaction is in an invalid state, such as when the
transaction is terminated or closed, or when there is a conflict between the transaction state and applied
updates.

19
25N01
Status description
error: invalid transaction state - invalid combination of statement types. Failed to execute the query {
$query } due to conflicting statement types (read query, write query, schema modification, or
administration command). To execute queries in the same transaction, they must be either of the same
type, or be a combination of schema modifications and read commands.

25N02
Status description
error: invalid transaction state - unable to complete transaction. Unable to complete transaction. See
debug log for details.

25N03
Status description
error: invalid transaction state - concurrent access violation. Transaction is being used concurrently by
another request.

25N04
Status description
error: invalid transaction state - specified transaction does not exist. Transaction { $transactionId }
does not exist.

25N05
Status description
error: invalid transaction state - transaction terminated or closed. The transaction has been terminated
or closed.

25N06
Status description
error: invalid transaction state - transaction start failed. Failed to start transaction. See debug log for
details.

25N08
Status description
error: invalid transaction state - invalid transaction lease. The lease for the transaction is no longer valid.

25N09

20
Status description
error: invalid transaction state - internal transaction failure. The transaction failed due to an internal
error.

25N11
Status description
error: invalid transaction state - conflicting transaction state. There was a conflict detected between the
transaction state and applied updates. Please retry the transaction.

25N12
Status description
error: invalid transaction state - index was dropped. Index { $idx } was dropped in this transaction
and cannot be used.

25N13
Status description
error: invalid transaction state - cannot access entity after removal. A { $entityType } was accessed
after being deleted in this transaction. Verify the transaction statements.

Invalid transaction termination


Invalid transaction termination errors occur when the transaction termination fails, such as when the
transaction or constituent transaction fails to commit, or when the transaction termination fails to apply or
append the transaction.

2DN01
Status description
error: invalid transaction termination - commit failed. Failed to commit transaction. See debug log for
details.

2DN02
Status description
error: invalid transaction termination - constituent commit failed. Failed to commit constituent
transaction. See debug log for details.

2DN03
Status description
error: invalid transaction termination - transaction termination failed. Failed to terminate transaction.
See debug log for details.

21
2DN04
Status description
error: invalid transaction termination - constituent transaction termination failed. Failed to terminate
constituent transaction. See debug log for details.

2DN05
Status description
error: invalid transaction termination - failed to apply transaction. There was an error on applying the
transaction. See logs for more information.

2DN06
Status description
error: invalid transaction termination - failed to append transaction. There was an error on appending
the transaction. See logs for more information.

2DN07
Status description
error: invalid transaction termination - inner transactions still open. Unable to commit transaction
because it still have non-closed inner transactions.

Transaction rollback
Transaction rollback errors occur when there is a failure in a transaction or a constituent transaction
rollback.

40000
Status description
error: transaction rollback

40003
Status description
error: transaction rollback - statement completion unknown

40N01
Status description
error: transaction rollback - rollback failed. Failed to rollback transaction. See debug log for details.

22
40N02
Status description
error: transaction rollback - constituent rollback failed. Failed to rollback constituent transaction. See
debug log for details.

Syntax error or access rule violation


Syntax error or access rule violation errors occur when a Cypher query contains invalid syntax or when a
client request violates the access rules, such as when a query tries to access a database without enough
privileges, etc.

42000
Status description
error: syntax error or access rule violation

42001
Status description
error: syntax error or access rule violation - invalid syntax

42002
Status description
error: syntax error or access rule violation - invalid reference

42006
Status description
error: syntax error or access rule violation - number of edge labels below supported minimum

42007
Status description
error: syntax error or access rule violation - number of edge labels exceeds supported maximum

42008
Status description
error: syntax error or access rule violation - number of edge properties exceeds supported maximum

42009
Status description
error: syntax error or access rule violation - number of node labels below supported minimum

23
42010
Status description
error: syntax error or access rule violation - number of node labels exceeds supported maximum

42011
Status description
error: syntax error or access rule violation - number of node properties exceeds supported maximum

42012
Status description
error: syntax error or access rule violation - number of node type key labels below supported minimum

42013
Status description
error: syntax error or access rule violation - number of node type key labels exceeds supported
maximum

42014
Status description
error: syntax error or access rule violation - number of edge type key labels below supported minimum

42015
Status description
error: syntax error or access rule violation - number of edge type key labels exceeds supported
maximum

42I00
Status description
error: syntax error or access rule violation - invalid case expression. 'CASE' expressions must have the
same number of 'WHEN' and 'THEN' operands.

42I01
Status description
error: syntax error or access rule violation - invalid FOREACH. Invalid use of { $clause } inside
'FOREACH'.

24
42I02
Status description
error: syntax error or access rule violation - invalid comment. Failed to parse comment. A comment
starting with '/*' must also have a closing '*/'.

42I05
Status description
error: syntax error or access rule violation - invalid FIELDTERMINATOR. The FIELDTERMINATOR
specified for LOAD CSV can only be one character wide. The FIELDTERMINATOR specified for LOAD
CSV can only be one character wide.

42I06
Status description
error: syntax error or access rule violation - invalid input. Invalid input { $input }, expected: {
$valueList }.

42I13
Status description
error: syntax error or access rule violation - invalid number of procedure or function arguments. The
procedure or function call does not provide the required number of arguments; expected { $count1 }
but got { $count2 }. The procedure or function { $procFun } has the signature: { $sig }.

42I18
Status description
error: syntax error or access rule violation - invalid reference to implicitly grouped expressions. The
aggregation column contains implicit grouping expressions referenced by the variables { $varList }.
Implicit grouping expressions are variables not explicitly declared as grouping keys.

42I20
Status description
error: syntax error or access rule violation - invalid symbol in expression. Label expressions and
relationship type expressions cannot contain { $input }. To express a label disjunction use {
$labelExpr } instead.

42I25
Status description
error: syntax error or access rule violation - invalid use of CALL IN TRANSACTIONS. 'CALL { … } IN
TRANSACTIONS' is not supported after a write clause.

25
42I29
Status description
error: syntax error or access rule violation - invalid use of IS. The IS keyword cannot be used together
with multiple labels in { $input }. Rewrite the expression as { $replacement }.

42I31
Status description
error: syntax error or access rule violation - invalid use of MATCH. 'MATCH …' cannot directly follow an
'OPTIONAL MATCH …'. Use a WITH clause between them.

42I37
Status description
error: syntax error or access rule violation - invalid use of RETURN *. 'RETURN *' is not allowed when
there are no variables in scope.

42I38
Status description
error: syntax error or access rule violation - invalid use of RETURN. 'RETURN …' can only be used at the
end of a query or subquery.

42I40
Status description
error: syntax error or access rule violation - invalid use of UNION and UNION ALL. UNION and UNION ALL
cannot be combined.

42I45
Status description
error: syntax error or access rule violation - invalid use of multiple path patterns. Multiple path patterns
cannot be used in the same clause in combination with a selective path selector. { $action }

42I47
Status description
error: syntax error or access rule violation - parser error. Parser Error: { $msg }.

42I48
Status description
error: syntax error or access rule violation - invalid use of a subquery in MERGE. Subqueries are not
allowed in a MERGE clause.

26
42I50
Status description
error: syntax error or access rule violation - token name too long. Invalid input { $input }... A {
$tokenType } name cannot be longer than { $maxTokenLength }.

42I51
Status description
info: invalid call signature. The procedure or function { $procFun } must have the signature: { $sig }.

42N00
Status description
error: syntax error or access rule violation - no such database. The database { $db } was not found.
Verify that the spelling is correct.

42N01
Status description
error: syntax error or access rule violation - no such constituent graph exists in composite database.
The constituent graph { $graph } was not found in the in composite database { $db }. Verify that the
spelling is correct.

42N02
Status description
error: syntax error or access rule violation - writing in read access mode. Writing in read access mode
not allowed.

42N03
Status description
error: syntax error or access rule violation - writing to multiple graphs. Writing to multiple graphs in the
same transaction is not allowed. Use CALL IN TRANSACTION or create separate transactions in your
application.

42N04
Status description
error: syntax error or access rule violation - unsupported access of composite database. Failed to
access database identified by { $db1 } while connected to session database { $db2 }. Connect to {
$db3 } directly.

27
42N05
Status description
error: syntax error or access rule violation - unsupported access of standard database. Failed to access
database identified by { $db1 } while connected to composite session database { $db2 }. Connect to {
$db3 } directly or create an alias in the composite database.

42N06
Status description
error: syntax error or access rule violation - unsupported action on composite database. { $action } is
not supported on composite databases.

42N07
Status description
error: syntax error or access rule violation - variable shadowing. The variable { $variable } is
shadowing a variable with the same name from the outer scope and needs to be renamed.

42N08
Status description
error: syntax error or access rule violation - no such procedure or function. The procedure or function {
$procFun } was not registered for this database instance. Verify that the spelling is correct.

42N09
Status description
error: syntax error or access rule violation - no such user. A user with the name { $user } was not
found. Verify that the spelling is correct.

42N10
Status description
error: syntax error or access rule violation - no such role. A role with the name { $role } was not
found. Verify that the spelling is correct.

42N11
Status description
error: syntax error or access rule violation - database or alias already exists. A [composite] database or
alias with the name { $db } already exists.

42N12

28
Status description
error: syntax error or access rule violation - user already exists. A user with the name { $user } already
exists.

42N13
Status description
error: syntax error or access rule violation - role already exists. A role with the name { $role } already
exists.

42N14
Status description
error: syntax error or access rule violation - invalid use of command. { $clause } cannot be used
together with { $cmd }.

42N15
Status description
error: syntax error or access rule violation - invalid use of reserved keyword. { $syntax } is a reserved
keyword and cannot be used in this place.

42N16
Status description
error: syntax error or access rule violation - unsupported index or constraint. Only single property {
$idxType } are supported.

42N17
Status description
error: syntax error or access rule violation - unsupported request. { $input } is not allowed on the
system database.

42N19
Status description
error: syntax error or access rule violation - duplicate clause. Duplicate { $syntax } clause.

42N20
Status description
error: syntax error or access rule violation - empty list range operator. The list range operator '[ ]' cannot
be empty.

29
42N21
Status description
error: syntax error or access rule violation - unaliased return item. Expression in { $clause } must be
aliased (use AS).

42N22
Status description
error: syntax error or access rule violation - single return column required. A COLLECT subquery must
end with a single return column.

42N24
Status description
error: syntax error or access rule violation - missing WITH. A WITH clause is required between { $input1
} and { $input2 }.

42N29
Status description
error: syntax error or access rule violation - unbound variables in pattern expression. Pattern
expressions are not allowed to introduce new variables: { $var }.

42N31
Status description
error: syntax error or access rule violation - specified number out of range. Expected { $component } to
be { $valueType } in the range { $lower } to { $upper } but found { $value }.

42N39
Status description
error: syntax error or access rule violation - incompatible return columns. All subqueries in a UNION
clause must have the same return column names.

42N40
Status description
error: syntax error or access rule violation - single relationship pattern required. The { $fun } function
must contain one relationship pattern.

42N42
Status description
error: syntax error or access rule violation - unsupported sub-path binding. Sub-path assignment is not

30
supported.

42N45
Status description
error: syntax error or access rule violation - unexpected end of input. Unexpected end of input,
expected 'CYPHER', 'EXPLAIN', 'PROFILE' or a query.

42N49
Status description
error: syntax error or access rule violation - unsupported normal form. Unknown Normal Form: { $input
}.

42N51
Status description
error: syntax error or access rule violation - invalid parameter. Invalid parameter { $param }.

42N57
Status description
error: syntax error or access rule violation - invalid use of data-modifications in expressions. { $expr }
cannot contain any updating clauses.

42N70
Status description
error: syntax error or access rule violation - function without required WHERE clause. The function {
$fun } requires a WHERE clause.

42N71
Status description
error: syntax error or access rule violation - incomplete query. A query must conclude with a RETURN
clause, a FINISH clause, an update clause, a unit subquery call, or a procedure call without a YIELD
clause.

42N73
Status description
error: syntax error or access rule violation - invalid placement of USE clause. The USE clause must be
the first clause of a query or an operand to '… UNION …' . In a CALL sub-query, it can also be the second
clause if the first clause is an importing WITH.

31
42N74
Status description
error: syntax error or access rule violation - invalid nested USE clause. Failed to access { $db1 } and {
$db2 }. Child USE clauses must target the same graph as their parent query. Run in separate
(sub)queries instead.

42N75
Status description
error: syntax error or access rule violation - invalid use of graph function. A call to the graph function {
$fun } is only allowed as the top-level argument of a USE clause.

42N76
Status description
error: syntax error or access rule violation - unfulfillable hints. The hint(s) { $hintAndedList } cannot be
fulfilled.

42N77
Status description
error: syntax error or access rule violation - missing hint predicate. The hint { $hint } cannot be
fulfilled. The query does not contain a compatible predicate for { $entityType } on { $variable }.

42N78
Status description
error: syntax error or access rule violation - variable already bound. Node { $var } has already been
bound and cannot be modified by the { $clause } clause.

42N83
Status description
error: syntax error or access rule violation - impersonation disallowed while password change required.
Cannot impersonate a user while password change required.

42N84
Status description
error: syntax error or access rule violation - TERMINATE TRANSACTION misses YIELD clause. WHERE clause
without YIELD clause. Use 'TERMINATE TRANSACTION … YIELD … WHERE …'.

42N85

32
Status description
error: syntax error or access rule violation - cannot specify both allowed and denied databases. Allowed
and denied database options are mutually exclusive.

42N86
Status description
error: syntax error or access rule violation - wildcard in parameter. { $syntax } failed. Parameterized
database and graph names do not support wildcards.

42N88
Status description
error: syntax error or access rule violation - cannot grant privilege. Permission cannot be granted for
'REMOVE IMMUTABLE PRIVILEGE'.

42N89
Status description
error: syntax error or access rule violation - invalid driver settings map. Failed evaluating the given
driver settings. { $cause }

42N90
Status description
error: syntax error or access rule violation - cannot alter immutable composite database. Composite
databases cannot be altered (database: { $db }).

42N97
Status description
error: syntax error or access rule violation - missing mandatory auth clause. Clause { $clause } is
mandatory for auth provider { $auth }.

42N98
Status description
error: syntax error or access rule violation - cannot modify own user. Cannot modify the user record of
the current user.

42N99
Status description
error: syntax error or access rule violation - cannot delete own user. Cannot delete the user record of
the current user.

33
42NA5
Status description
info: accessing multiple graphs only supported on composite databases. Accessing multiple graphs in
the same query is only supported on composite databases. Connect to a composite database with the
desired constituents.

42NA6
Status description
info: invalid alias target. Aliases are not allowed to target composite databases.

42NA7
Status description
info: referenced database not found. No database is corresponding to { $db }. Verify that the
elementId is correct.

42NFD
Status description
error: syntax error or access rule violation - credentials expired. Permission denied. The credentials you
provided were valid, but must be changed before you can use this instance.

42NFE
Status description
error: syntax error or access rule violation - auth info expired. Authentication and/or authorization info
expired.

42NFF
Status description
error: syntax error or access rule violation - permission/access denied. Access denied, see the security
logs for details.

General processing exception


General processing exceptions occur when there is a general processing error, such as an internal error,
deadlock, execution failure, invalid server state transition, constraint creation or drop failure, etc.

50N00
Status description
error: general processing exception - internal error. Internal exception raised { $msgTitle }: { $msg }

34
50N05
Status description
error: general processing exception - deadlock detected. Deadlock detected while trying to acquire
locks. See log for more details.

50N06
Status description
error: general processing exception - remote execution client error. Remote execution failed. See cause
for more details.

50N07
Status description
error: general processing exception - execution failed. Execution failed. See cause and debug log for
details.

50N09
Status description
error: general processing exception - invalid server state transition. The server transitioned into a server
state that is not valid in the current context: { $boltServerState }.

50N11
Status description
error: general processing exception - constraint creation failed. Unable to create { $constrDescrOrName
}.

50N12
Status description
error: general processing exception - constraint drop failed. Unable to drop { $constrDescrOrName }.

50N16
Status description
error: general processing exception - remote execution transient error. Remote execution failed. See
cause for more details.

50N17
Status description
error: general processing exception - remote execution database error. Remote execution failed. See
cause for more details.

35
50N42
Status description
error: general processing exception - unexpected error. Unexpected error has occurred. See debug log
for details.

50N42 is the default GQLSTATUS code for exceptions without a GQL object. For more
 information, see Operations Manual → Use JSON format for the query log.

System configuration or operation exception


System configuration or operation exception errors occur when there is an error in the system
configuration or operation, such as procedure registration failure, a missing class field annotation, an
unsupported injectable component type, duplicate field names, invalid map key type, etc.

51N00
Status description
error: system configuration or operation exception - procedure registration error. Failed to register
procedure/function.

51N01
Status description
error: system configuration or operation exception - class field annotation should be public, non-final,
and non-static. The field { $procField } in the class { $procClass } is annotated as a '@Context' field,
but it is declared as static. '@Context' fields must be public, non-final and non-static.

51N02
Status description
error: system configuration or operation exception - unsupported injectable component type. Unable to
set up injection for procedure { $procClass }. The field { $procField } has type { $procFieldType }
which is not a supported injectable component.

51N03
Status description
error: system configuration or operation exception - unable to access field. Unable to set up injection for
{ $procClass }, failed to access field { $procField }.

51N04
Status description
error: system configuration or operation exception - missing class field annotation. The field {
$procField } on { $procClass } must be annotated as a '@Context' field in order to store its state.

36
51N05
Status description
error: system configuration or operation exception - class field should be public and non-final. The field
{ $procField } on { $procClass } must be declared non-final and public.

51N06
Status description
error: system configuration or operation exception - missing argument name. The argument at position
{ $pos } in { $procMethod } requires a '@Name' annotation and a non-empty name.

51N07
Status description
error: system configuration or operation exception - invalid ordering of default arguments. The {
$procFun } contains a non-default argument after a default argument. Non-default arguments are not
allowed to be positioned after default arguments.

51N08
Status description
error: system configuration or operation exception - exactly one @UserAggregationResult method and
one @UserAggregationUpdate method required. The class { $procClass } must contain exactly one
'@UserAggregationResult' method and exactly one '@UserAggregationUpdate' method.

51N09
Status description
error: system configuration or operation exception - @UserAggregationUpdate method must be public
and void. The '@UserAggregationUpdate' method { $procMethod } of { $procClass } must be public
and have the return type 'void'.

51N10
Status description
error: system configuration or operation exception - aggregation method not public. The method {
$procMethod } of { $procClass } must be public.

51N11
Status description
error: system configuration or operation exception - class not public. The class { $procClass } must be
public.

37
51N12
Status description
error: system configuration or operation exception - class not void. The procedure { $proc } has zero
output fields and must be defined as void.

51N13
Status description
error: system configuration or operation exception - procedure or function name already in use. Unable
to register the procedure or function { $procFun } because the name is already in use.

51N14
Status description
error: system configuration or operation exception - duplicate field name. The procedure { $proc } has
a duplicate { $procFieldType } field, { $procField }.

51N15
Status description
error: system configuration or operation exception - invalid map key type. Type mismatch for map key.
Required 'STRING', but found { $valueType }.

51N16
Status description
error: system configuration or operation exception - invalid default value type. Type mismatch for the
default value. Required { $valueType }, but found { $input }.

51N17
Status description
error: system configuration or operation exception - invalid procedure or function name. Procedures
and functions cannot be defined in the root namespace, or use a reserved namespace. Use the package
name instead (e.g., org.example.com.{ $procFun }).

51N18
Status description
error: system configuration or operation exception - invalid method return type. The method {
$procMethod } has an invalid return type. Procedures must return a stream of records, where each
record is of a defined concrete class.

38
51N20
Status description
error: system configuration or operation exception - cannot inject field. The field { $procField } is not
injectable. Ensure the field is marked as public and non-final.

51N21
Status description
error: system configuration or operation exception - procedure registry is busy. The procedure
registration failed because the procedure registry was busy. Try again.

51N22
Status description
error: system configuration or operation exception - exhaustive shortest path search disabled. Finding
the shortest path for the given pattern requires an exhaustive search. To enable exhaustive searches,
set 'cypher.forbid_exhaustive_shortestpath' to false.

51N23
Status description
error: system configuration or operation exception - cyclic shortest path search disabled. Cannot find
the shortest path when the start and end nodes are the same. To enable this behavior, set
'dbms.cypher.forbid_shortestpath_common_nodes' to false.

51N24
Status description
error: system configuration or operation exception - insufficient resources for plan search. Could not
find a query plan within given time and space limits.

51N27
Status description
error: system configuration or operation exception - not supported in this edition. { $item } is not
supported in { $edition }.

51N29
Status description
error: system configuration or operation exception - not supported by this server. The command { $cmd
} must be executed on the current 'LEADER' server.

39
51N30
Status description
error: system configuration or operation exception - not supported with this configuration. { $item } is
not supported in { $context }.

51N32
Status description
error: system configuration or operation exception - server panic. Server is in panic.

51N33
Status description
error: system configuration or operation exception - replication error. This member failed to replicate
transaction, try again.

51N34
Status description
error: system configuration or operation exception - write transaction failed due to leader change.
Failed to write to the database due to a cluster leader change. Retrying your request at a later time may
succeed.

51N35
Status description
error: system configuration or operation exception - database location changed. The location of { $db }
has changed while the transaction was running.

51N36
Status description
error: system configuration or operation exception - out of memory. There is not enough memory to
perform the current task.

51N37
Status description
error: system configuration or operation exception - stack overflow. There is not enough stack size to
perform the current task.

51N38
Status description
error: system configuration or operation exception - failed to acquire execution thread. There are

40
insufficient threads available for executing the current task.

51N39
Status description
error: system configuration or operation exception - raft log corrupted. Expected set of files not found
on disk. Please restore from backup.

51N40
Status description
error: system configuration or operation exception - unable to start database. Database { $db } failed
to start. Try restarting it.

51N41
Status description
error: system configuration or operation exception - admin operation failed. Server or database admin
operation not possible.

51N43
Status description
error: system configuration or operation exception - cannot deallocate servers. Cannot deallocate
server(s) { $serverList }.

51N44
Status description
error: system configuration or operation exception - cannot drop server. Cannot drop server { $server
}.

51N45
Status description
error: system configuration or operation exception - cannot cordon server. Cannot cordon server {
$server }.

51N46
Status description
error: system configuration or operation exception - cannot alter server. Cannot alter server { $server
}.

41
51N47
Status description
error: system configuration or operation exception - cannot rename server. Cannot rename server {
$server }.

51N48
Status description
error: system configuration or operation exception - cannot enable server. Cannot enable server {
$server }.

51N49
Status description
error: system configuration or operation exception - cannot alter database. Cannot alter database { $db
}.

51N50
Status description
error: system configuration or operation exception - cannot recreate database. Cannot recreate
database { $db }.

51N51
Status description
error: system configuration or operation exception - cannot create database. Cannot create database {
$db }.

51N52
Status description
error: system configuration or operation exception - number of primaries out of range. Cannot alter
database topology. Number of primaries { $count } needs to be at least 1 and may not exceed {
$upper }.

51N53
Status description
error: system configuration or operation exception - number of secondaries out of range. Cannot alter
database topology. Number of secondaries { $count } needs to be at least 0 and may not exceed {
$upper }.

42
51N54
Status description
error: system configuration or operation exception - cannot reallocate. Failed to calculate reallocation
for databases. { $msg }

51N55
Status description
error: system configuration or operation exception - cannot create additional database. Failed to create
the database { $db }. The limit of databases is reached. Either increase the limit using the config
setting { $cfgSetting } or drop a database.

51N56
Status description
error: system configuration or operation exception - topology out of range. The number of {
$serverType } seeding servers { $count1 } is larger than the desired number of { $allocType }
allocations { $count2 }.

51N57
Status description
error: system configuration or operation exception - generic topology modification error. Unexpected
error while picking allocations. { $msg }

51N59
Status description
error: system configuration or operation exception - internal resource exhaustion. The DBMS is unable
to handle the request, please retry later or contact the system operator. More information is present in
the logs.

51N60
Status description
error: system configuration or operation exception - unable to check enterprise license acceptance. The
DBMS is unable to determine the enterprise license acceptance status.

51N63
Status description
error: system configuration or operation exception - index is still populating. Index is not ready yet.
Wait until it finishes populating and retry the transaction.

43
51N64
Status description
error: system configuration or operation exception - index dropped while sampling. The index dropped
while sampling.

51N65
Status description
error: system configuration or operation exception - vector index dimensionality mismatch. Vector index
{ $idx } has a dimensionality of { $dim1 }, but indexed vectors have { $dim2 }.

51N66
Status description
error: system configuration or operation exception - resource exhaustion. Insufficient resources to
complete the request.

51N68
Status description
error: system configuration or operation exception - CDC is disabled for this database. Change Data
Capture is not currently enabled for this database.

51N69
Status description
error: system configuration or operation exception - system database is immutable. It is not possible to
perform { $operation } on the system database.

51N70
Status description
error: system configuration or operation exception - bolt is not enabled. Cannot get routing table for {
$db } because Bolt is not enabled. Please update your configuration such that 'server.bolt.enabled' is
set to true.

51N71
Status description
error: system configuration or operation exception - unsupported operation of a sharded database.
Feature: { $feat } is not available in a sharded database.

Procedure exception
Procedure exceptions occur when there is an error in executing a procedure, such as when the procedure

44
execution fails due to a client error, when the procedure cannot be invoked on a primary, when the number
of arguments to checkConnectivity is invalid, etc.

52N02
Status description
error: procedure exception - procedure execution client error. Execution of the procedure { $proc }
failed due to a client error.

52N03
Status description
error: procedure exception - invalid procedure execution mode. Execution of the procedure { $proc }
failed due to an invalid specified execution mode { $procExeMode }.

52N05
Status description
error: procedure exception - must invoke procedure on secondary. Cannot invoke procedure on this
member because it is not a secondary for the database { $db }.

52N06
Status description
error: procedure exception - invalid number of arguments to checkConnectivity. Unexpected number of
arguments (expected 0-2 but received { $count }).

52N07
Status description
error: procedure exception - invalid port argument to checkConnectivity. Unrecognised port name {
$port } (valid values are: { $portList }.

52N08
Status description
error: procedure exception - invalid server id argument to checkConnectivity. Unable to parse server id
{ $server }.

52N09
Status description
error: procedure exception - procedure execution database error. Execution of the procedure { $proc }
failed due to a database error.

45
52N10
Status description
error: procedure exception - invalid address key. An address key is included in the query string provided
to the GetRoutingTableProcedure, but its value could not be parsed.

52N11
Status description
error: procedure exception - generic topology procedure error. An unexpected error has occurred.
Please refer to the server’s debug log for more information.

52N12
Status description
error: procedure exception - cannot change default database. The previous default database { $db } is
still running.

52N13
Status description
error: procedure exception - new default database does not exist. New default database { $db } does
not exist.

52N14
Status description
error: procedure exception - system cannot be default database. System database cannot be set as
default.

52N16
Status description
error: procedure exception - invalid procedure argument list. Invalid arguments to procedure.

52N17
Status description
error: procedure exception - quarantine change failed. Setting/removing the quarantine marker failed.

52N18
Status description
error: procedure exception - too many seeders. The number of seeding servers { $countSeeders } is
larger than the defined number of allocations { $countAllocs }.

46
52N19
Status description
error: procedure exception - no such seeder. The specified seeding server with id { $server } was not
found. Verify that the spelling is correct.

52N23
Status description
error: procedure exception - non-reloadable namespace. The following namespaces are not reloadable:
{ $namespaceList }

52N25
Status description
error: procedure exception - JMX error. JMX error while accessing { $param }. See logs for more
information.

52N29
Status description
error: procedure exception - outdated change identifier. Given ChangeIdentifier describes a transaction
that occurred before any enrichment records exist.

52N30
Status description
error: procedure exception - future change identifier. Given ChangeIdentifier describes a transaction
that hasn’t yet occurred.

52N31
Status description
error: procedure exception - wrong database. Change identifier { $param } does not belong to this
database.

52N32
Status description
error: procedure exception - invalid sequence number. Change identifier { $param1 } has an invalid
sequence number { $param2 }.

52N33
Status description
error: procedure exception - procedure invocation failed. Failed to invoke procedure/function { $sig }
caused by: { $msg }.

47
52N34
Status description
error: procedure exception - procedure sandboxed. { $sig } is unavailable because it is sandboxed.
Sandboxing is controlled by the dbms.security.procedures.unrestricted setting. Only un-restrict
procedures you can trust with access to database internals.

52N35
Status description
error: procedure exception - procedure compilation failed. Failed to compile procedure/function defined
in { $procClass }: { $msg }

List of Neo4j error codes


This page lists the current Neo4j error codes, which which are returned along side GQLSTATUS error
codes, grouped by type.

Client errors
This is a complete list of all client errors Neo4j may return, and what they mean.

Neo4j code Description

Neo.ClientError.ChangeDataCapture.InvalidIdentifier Invalid change identifier.

Neo.ClientError.Cluster.NotALeader The request cannot be processed by this server. Write


requests can only be processed by the leader.

Neo.ClientError.Cluster.Routing Unable to route the request to the appropriate server

Neo.ClientError.Database.DatabaseNotFound The request referred to a database that does not exist.

Neo.ClientError.Database.ExistingAliasFound The request referred to a database with an alias.

Neo.ClientError.Database.ExistingDatabaseFound The request referred to a database that already exists.

Neo.ClientError.Database.IllegalAliasChain An illegal chain of aliases has been detected. This request


cannot be executed.

Neo.ClientError.Fabric.AccessMode The request could not be completed due to an access mode


violation

Neo.ClientError.General.ForbiddenOnReadOnlyDatabase This is a read-only database, writing or modifying the


database is not allowed.

Neo.ClientError.General.InvalidArguments The request contained fields that were empty or are not
allowed.

Neo.ClientError.General.TransactionOutOfMemoryError The transaction used more memory than was allowed. The
maximum allowed size for a transaction can be configured
with db.memory.transaction.max_size in the Neo4j
configuration file (normally in conf/neo4j.conf or, if you are
using Neo4j Desktop, found through the user interface).

48
Neo4j code Description

Neo.ClientError.General.UpgradeRequired This transaction required the database to be of a higher


kernel version than it is. Make sure that the Neoj4 DBMS has
been correctly upgraded before retrying this operation.

Neo.ClientError.General.WriteOnReadOnlyAccessDatabase This database is in read-only mode, writing or modifying the


database is not allowed.

Neo.ClientError.Procedure.ProcedureCallFailed Failed to invoke a procedure. See the detailed error


description for the exact cause.

Neo.ClientError.Procedure.ProcedureNotFound A request referred to a procedure that is not registered with


this database instance. If you are deploying custom
procedures in a cluster setup, ensure all instances in the
cluster have the procedure jar file deployed.

Neo.ClientError.Procedure.ProcedureRegistrationFailed The database failed to register a procedure, refer to the


associated error message for details.

Neo.ClientError.Procedure.ProcedureTimedOut The procedure did not complete within the specified timeout.
You may want to retry with a longer timeout.

Neo.ClientError.Procedure.TypeError A procedure is using or receiving a value of an invalid type.

Neo.ClientError.Request.Invalid The client provided an invalid request.

Neo.ClientError.Request.InvalidFormat The client provided a request that was missing required fields
or had values that are not allowed.

Neo.ClientError.Request.InvalidUsage The client made a request but did not consume outgoing
buffers in a timely fashion.

Neo.ClientError.Routing.DbmsInPanic Server is in panic.

Neo.ClientError.Routing.RoutingFailed Failed to route.

Neo.ClientError.Schema.ConstraintAlreadyExists Unable to perform this operation because it will clash with a


pre-existing constraint.

Neo.ClientError.Schema.ConstraintNotFound The request (directly or indirectly) referred to a constraint


that does not exist.

Neo.ClientError.Schema.ConstraintValidationFailed A constraint imposed by the database was violated.

Neo.ClientError.Schema.ConstraintViolation Added or changed index entry violates a constraint.

Neo.ClientError.Schema.ConstraintWithNameAlreadyExists Unable to perform this operation because a constraint with


that name already exists.

Neo.ClientError.Schema.EquivalentSchemaRuleAlreadyExis Unable to perform this operation because an equivalent


ts schema rule already exists.

Neo.ClientError.Schema.ForbiddenOnConstraintIndex A requested operation cannot be performed on the specified


index because the index is part of a constraint. If you want to
drop the index, you must also drop the constraint.

Neo.ClientError.Schema.IndexAlreadyExists Unable to perform this operation because it will clash with a


pre-existing index.

Neo.ClientError.Schema.IndexMultipleFound The request referenced an index by its schema and multiple


matching indexes were found.

49
Neo4j code Description

Neo.ClientError.Schema.IndexNotApplicable The request did not contain the properties required by the
index.

Neo.ClientError.Schema.IndexNotFound The request (directly or indirectly) referred to an index that


does not exist.

Neo.ClientError.Schema.IndexWithNameAlreadyExists Unable to perform this operation because an index with that


name already exists.

Neo.ClientError.Schema.RepeatedLabelInSchema Unable to create an index or a constraint because the schema


had a repeated label.

Neo.ClientError.Schema.RepeatedPropertyInCompositeSche Unable to create an index or a constraint because the schema


ma had a repeated property.

Neo.ClientError.Schema.RepeatedRelationshipTypeInSchem Unable to create an index or a constraint because the schema


a had a repeated relationship type.

Neo.ClientError.Schema.TokenNameError An invalid name is used for a token (label, relationship type,


property key). Tokens cannot be empty strings and cannot be
null.

Neo.ClientError.Security.AuthenticationRateLimit The client has provided incorrect authentication details too


many times in a row.

Neo.ClientError.Security.AuthorizationExpired The stored authorization info has expired. Please reconnect.

Neo.ClientError.Security.CredentialsExpired The credentials have expired and need to be updated.

Neo.ClientError.Security.Forbidden An attempt was made to perform an unauthorized action.

Neo.ClientError.Security.TokenExpired The auth provider token has expired.

Neo.ClientError.Security.Unauthorized The client is unauthorized due to authentication failure.

Neo.ClientError.Statement.AccessMode The request could not be completed due to an access mode


violation.

Neo.ClientError.Statement.ArgumentError The statement is attempting to perform operations using


invalid arguments.

Neo.ClientError.Statement.ArithmeticError Invalid use of arithmetic, such as dividing by zero.

Neo.ClientError.Statement.ConstraintVerificationFailed A constraint imposed by the statement is violated by the data


in the database.

Neo.ClientError.Statement.EntityNotFound The statement refers to a non-existent entity.

Neo.ClientError.Statement.ExternalResourceFailed Access to an external resource failed.

Neo.ClientError.Statement.NotSystemDatabaseError This is an administration command and it should be executed


against the system database.

Neo.ClientError.Statement.ParameterMissing The statement refers to a parameter that was not provided in


the request.

Neo.ClientError.Statement.PropertyNotFound The statement refers to a non-existent property.

Neo.ClientError.Statement.RemoteExecutionClientError The database was unable to execute a remote part of the


statement due to a client error.

50
Neo4j code Description

Neo.ClientError.Statement.RuntimeUnsupportedError This query is not supported by the chosen runtime.

Neo.ClientError.Statement.SemanticError The statement is syntactically valid but expresses something


that the database cannot do.

Neo.ClientError.Statement.SyntaxError The statement contains invalid or unsupported syntax.

Neo.ClientError.Statement.TypeError The statement is attempting to perform operations on values


with types that are not supported by the operation.

Neo.ClientError.Statement.UnsupportedAdministrationCom This administration command is not supported.


mand

Neo.ClientError.Statement.UnsupportedOperationError This query performed an operation that is not supported in


this context.

Neo.ClientError.Transaction.ForbiddenDueToTransactionT The transaction is of the wrong type to service the request.


ype For instance, a transaction that has had schema
modifications performed in it cannot be used to subsequently
perform data operations, and vice versa.

Neo.ClientError.Transaction.InvalidBookmark The supplied bookmark cannot be interpreted. You should


only supply a bookmark that was previously generated by
Neo4j. Maybe you have generated your own bookmark, or
modified a bookmark since it was generated by Neo4j.

Neo.ClientError.Transaction.InvalidBookmarkMixture Mixing bookmarks generated by different databases is


forbidden. You should only chain bookmarks that are
generated from the same database. You may however chain
bookmarks generated from the system database with
bookmarks from another database.

Neo.ClientError.Transaction.LockClientStopped The transaction has been terminated, so no more locks can


be acquired. This may occur because the transaction ran
longer than the configured transaction timeout, a human
operator manually terminated the transaction, or the
database shut down.

Neo.ClientError.Transaction.Terminated Explicitly terminated by the user.

Neo.ClientError.Transaction.TransactionAccessedConcurr There were concurrent requests accessing the same


ently transaction, which is not allowed.

Neo.ClientError.Transaction.TransactionHookFailed Transaction hook failure.

Neo.ClientError.Transaction.TransactionMarkedAsFailed The transaction was marked as both successful and failed.


Because failure takes precedence, the transaction was rolled
back.

Neo.ClientError.Transaction.TransactionNotFound The request referred to a transaction that does not exist.

Neo.ClientError.Transaction.TransactionTimedOut The transaction has not completed within the specified


timeout (db.transaction.timeout). You may want to retry
with a longer timeout.

Neo.ClientError.Transaction.TransactionTimedOutClientC The transaction has not completed within the timeout


onfiguration specified at its start by the client. You may want to retry with
a longer timeout.

51
Neo4j code Description

Neo.ClientError.Transaction.TransactionValidationFaile Transaction changes did not pass validation checks.


d

Transient errors
This is a complete list of all transient errors Neo4j may return, and what they mean.

Neo4j code Description

Neo.TransientError.ChangeDataCapture.FutureIdentifier Change identifier points to a future transaction that has not


yet happened on this database instance.

Neo.TransientError.Cluster.ReplicationFailure Replication failure.

Neo.TransientError.General.DatabaseUnavailable The database is not currently available to serve your request,


refer to the database logs for more details. Retrying your
request at a later time may succeed.

Neo.TransientError.General.MemoryPoolOutOfMemoryError The memory pool limit was exceeded. The corresponding


setting can be found in the error message.

Neo.TransientError.General.OutOfMemoryError There is not enough memory to perform the current task.


Please try increasing server.memory.heap.max_size in the
Neo4j configuration file (normally in conf/neo4j.conf or, if you
are using Neo4j Desktop, found through the user interface).

If you are running an embedded installation, you can increase


the heap by using the -Xmx command line flag, and then
restart the database.

Neo.TransientError.General.StackOverFlowError There is not enough stack size to perform the current task.
This is generally considered to be a database error, so please
contact Neo4j support.

You could try increasing the stack size; for example to set the
stack size to 2M, add server.jvm.additional=-Xss2M to in the
Neo4j configuration file (normally in conf/neo4j.conf or, if you
are using Neo4j Desktop, found through the user interface).

If you are running an embedded installation, you can add


-Xss2M as command line flag.

Neo.TransientError.General.TransactionMemoryLimit There is not enough memory to perform the current task.


Please try increasing
server.memory.off_heap.transaction_max_size in the Neo4j
configuration file (normally in conf/neo4j.conf or, if you are
using Neo4j Desktop, found through the user interface), and
then restart the database.

Neo.TransientError.Request.NoThreadsAvailable There are no available threads to serve this request at the


moment. You can retry at a later time, or consider increasing
max thread pool size for bolt connector(s).

Neo.TransientError.Security.AuthProviderFailed An auth provider request failed.

Neo.TransientError.Security.AuthProviderTimeout An auth provider request timed out.

52
Neo4j code Description

Neo.TransientError.Security.ModifiedConcurrently The user was modified concurrently to this request.

Neo.TransientError.Statement.ExecutionTimeout The database was unable to execute the statement in a


timely fashion.

Neo.TransientError.Statement.RemoteExecutionTransientE The database was unable to execute a remote part of the


rror statement due to a transient failure.

Neo.TransientError.Transaction.BookmarkTimeout Bookmark wait timed out. Database has not reached the
specified version.

Neo.TransientError.Transaction.ConstraintsChanged Database constraints changed since the start of this


transaction.

Neo.TransientError.Transaction.DeadlockDetected This transaction, and at least one more transaction, has


acquired locks in a way that it will wait indefinitely, and the
database has aborted it. Retrying this transaction will most
likely be successful.

Neo.TransientError.Transaction.Interrupted Interrupted while waiting.

Neo.TransientError.Transaction.LeaderSwitch The request could not be completed due to cluster leader


switch.

Neo.TransientError.Transaction.LeaseExpired The lease under which this transaction was started is no


longer valid.

Neo.TransientError.Transaction.LockAcquisitionTimeout Unable to acquire lock within configured timeout


(db.lock.acquisition.timeout).

Neo.TransientError.Transaction.MaximumTransactionLimit Unable to start new transaction since the maximum number


Reached of concurrently executing transactions is reached
(db.transaction.concurrent.maximum). You can retry at a
later time or consider increasing allowed maximum of
concurrent transactions.

Neo.TransientError.Transaction.Outdated Transaction has seen state which has been invalidated by


applied updates while the transaction was active.
Transaction may succeed if retried.

Neo.TransientError.Transaction.QueryExecutionFailedOnT The transaction was marked as failed because a query failed.


ransaction

Database error
This is a complete list of all database errors Neo4j may return, and what they mean.

Neo4j code Description

Neo.DatabaseError.ChangeDataCapture.Disabled Change Data Capture is not currently enabled for this


database.

Neo.DatabaseError.ChangeDataCapture.ScanFailure Unable to read the Change Data Capture data for this
database.

Neo.DatabaseError.Database.DatabaseLimitReached The limit to number of databases has been reached.

Neo.DatabaseError.Database.UnableToStartDatabase Unable to start database.

53
Neo4j code Description

Neo.DatabaseError.Database.Unknown Unknown database management error.

Neo.DatabaseError.Fabric.RemoteExecutionFailed The database was unable to execute a remote part of the


statement.

Neo.DatabaseError.General.IndexCorruptionDetected The request (directly or indirectly) referred to an index that is


in a failed state. The index needs to be dropped and
recreated manually.

Neo.DatabaseError.General.SchemaCorruptionDetected A malformed schema rule was encountered. Please contact


your support representative.

Neo.DatabaseError.General.StorageDamageDetected Expected set of files not found on disk. Please restore from
backup.

Neo.DatabaseError.General.UnknownError An unknown error occurred.

Neo.DatabaseError.Schema.ConstraintCreationFailed Creating a requested constraint failed.

Neo.DatabaseError.Schema.ConstraintDropFailed The database failed to drop a requested constraint.

Neo.DatabaseError.Schema.IndexCreationFailed Failed to create an index.

Neo.DatabaseError.Schema.IndexDropFailed The database failed to drop a requested index.

Neo.DatabaseError.Schema.LabelAccessFailed The request accessed a label that did not exist.

Neo.DatabaseError.Schema.PropertyKeyAccessFailed The request accessed a property that does not exist.

Neo.DatabaseError.Schema.RelationshipTypeAccessFailed The request accessed a relationship type that does not exist.

Neo.DatabaseError.Schema.SchemaRuleAccessFailed The request referred to a schema rule that does not exist.

Neo.DatabaseError.Schema.SchemaRuleDuplicateFound The request referred to a schema rule that is defined multiple


times.

Neo.DatabaseError.Schema.TokenLimitReached The maximum number of tokens of this type has been


reached, no more tokens of this type can be created.

Neo.DatabaseError.Statement.ExecutionFailed The database was unable to execute the statement.

Neo.DatabaseError.Statement.RemoteExecutionFailed The database was unable to execute a remote part of the


statement.

Neo.DatabaseError.Transaction.LinkedTransactionError The transaction was terminated because another transaction


executing the same query encountered an error.

Neo.DatabaseError.Transaction.TransactionCommitFailed The database was unable to commit the transaction.

Neo.DatabaseError.Transaction.TransactionLogError The database was unable to write transaction to log.

Neo.DatabaseError.Transaction.TransactionRollbackFaile The database was unable to roll back the transaction.


d

Neo.DatabaseError.Transaction.TransactionStartFailed The database was unable to start the transaction.

Neo.DatabaseError.Transaction.TransactionTerminationFa The database was unable to terminate the transaction.


iled

54
Server notifications
After a successful query execution, the Neo4j server sends notifications to give additional information
about the query execution or provide advice on how to improve the query’s quality. The driver receives
these notifications and sends them to the Neo4j tools (e.g. Browser, Bloom, Cypher Shell) or the user
application, which display them to the user.

From version 5.23, Neo4j has a new GqlStatusObject API in addition to the existing Notification API
(deprecated since 5.26). The GqlStatusObject API provides information about the status of a Cypher query
or command execution in compliance with the ISO/IEC 39075:2024(en) - Information technology -
Database languages - GQL Standard.

This page describes the GQL-status object and the Neo4j notification frameworks, their structure, the
objects they provide for notification, and how to interpret them. It also explains the server notification
grouping and filtering, the notification internals, and the server-driver compatibility for both the
Notification and GqlStatusObject APIs.

GQL-status notification object Label—version 5.23


In the GQL-status object framework, when a user executes a query to the server, it always produces a
result known as the execution outcome. If no error occurs during execution, the outcome is recorded as a
completion condition, indicating a successful result with a regular non-empty result, an omitted result, or
no data. It is represented as a list of GQL-status objects, which are organized according to the following
precedence rules, where the first object in the list is the primary GQL-status object:

1. NO DATA has precedence over WARNING.

2. WARNING has precedence over the SUCCESSFUL COMPLETION subclass.

3. SUCCESSFUL COMPLETION subclass has precedence over INFORMATIONAL.

4. INFORMATIONAL is the condition with the least precedence.

For more information about SUCCESSFUL COMPLETION, NO DATA, or OMITTED RESULT, see General codes for
success.
The GQL-status object can contain multiple GQL-status objects, where each object represents a different
condition of the query execution. The primary GQL-status object describes the condition with the greatest
precedence and is always present. All other GQL-status objects in the list are additional GQL-status
objects.

The GQL-status object also includes Neo4j-specific information, such as severity level and notification
classification, which can be used for filtering. For more information about notification grouping and
filtering, see Server notification grouping and filtering.

Each GQL-status object consists of the following fields:

Table 6. GQLSTATUS notification object

55
GQLSTATUS code A 5-character string that is the concatenation of a 2-character class code followed
by a 3-character subclass code, which identifies the condition of the notification.

StatusDescription A human-readable description of the GQLSTATUS, which consists of a condition, a


subcondition, and an optional additional text about the condition. The condition and
subcondition are textual representations of the class and subclass codes,
respectively.

DiagnosticRecord Extra information about the status, given as key-value pairs, both on the server and
driver side. To retrieve the full diagnostic record, you can use the
diagnosticRecord() on the server side or the corresponding method on the driver
sides. Additional helper methods are exposed for some useful fields.

Field Description

OPERATION The operation that the notification is related to. Always defaults to empty.

OPERATION_CODE The operation code that the notification is related to. Always defaults to 0.

CURRENT_SCHEMA The current schema that the notification is related to. Always defaults to /.

_severity The Neo4j severity level, which can be one of the following:

• WARNING: There might be a problem with your query. Please,


take a look.

• INFORMATION: The query is correct, but this information can still


be useful.

_classification The Neo4j category of the notification.

_position The position, given by row and column, where the notification is relevant in
the query text.

_status_paramete A map that contains all variable parts of the status description.
rs

General codes for success


GQL has three general codes for success, indicated by different GQLSTATUS codes in categories S
(successful completion) and N (no data), which are not covered by the Neo4j notification framework and
are considered to be the default statuses for successful completion, omitted result, and no data,
respectively. The Neo4j classification, severity, position, and status parameters are not meaningful for
these GQL statuses, so they are not included in the diagnostic record and are set to default values either
by the server or by the driver.

Table 7. GQLSTATUS general codes

56
GQLSTATUS Condition Subcondition Description

00000 Successful completion Successful completion with a regular non-empty result (n > 0
columns, m > 0 rows), for example, a RETURN clause with
matches.

00001 Successful completion Omitted result Successful completion with no return columns (n = 0
columns, m = 0 rows), for example, EXPLAIN queries.

02000 No data Successful completion with an empty result (n > 0 columns,


m = 0 rows), for example, a MATCH clause with no matches.

GQLSTATUS general codes are filled in by the server unless the server is too old to be aware of GQL-
status objects, in which case, it is polyfilled by the driver (see Server - driver compatibility).

Neo4j-defined GQLSTATUS codes


The Neo4j-defined GQLSTATUS codes are divided into classes and subclasses, where the class code is a
2-character string (one of 00, 01, or 03) and the subclass code is a 3-character string. The class code
indicates the general condition of the status (such as successful completion, warning, or information), and
the subclass code provides more detailed information about the condition, such as classification and
messages.

The following table lists the Neo4j-defined groups of GQLSTATUS codes and their meanings:

Table 8. GQLSTATUS groups of codes as defined by Neo4j

GQLSTATUS code Description

01N0[y] Deprecation warnings

01N3[y] Hint warnings

01N4[y] Unsupported warnings

01N5[y] Unrecognized warnings

01N6[y] Generic warnings

01N7[y] Security warnings

03N9[y] Performance information

03N6[y] Generic information

00N5[y] Unrecognized information under successful completion

00N6[y] Generic information under successful completion

00N7[y] Security information under successful completion

00N8[y] Topology information under successful completion

57
Neo4j-status notification object Label—deprecated 5.26
The Neo4j-status object for notifications contains diagnostic information representing the successful
outcome of a Cypher query or command execution, including severity, the ClientNotification code,
category, title, description, and position in the query text where the notification is relevant. Depending on
the application, some of the fields from the notification object might not be visible.

The notification object consists of the following fields:

Table 9. Neo4j notification object

Neo4j code The Neo4j code in the form of Neo.ClientNotification.[SubType].[Name].

Title The title of the Neo4j code.

Description The description of the specific notification.

Severity level The severity can be one of the following:

• WARNING: There might be a problem with your query. Please, take a look.

• INFORMATION: The query is correct, but this information can still be useful.

Category The category of the notification.

Position The position, given by row and column, where the notification is relevant in the
query text.

Server notification grouping and filtering


All server notifications are grouped by category (which is called classification in the GqlStatusObject
framework) and severity level, which can be one of WARNING, WARNING OR INFORMATION, or INFORMATION.

The driver-side notification configuration used for filtering notifications by category and severity is the
same for both Neo4j Notification and GQL-status object frameworks. The driver can filter notifications by
category/classification and severity level, and the server will only send notifications that match the driver-
side configuration.

The driver can also choose to ignore notifications. However, as per the GQLSTATUS framework, the server
must always send the primary GQL-status object. Therefore, if notifications are off or the notification
configuration filtering is set to filter out all notifications, the server will still send the primary GQL-status
object with the status SUCCESSFUL COMPLETION, OMITTED RESULT or NO DATA.

The following notification groups exist in Neo4j, ordered by severity:

Table 10. Notification groups and severity levels

58
CATEGORY/CL SEVERITY EXPLANATION RECOMMENDED ACTION
ASSIFICATION

DEPRECATION WARNING The query or command uses deprecated features Update to use the new
that should be replaced. functionality.

HINT WARNING The given hint cannot be satisfied. Remove the hint or fix the query
so the hint can be used.

UNSUPPORTED WARNING The query or command is trying to use features not Unsupported features cannot be
supported by the current system or using trusted and should not be used in
experimental features that should not be used in production.
production.

UNRECOGNIZED WARNING OR The query or command mentions entities that are Make sure you have not
INFORMATION unknown to the system. misspelled the entity.

SECURITY WARNING OR The result of the query or command indicates a Make sure that the behaviour is
INFORMATION potential security issue. what you intended.

TOPOLOGY INFORMATION Information provided while executing database and


server related commands.

SCHEMA INFORMATION Information provided while managing indexes and


constraints.

GENERIC WARNING OR Notifications that are not part of a wider class. Depends on the specific
INFORMATION notification.

PERFORMANCE INFORMATION The query uses costly operations and might be slow.
Consider if it is possible to rewrite the query in a
different way.

Notification internals Label—deprecated 5.26


The server and driver communicate with each other through the Bolt protocol. During the handshake
process, they agree on using the newest possible Bolt protocol version that both the server and the driver
support. For more information on the Bolt versions supported by different server versions, see the Bolt
Protocol documentation.

On the server side, notifications are part of the Result Core API. A method called getNotifications(),
which is deprecated since 5.26, returns a list of server-side notification objects. These notifications are
then sent to the driver as success Bolt message metadata. On the driver side, notifications are part of the
ResultSummary API, which has a method called notifications() that returns a list of driver-side
Notification objects. The result of the getCode() or code() methods is known as the Neo4j status code.
Driver-side notification configuration filters notifications by severity and/or category at both the driver and
session levels. For more information, see Server notification grouping and filtering.

From version 5.23, Neo4j has a new GqlStatusObject API in addition to the existing Notification API. This
can be used using the .getGqlStatusObjects() method in the Result Core API or by using the latest Neo4j
drivers. The Notification API is deprecated since Neo4j 5.26.

59
Server-driver version compatibility
The GqlStatusObject API is available in Neo4j 5.22 and later versions on the server side and in the 5.23
driver and later versions on the driver side. The current Notification API is still present, and the
GqlStatusObject API can be used in parallel with it.

To fully utilize the GqlStatusObject API, both your server and the driver must support it. Drivers that are
older than 5.23 send only notifications from the Notification API, even if the server is 5.22 or later.

If a driver of version 5.23 or later talks to a server that is too old to be aware of GQL-status objects, the
driver needs to poly-fill the GqlStatusObject API with information. The driver tries to deduce SUCCESS,
OMITTED RESULT, or NO DATA from the returned number of records and columns. If that fails, the general
GQLSTATUS code will be set to 02N42. Then, the driver poly-fills the rest of the GQL-status object list with
the notifications from the old notification API. These will get GQLSTATUS 01N42 for notifications with
severity WARNING and 03N42 for notifications with severity INFORMATION. Finally, the list of poly-filled GQL-
status objects is sorted according to the GQL precedence rules described in GQL-status notification object.

Table 11. GQLSTATUS compatibility codes

GQLSTATUS Condition Subcondition Description

01N42 Warning Unknown Poly-filled notification with severity WARNING.


warning

02N42 No data Unknown Poly-filled general status when SUCCESS, OMITTED RESULT, or
subcondition NO DATA cannot be deduced.

03N42 Informational Unknown Poly-filled notification with severity INFORMATION.


notification

List of notification codes


The following page provides an overview of all notifications in Neo4j, including the GQLSTATUS codes
and Neo4j codes, along with some scenarios and their possible solutions.

• PERFORMANCE notifications

• HINT notifications

• UNRECOGNIZED notifications

• UNSUPPORTED notifications

• DEPRECATION notifications

• SECURITY notifications

• TOPOLOGY notifications

• SCHEMA notifications

• GENERIC notifications

60
Please note that while GQLSTATUS codes remain stable (any changes to them will be
breaking), changes to status descriptions associated with these codes are not breaking
 and may happen at any time. For this reason, parsing the status descriptions or
incorporating them into scripts is not recommended.

PERFORMANCE notifications
Performance notifications are returned whenever the query uses costly operations and the performance
may be improved by changing the query or adding an index.

Cartesian product
This notification is returned when there is a Cartesian product in the plan.

Table 12. Notification details

Neo4j code Neo.ClientNotification.Statement.CartesianProduct

Title This query builds a cartesian product between disconnected patterns.

Description If a part of a query contains multiple disconnected patterns, this will build a cartesian product
between all those parts. This may produce a large amount of data and slow down query
processing. While occasionally intended, it may often be possible to reformulate the query that
avoids the use of this cross product, perhaps by adding a relationship between the different parts
or by using OPTIONAL MATCH (%s)

Category PERFORMANCE

GQLSTATUS code 03N90

Status description info: cartesian product. The disconnected patterns { $pat } build a cartesian
product. A cartesian product may produce a large amount of data and slow down
query processing.

Classification PERFORMANCE

SeverityLevel INFORMATION

61
Example 1. A query that contains many disconnected patterns

Query

MATCH (c:Child), (p:Parent) RETURN c, p

Returned GQLSTATUS code


03N90

Returned status description


info: cartesian product. The disconnected patterns (c:Child), (p:Parent) build a cartesian
product. A cartesian product may produce a large amount of data and slow down query
processing.

Suggestions for improvement


In case a Cartesian product is needed, nothing can be done to improve this query. In many
cases, however, you might not need a combination of all children and parents, and that is
when this query could be improved. If for example, you need the children and the children’s
parents, you can improve this query by rewriting it to the following:

MATCH (c:Child)-[:ChildOf]->(p:Parent) RETURN c, p

Query

MATCH (c:Child), (p:Parent) RETURN c, p

Description of the returned code


If a part of a query contains multiple disconnected patterns, this will build a cartesian product
between all those parts. This may produce a large amount of data and slow down query
processing. While occasionally intended, it may often be possible to reformulate the query
that avoids the use of this cross product, perhaps by adding a relationship between the
different parts or by using OPTIONAL MATCH (identifier is: (p))

Suggestions for improvement


In case a Cartesian product is needed, nothing can be done to improve this query. In many
cases, however, you might not need a combination of all children and parents, and that is
when this query could be improved. If for example, you need the children and the children’s
parents, you can improve this query by rewriting it to the following:

MATCH (c:Child)-[:ChildOf]->(p:Parent) RETURN c, p

62
Unbounded variable length pattern
This notification is returned when there is no upper bound specified on the variable length relationship.

Table 13. Notification details

Neo4j code Neo.ClientNotification.Statement.UnboundedVariableLengthPattern

Title The provided pattern is unbounded, consider adding an upper limit to the number of
node hops.

Description Using shortest path with an unbounded pattern will likely result in long execution times. It is
recommended to use an upper limit to the number of node hops in your pattern.

Category PERFORMANCE

GQLSTATUS code 03N91

Status description info: unbounded variable length pattern. The provided pattern { $pat } is
unbounded. Shortest path with an unbounded pattern may result in long execution
times. Use an upper limit (e.g. [*..5]) on the number of node hops in your pattern.

Classification PERFORMANCE

SeverityLevel INFORMATION

63
Example 2. Shortest path with an unbounded pattern

Query

MATCH p=shortestPath((n)-[*]->(m))
WHERE n <> m
RETURN p

Returned GQLSTATUS code


03N91

Returned status description


info: unbounded variable length pattern. The provided pattern (n)-[*]→(m) is unbounded.
Shortest path with an unbounded pattern may result in long execution times. Use an upper
limit (e.g. [*..5]) on the number of node hops in your pattern.

Suggestions for improvement


If you have a big graph, this query might be very slow. Consider adding an upper limit.

MATCH p=shortestPath((n)-[*..8]->(m))
WHERE n <> m
RETURN p

Query

MATCH p=shortestPath((n)-[*]->(m)) RETURN p

Description of the returned code


Using shortest path with an unbounded pattern will likely result in long execution times. It is
recommended to use an upper limit to the number of node hops in your pattern.

Suggestions for improvement


If you have a big graph, this query might be very slow. Consider adding an upper limit.

MATCH p=shortestPath((n)-[*..8]->(m)) RETURN p

Exhaustive shortest path


This notification is returned when a predicate, given on the shortest path, needs to inspect the whole path
before deciding whether it is valid, the shortest path might fall back to the exhaustive search algorithm. For
more information, see Cypher manual → Shortest path - additional predicate checks on the paths.

Table 14. Notification details

Neo4j code Neo.ClientNotification.Statement.ExhaustiveShortestPath

64
Title Exhaustive shortest path has been planned for your query that means that shortest
path graph algorithm might not be used to find the shortest path. Hence an
exhaustive enumeration of all paths might be used in order to find the requested
shortest path.

Description Using shortest path with an exhaustive search fallback might cause query slow down since
shortest path graph algorithms might not work for this use case. It is recommended to introduce a
WITH to separate the MATCH containing the shortest path from the existential predicates on that
path.

Category PERFORMANCE

GQLSTATUS code 03N92

Status description info: exhaustive shortest path. The query runs with exhaustive shortest path due to
the existential predicate(s) { $pred_list }. It may be possible to use WITH to
separate the MATCH from the existential predicate(s).

Classification PERFORMANCE

SeverityLevel INFORMATION

65
Example 3. A query that runs with an exhaustive shortest path

Query

MATCH p = shortestPath(()-[*..42]-())
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p

Returned GQLSTATUS code


03N92

Returned status description


info: exhaustive shortest path. The query runs with exhaustive shortest path due to the
existential predicate(s) ANY(n in nodes(p) WHERE n:Label). It may be possible to use WITH to
separate the MATCH from the existential predicate(s).

Suggestions for improvement


Separate the predicate by introducing a WITH after the MATCH clause.

MATCH p = shortestPath(()-[*..42]-())
WITH p
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p

Query

MATCH p = shortestPath(()-[*..42]-())
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p

Description of the returned code


Using shortest path with an exhaustive search fallback might cause query slow down since
shortest path graph algorithms might not work for this use case. It is recommended to
introduce a WITH to separate the MATCH containing the shortest path from the existential
predicates on that path.

Suggestions for improvement


Separate the predicate by introducing a WITH after the MATCH clause.

MATCH p = shortestPath(()-[*..42]-())
WITH p
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p

No applicable index
This notification is returned when using LOAD CSV with a MATCH or a MERGE clause that matches a non-

66
indexed label. This may not perform well on large data sets. Adding an index could improve the query
speed.

Table 15. Notification details

Neo4j code Neo.ClientNotification.Statement.NoApplicableIndex

Title Adding a schema index may speed up this query.

Description Using LOAD CSV followed by a MATCH or MERGE that matches a non-indexed label will most likely not
perform well on large data sets. Please consider using a schema index.

Category PERFORMANCE

GQLSTATUS code 03N93

Status description info: no applicable index. LOAD CSV in combination with MATCH or MERGE on a label
that does not have an index may result in long execution times. Consider adding an
index for label { $label }.

Classification PERFORMANCE

SeverityLevel INFORMATION

67
Example 4. LOAD CSV with MATCH or MERGE

Query

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line WITH * MATCH (n:Person{name:line[0]})


RETURN line, n

Returned GQLSTATUS code


03N93

Returned status description


info: no applicable index. LOAD CSV in combination with MATCH or MERGE on a label that does
not have an index may result in long execution times. Consider adding an index for label
Person.

Suggestions for improvement


Create an index on the label and property you match.

CREATE INDEX FOR (n:Person) ON (n.name)

Query

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line WITH * MATCH (n:Person{name:line[0]})


RETURN line, n

Description of the returned code


Using LOAD CSV followed by a MATCH or MERGE that matches a non-indexed label will most
likely not perform well on large data sets. Please consider using a schema index.

Suggestions for improvement


Create an index on the label and property you match.

CREATE INDEX FOR (n:Person) ON (n.name)

Eager operator
This notification is returned when the execution plan for a query contains the Eager operator.

Table 16. Notification details

Neo4j code Neo.ClientNotification.Statement.EagerOperator

Title The execution plan for this query contains the Eager operator, which forces all
dependent data to be materialized in main memory before proceeding

68
Description Using LOAD CSV with a large data set in a query where the execution plan contains the Eager
operator could potentially consume a lot of memory and is likely to not perform well. See the Neo4j
Manual entry on the Eager operator for more information and hints on how problems could be
avoided.

Category PERFORMANCE

GQLSTATUS code 03N94

Status description info: eager operator. The query execution plan contains the Eager operator. LOAD
CSV in combination with Eager can consume a lot of memory.

Classification PERFORMANCE

SeverityLevel INFORMATION

69
Example 5. LOAD CSV with an Eager operator

Query

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n


RETURN line

Returned GQLSTATUS code


03N94

Returned status description


info: eager operator. The query execution plan contains the Eager operator. LOAD CSV in
combination with Eager can consume a lot of memory.

Suggestions for improvement


See the Cypher Manual → Eager operator for more information and hints on how to avoid
problems. In this specific case, the query could be rewritten to the following:

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line


CALL {
WITH line
MATCH (n:Person{name:line[0]}) DELETE n
}
RETURN line

LOAD CSV together with an Eager operator can take up a lot of memory.

Query

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n


RETURN line

Description of the returned code


Using LOAD CSV with a large data set in a query where the execution plan contains the Eager
operator could potentially consume a lot of memory and is likely to not perform well. See the
Neo4j Manual entry on the Eager operator for more information and hints on how problems
could be avoided.

Suggestions for improvement


See the Cypher Manual → Eager operator for more information and hints on how to avoid
problems. In this specific case, the query could be rewritten to the following:

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line


CALL {
WITH line
MATCH (n:Person{name:line[0]}) DELETE n
}
RETURN line

70
Dynamic property
Table 17. Notification details

Neo4j code Neo.ClientNotification.Statement.DynamicProperty

Title Queries using dynamic properties will use neither index seeks nor index scans for
those properties

Description Using a dynamic property makes it impossible to use an index lookup for this query (%s)

Category PERFORMANCE

GQLSTATUS code 03N95

Status description info: dynamic property. An index exists on label/type(s) { $label_list }. It is not
possible to use indexes for dynamic properties. Consider using static properties.

Classification PERFORMANCE

SeverityLevel INFORMATION

71
Example 6. A dynamic node property key makes it impossible to use indexes

Query

MATCH (n:Person) WHERE n[$prop] IS NOT NULL RETURN n;

Returned GQLSTATUS code


03N95

Returned status description


info: dynamic property. An index exists on label/type(s) Person. It is not possible to use
indexes for dynamic properties. Consider using static properties.

Suggestions for improvement


If there is an index for (n:Person) ON (n.name), it will not be used for the above query
because the query is using a dynamic property. Therefore, if there is an index, it is better to
use the constant value. For example, if prop is equal to name, the following query would be
able to use the index:

MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;

Query

MATCH (n:Person) WHERE n[$prop] IS NOT NULL RETURN n;

Description of the returned code


Using a dynamic property makes it impossible to use an index lookup for this query (indexed
label is: Person)

Suggestions for improvement


If there is an index for (n:Person) ON (n.name), it will not be used for the above query
because the query is using a dynamic property. Therefore, if there is an index, it is better to
use the constant value. For example, if prop is equal to name, the following query would be
able to use the index:

MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;

72
Example 7. A dynamic relationship property key makes it impossible to use indexes

Query

MATCH ()-[r: KNOWS]->() WHERE r[$prop] IS NOT NULL RETURN r

Returned GQLSTATUS code


03N95

Returned status description


info: dynamic property. An index exists on label/type(s) KNOWS. It is not possible to use
indexes for dynamic properties. Consider using static properties.

Suggestions for improvement


Similar to dynamic node properties, use a constant value if possible, especially when there is
an index on the relationship property. For example, if { $prop } is equal to since, you can
rewrite the query to:

MATCH ()-[r: KNOWS]->() WHERE r.since IS NOT NULL RETURN r

Query

MATCH ()-[r: KNOWS]->() WHERE r[$prop] IS NOT NULL RETURN r

Description of the returned code


Using a dynamic property makes it impossible to use an index lookup for this query (indexed
type is: KNOWS)

Suggestions for improvement


Similar to dynamic node properties, use a constant value if possible, especially when there is
an index on the relationship property. For example, if $prop is equal to since, you can rewrite
the query to:

MATCH ()-[r: KNOWS]->() WHERE r.since IS NOT NULL RETURN r

Failed code generation


The CodeGenerationFailed notification is created when it is not possible to generate a code for a query, for
example, when the query is too big. For more information about the specific query, see the stack trace in
the debug.log file.

Table 18. Notification details

Neo4j code Neo.ClientNotification.Statement.CodeGenerationFailed

73
Title The database was unable to generate code for the query. A stacktrace can be found
in the debug.log.

Description The database was unable to generate code for the query. A stacktrace can be found in the
debug.log. (method too big)

Category PERFORMANCE

GQLSTATUS code 03N96

Status description info: failed code generation. Failed to generate code, falling back to interpreted
$enginetype engine. A stacktrace can be found in the debug.log. Cause: $msg.

Classification PERFORMANCE

SeverityLevel INFORMATION

HINT notifications
HINT notifications are returned by default when the Cypher planner or runtime cannot create a query plan
to fulfill a specified hint, for example, JOIN or INDEX. This behavior of the Cypher planner or runtime can be
changed by setting the configuration dbms.cypher.hints_error to true. In this case, the query will return
an error.

Join hint unfulfillable


Table 19. Notification details

Neo4j code Neo.ClientNotification.Statement.JoinHintUnfulfillableWarning

Title The database was unable to plan a hinted join.

Description The hinted join was not planned. This could happen because no generated plan contained the join
key, please try using a different join key or restructure your query. (%s)

Category HINT

GQLSTATUS code 01N30

Status description warn: join hint unfulfillable. Unable to create a plan with JOIN ON $var_list. Try to
change the join key(s) or restructure your query.

Classification HINT

SeverityLevel WARNING

74
Example 8. Inability to fulfill the hint despite the given JOIN hint

Query

MATCH (a:A)
WITH a, 1 AS horizon
OPTIONAL MATCH (a)-[r]->(b:B)
USING JOIN ON a
OPTIONAL MATCH (a)--(c)
RETURN *

Returned GQLSTATUS code


01N30

Returned status description


warn: joint hint unfulfillable. Unable to create a plan with JOIN ON a. Try to change the join
key(s) or restructure your query.

Suggestions for improvement


The JOIN hint cannot be applied because its specified variable is before the OPTIONAL MATCH
and, therefore, is already bound. The only option for this query is to either remove the hint or
modify the query to allow it to be used.

Query

MATCH (a:A)
WITH a, 1 AS horizon
OPTIONAL MATCH (a)-[r]->(b:B)
USING JOIN ON a
OPTIONAL MATCH (a)--(c)
RETURN *

Description of the returned code


The hinted join was not planned. This could happen because no generated plan contained
the join key, please try using a different join key or restructure your query. (hinted join key
identifier is: a)

Suggestions for improvement


The JOIN hint cannot be applied because its specified variable is before the OPTIONAL MATCH
and, therefore, is already bound. The only option for this query is to either remove the hint or
modify the query to allow it to be used.

Hinted index not found


Table 20. Notification details

Neo4j code Neo.ClientNotification.Schema.HintedIndexNotFound

75
Title The request (directly or indirectly) referred to an index that does not exist.

Description The hinted index does not exist, please check the schema (%s)

Category HINT

GQLSTATUS code 01N31

Status description warn: hinted index not found. Unable to create a plan with { $index_descr }
because the index does not exist.

Classification HINT

SeverityLevel WARNING

76
Example 9. Inability to use the label index despite the given index hint

Query

MATCH (a: Label)


USING INDEX a:Label(id)
WHERE a.id = 1
RETURN a

Returned GQLSTATUS code


01N31

Returned status description


warn: hinted index not found. Unable to create a plan with INDEX :Label(id) because the
index does not exist.

Suggestions for improvement


The hinted index does not exist, make sure the label and property are spelled correctly. If the
spelling is correct, either create the index or remove the hint from the query.

Query

MATCH (a: Label)


USING INDEX a:Label(id)
WHERE a.id = 1
RETURN a

Description of the returned code


The hinted index does not exist, please check the schema (index is: INDEX FOR (a:`Label`)
ON (a.id))

Suggestions for improvement


The hinted index does not exist, make sure the label and property are spelled correctly. If the
spelling is correct, either create the index or remove the hint from the query.

77
Example 10. Inability to use the relationship index despite the given index hint

Query

MATCH ()-[r:Rel]-()
USING INDEX r:Rel(id)
WHERE r.id = 1
RETURN r

Returned GQLSTATUS code


01N31

Returned status description


warn: hinted index not found. Unable to create a plan with INDEX :Rel(id) because the index
does not exist.

Suggestions for improvement


The hinted index does not exist, make sure the relationship type and property are spelled
correctly. If the spelling is correct, either create the index or remove the hint from the query.

Query

MATCH ()-[r:Rel]-()
USING INDEX r:Rel(id)
WHERE r.id = 1
RETURN r

Description of the returned code


The hinted index does not exist, please check the schema (index is: INDEX FOR ()-[r:`Rel`]-()
ON (r.id))

Suggestions for improvement


The hinted index does not exist, make sure the relationship type and property are spelled
correctly. If the spelling is correct, either create the index or remove the hint from the query.

UNRECOGNIZED notifications
Unrecognized notifications are returned when the query or command mentions entities that are unknown
to the system.

Home database not found


Table 21. Notification details

Neo4j code Neo.ClientNotification.Database.HomeDatabaseNotFound

78
Title The request referred to a home database that does not exist.

Description The home database provided does not currently exist in the DBMS. This command will not take
effect until this database is created. (%s)

Category UNRECOGNIZED

GQLSTATUS code 00N50

Status description note: successful completion - home database not found. The database { $db } does
not exist. Verify that the spelling is correct or create the database for the command
to take effect.

Classification UNRECOGNIZED

SeverityLevel INFORMATION

Example 11. Setting the home database to a database that does not exist

Query

CREATE USER john SET PASSWORD "secret" SET HOME DATABASE nej4

Returned GQLSTATUS code


00N50

Returned status description


note: successful completion - home database not found. The database ne4j does not exist.
Verify that the spelling is correct or create the database for the command to take effect.

Suggestions for improvement


Verify that the home database name is not misspelled.

Query

CREATE USER john SET PASSWORD "secret" SET HOME DATABASE nej4

Description of the returned code


The home database provided does not currently exist in the DBMS. This command will not
take effect until this database is created. (HOME DATABASE: nej4)

Suggestions for improvement


Verify that the home database name is not misspelled.

79
Unknown label
Table 22. Notification details

Neo4j code Neo.ClientNotification.Statement.UnknownLabelWarning

Title The provided label is not in the database.

Description One of the labels in your query is not available in the database, make sure you didn’t misspell it or
that the label is available when you run this statement in your application (%s)

Category UNRECOGNIZED

GQLSTATUS code 01N50

Status description warn: unknown label. The label { $label } does not exist. Verify that the spelling is
correct.

Classification UNRECOGNIZED

SeverityLevel WARNING

80
Example 12. Matching on a node with a label that does not exist in the database

Query

MATCH (n:Perso) RETURN n

Returned GQLSTATUS code


01N50

Returned status description


warn: unknown label. The label Perso does not exist. Verify that the spelling is correct.

Suggestions for improvement


Verify that the label is not misspelled. If you plan to create nodes with that label in the future,
no change is needed.

Query

MATCH (n:Perso) RETURN n

Description of the returned code


One of the labels in your query is not available in the database, make sure you didn’t misspell
it or that the label is available when you run this statement in your application (the missing
label name is: Perso)

Suggestions for improvement


Verify that the label is not misspelled. If you plan to create nodes with that label in the future,
then no change is needed.

Unknown relationship type


Table 23. Notification details

Neo4j code Neo.ClientNotification.Statement.UnknownRelationshipTypeWarning

Title The provided relationship type is not in the database.

Description One of the relationship types in your query is not available in the database, make sure you didn’t
misspell it or that the label is available when you run this statement in your application (%s)

Category UNRECOGNIZED

GQLSTATUS code 01N51

Status description warn: unknown relationship type. The relationship type { $reltype } does not
exist. Verify that the spelling is correct.

81
Classification UNRECOGNIZED

SeverityLevel WARNING

Example 13. Matching a relationship with a type that does not exist

Query

MATCH (n)-[:NonExistingType]->() RETURN n

Returned GQLSTATUS code


01N51

Returned status description


warn: unknown relationship type. The relationship type NonExistingType does not exist.
Verify that the spelling is correct.

Suggestions for improvement


Verify that the relationship type is not misspelled. If you plan to create relationships of this
type in the future, no change is needed.

Query

MATCH (n)-[:NonExistingType]->() RETURN n

Description of the returned code


One of the relationship types in your query is not available in the database, make sure you
didn’t misspell it or that the label is available when you run this statement in your application
(the missing relationship type is: NonExistingType)

Suggestions for improvement


Verify that the relationship type is not misspelled. If you plan to create relationships of this
type in the future, no change is needed.

Unknown property key


Table 24. Notification details

Neo4j code Neo.ClientNotification.Statement.UnknownPropertyKeyWarning

Title The provided property key is not in the database

Description One of the property names in your query is not available in the database, make sure you didn’t
misspell it or that the label is available when you run this statement in your application (%s)

Category UNRECOGNIZED

82
GQLSTATUS code 01N52

Status description warn: unknown property key. The property { $propkey } does not exist. Verify that
the spelling is correct.

Classification UNRECOGNIZED

SeverityLevel WARNING

Example 14. Matching a property key that does not exist

Query

MATCH (n:Person {nme:”Tom”})


RETURN n

Returned GQLSTATUS code


01N52

Returned status description


warn: unknown property key. The property nme does not exist. Verify that the spelling is
correct.

Suggestions for improvement


Verify that the property key is not misspelled. If you plan to create that property key in the
future, no change is needed.

Query

MATCH (n:Person {nme:”Tom”})


RETURN n

Description of the returned code


One of the property names in your query is not available in the database, make sure you
didn’t misspell it or that the label is available when you run this statement in your application
(the missing property name is: nme)

Suggestions for improvement


Verify that the property key is not misspelled. If you plan to create that property key in the
future, no change is needed.

Aggregation skipped null


Table 25. Notification details

Neo4j code Neo.ClientNotification.Statement.AggregationSkippedNull

83
Title The query contains an aggregation function that skips null values.

Description The query contains an aggregation function that skips null values.

Category UNRECOGNIZED

GQLSTATUS code 01G11

Status description warn: null value eliminated in set function.

Classification UNRECOGNIZED

SeverityLevel WARNING

Example 15. Aggregation skipping a NULL value

Query

UNWIND [1, NULL, 2] AS i RETURN count(i) AS sum

Returned GQLSTATUS code


01G11

Returned status description


warn: null value eliminated in set function.

Query

UNWIND [1, NULL, 2] AS i RETURN count(i) AS sum

Description of the returned code


The query contains an aggregation function that skips null values.

UNSUPPORTED category
Unsupported notifications are returned when the query or command is trying to use features that are not
supported by the current system or using experimental features that should not be used in production.

Unsupported runtime
Table 26. Notification details

Neo4j code Neo.ClientNotification.Statement.RuntimeUnsupportedWarning

Title This query is not supported by the chosen runtime.

84
Description Selected runtime is unsupported for this query, please use a different runtime instead or fallback to
default. (%s)

Category UNSUPPORTED

GQLSTATUS code 01N40

Status description warn: unsupported runtime. The query cannot be executed with {
$preparser_input1 }, { $preparser_input2 } is used. Cause: { $msg }.

Classification UNSUPPORTED

SeverityLevel WARNING

85
Example 16. A runtime is not supported by a Cypher command

Query

EXPLAIN CYPHER runtime=pipelined SHOW INDEXES YIELD *

Returned GQLSTATUS code


01N40

Returned status description


warn: unsupported runtime. The query cannot be executed with runtime=pipelined,
runtime=slotted is used. Cause: Pipelined does not yet support the plans including
ShowIndexes, use another runtime.

Suggestions for improvement


Use a different runtime or remove the runtime option to run the query with the default
runtime:

SHOW INDEXES YIELD *

Query

CYPHER runtime=pipelined SHOW INDEXES YIELD *

Description of the returned code


Selected runtime is unsupported for this query, please use a different runtime instead or
fallback to default. (Pipelined does not yet support the plans including ShowIndexes, use
another runtime.)

Suggestions for improvement


Use a different runtime or remove the runtime option to run the query with the default
runtime:

SHOW INDEXES YIELD *

RuntimeExperimental Label—deprecated 5.14

 The usage of this notification has been removed since Neo4j 5.14.

Table 27. Notification details

Neo4j code Neo.ClientNotification.Statement.RuntimeExperimental

86
Title This feature is experimental and should not be used in production systems.

Description You are using an experimental feature (%s)

Category UNSUPPORTED

SeverityLevel WARNING

Example 17. Use of the parallel runtime

Query

CYPHER runtime=parallel MATCH (n) RETURN (n)

Description of the returned code


You are using an experimental feature (The parallel runtime is experimental and might suffer from
instability and potentially correctness issues.)

Suggestions for improvement


The parallel runtime should not be used in production. Choose another runtime or remove the
option to use the default runtime:

MATCH (n) RETURN (n)

DEPRECATION notifications
Deprecation notifications contain information about a feature or functionality that has been deprecated. It
is important to change to the new functionality, otherwise, the query might break in a future version.

Feature deprecated
Table 28. Notification details

Neo4j code Neo.ClientNotification.Statement.FeatureDeprecationWarning

Title This feature is deprecated and will be removed in future versions.

87
Descriptions • The procedure has a deprecated field. (%s)

• The function has a deprecated field. (%s)

• Creating an entity (%s) and referencing that entity in a property definition in the
same CREATE is deprecated.

• Merging an entity (%s) and referencing that entity in a property definition in the
same MERGE is deprecated.

• The Unicode character %s is deprecated for unescaped identifiers and will be


considered as a whitespace character in the future. To continue using it, escape
the identifier by adding backticks around the identifier %s.

• The character with the Unicode representation %s is deprecated for unescaped


identifiers and will not be supported in the future. To continue using it, escape
the identifier by adding backticks around the identifier %s.

• New All subqueries in a UNION [ALL] should have the same ordering for the
return columns. Using differently ordered return items in a UNION [ALL] clause
is deprecated and will be removed in a future version.

• Databases and aliases with unescaped . are deprecated unless to indicate that
they belong to a composite database. Names containing . should be escaped.
(%s)

Category DEPRECATION

GQLSTATUS code 01N00

Status description warn: feature deprecated. $msg

Classification DEPRECATION

SeverityLevel WARNING

88
Example 18. Create a database with an unescaped name containing a dot

Query

CREATE DATABASE foo.bar

Returned GQLSTATUS code


01N00

Returned status description


warn: feature deprecated. Databases and aliases with unescaped . are deprecated unless to
indicate that they belong to a composite database. Names containing . should be escaped.
(Name: foo.bar)

Suggestions for improvement


If not intended for a composite database, escape the name with the character `.

CREATE DATABASE `foo.bar`

Query

CREATE DATABASE foo.bar

Description of the returned code


Databases and aliases with unescaped . are deprecated unless to indicate that they belong
to a composite database. Names containing . should be escaped. (Name: foo.bar)

Example 19. Using differently ordered return items in a UNION clause

Query

RETURN 'val' as one, 'val' as two


UNION
RETURN 'val' as two, 'val' as one

Returned GQLSTATUS code


01N00

Returned status description


warn: feature deprecated. All subqueries in a UNION [ALL] should have the same ordering
for the return columns. Using differently ordered return items in a UNION [ALL] clause is
deprecated and will be removed in a future version.

89
Using differently ordered return items in a UNION [ALL] clause is deprecated in versions

 5.5 to 5.25. However, starting from version 5.26, the deprecation has been withdrawn
following cost-benefit analysis and valuable user feedback.

Example 20. Using the Unicode \u0085 in an unescaped identifier

Query

RETURN 'val' as one, 'val' as two


UNION
RETURN 'val' as two, 'val' as one

Description of the returned code


All subqueries in a UNION [ALL] should have the same ordering for the return columns.
Using differently ordered return items in a UNION [ALL] clause is deprecated and will be
removed in a future version.

Suggestions for improvement


Use the same order for the return columns in all subqueries combined by a UNION clause.

RETURN 'val' as one, 'val' as two


UNION
RETURN 'val' as one, 'val' as two

90
Example 21. Using the Unicode \u0085 in an unescaped identifier

Query

RETURN 1 as my\u0085identifier

Returned GQLSTATUS code


01N00

Returned status description


warn: feature deprecated. The Unicode character \u0085 is deprecated for unescaped
identifiers and will be considered as a whitespace character in the future. To continue using
it, escape the identifier by adding backticks around the identifier my\u0085identifier.

Query

RETURN 1 as my\u0085identifier

Description of the returned code


The Unicode character \u0085 is deprecated for unescaped identifiers and will be considered
as a whitespace character in the future. To continue using it, escape the identifier by adding
backticks around the identifier my\u0085identifier.

Feature deprecated with a replacement


Table 29. Notification details

Neo4j code Neo.ClientNotification.Statement.FeatureDeprecationWarning

Title This feature is deprecated and will be removed in future versions.

91
Descriptions • The semantics of using colon in the separation of alternative relationship types
will change in a future version. (%s)

• The use of nodes or relationships for setting properties is deprecated and will be
removed in a future version. Please use properties() instead.

• The use of shortestPath and allShortestPaths with fixed length relationships is


deprecated and will be removed in a future version. Please use a path with a
length of 1 [r*1..1] instead or a Match with a limit.

• The query used a deprecated function. (%s)

• The query used a deprecated procedure. (%s)

• The query used a deprecated runtime option. (%s)

• The TextIndexProvider.DESCRIPTOR.name() provider for text indexes is


deprecated and will be removed in a future version. Please use
TrigramIndexProvider.DESCRIPTOR.name() instead.

Category DEPRECATION

GQLSTATUS code 01N01

Status description warn: feature deprecated with replacement. { $thing1 } is deprecated. It is


replaced by { $thing2 }.

Classification DEPRECATION

SeverityLevel WARNING

92
Example 22. Colon after the vertical bar |: in a relationship pattern

Query

MATCH (a)-[:A|:B|:C]-() RETURN *

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. :A|:B|:C is deprecated. It is replaced by :A|B|C.

Suggestions for improvement


Remove the colon inside the relationship type expression.

MATCH (a)-[:A|B|C]-() RETURN *

Query

MATCH (a)-[:A|:B|:C]-() RETURN *

Description of the returned code


The semantics of using colon in the separation of alternative relationship types will change in
a future version. (Please use ':A|B|C' instead)

Suggestions for improvement


Remove the colon inside the relationship type expression.

MATCH (a)-[:A|B|C]-() RETURN *

93
Example 23. Setting properties using a node

Query

MATCH (a)-[]-(b)
SET a = b

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. SET a = b is deprecated. It is replaced by SET a
= properties(b).

Suggestions for improvement


Use the properties() function to get all properties from b.

MATCH (a)-[]-(b)
SET a = properties(b)

Query

MATCH (a)-[]-(b)
SET a = b

Description of the returned code


The use of nodes or relationships for setting properties is deprecated and will be removed in
a future version. Please use properties() instead.

Suggestions for improvement


Use the properties() function to get all properties from b.

MATCH (a)-[]-(b)
SET a = properties(b)

94
Example 24. Setting properties using a relationship

Query

MATCH (a)-[r]-(b)
SET a += r

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. SET a += r is deprecated. It is replaced by SET a
+= properties(r).

Suggestions for improvement


Use the properties() function to get all properties from r.

MATCH (a)-[r]-(b)
SET a += properties(r)

Query

MATCH (a)-[r]-(b)
SET a += r

Description of the returned code


The use of nodes or relationships for setting properties is deprecated and will be removed in
a future version. Please use properties() instead.

Suggestions for improvement


Use the properties() function to get all properties from r.

MATCH (a)-[r]-(b)
SET a += properties(r)

95
Example 25. Shortest path with a fixed relationship length

Query

MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. shortestPath((a)-[r]→()) is deprecated. It is
replaced by shortestPath((n)-[r*1..1]→(m)).

Suggestions for improvement


If the relationship length is fixed, there is no reason to search for the shortest path. Instead,
you can rewrite it to the following:

MATCH (a: Start)-[r]->(b: End) RETURN b LIMIT 1

Query

MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a

Description of the returned code


The use of shortestPath and allShortestPaths with fixed length relationships is deprecated
and will be removed in a future version. Please use a path with a length of 1 [r*1..1]
instead or a Match with a limit.

Suggestions for improvement


If the relationship length is fixed, there is no reason to search for the shortest path. Instead,
you can rewrite it to the following:

MATCH (a: Start)-[r]->(b: End) RETURN b LIMIT 1

96
Example 26. Using a deprecated runtime option

Query

CYPHER runtime = interpreted MATCH (n) RETURN n

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. runtime=interpreted is deprecated. It is
replaced by runtime=slotted.

Suggestions for improvement


Runtime interpreted is deprecated and another runtime is used instead. Alternatively, you
can remove the runtime option to use the default runtime.

MATCH (n) RETURN n

Query

CYPHER runtime = interpreted MATCH (n) RETURN n

Description of the returned code


The query used a deprecated runtime option. ('runtime=interpreted' is deprecated, please
use 'runtime=slotted' instead)

Suggestions for improvement


Runtime interpreted is deprecated and another runtime is used instead. Alternatively, you
can remove the runtime option to use the default runtime.

MATCH (n) RETURN n

97
Example 27. Using the text-1.0 index provider when creating a text index

Query

CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-1.0'}

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. text-1.0 is deprecated. It is replaced by text-
2.0.

Suggestions for improvement


Update the option indexProvider with the value text-2.0.

CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}

Query

CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-1.0'}

Description of the returned code


The text-1.0 provider for text indexes is deprecated and will be removed in a future version.
Please use text-2.0 instead.

Suggestions for improvement


Update the option indexProvider with the value text-2.0.

CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}

98
Example 28. Using a renamed or a deprecated procedure

CALL cdc.query

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. cdc.query is deprecated. It is replaced by
db.cdc.query.

CALL unsupported.dbms.shutdown

Returned GQLSTATUS code


01N02

Returned status description


warn: feature deprecated without replacement. unsupported.dbms.shutdown is deprecated
and will be removed without a replacement.

CALL unsupported.dbms.shutdown

Description of the returned code


The query used a deprecated procedure: 'unsupported.dbms.shutdown'.

Suggestions for improvement


Remove the use of the deprecated procedure. If there is a suggested replacement, update to
use the replacement instead.

99
Example 29. Using id() function

Query

MATCH (a)
RETURN id(a)

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. id is deprecated. It is replaced by elementId().

Suggestions for improvement


Use the function elementId() instead.

MATCH (a)
RETURN elementId(a)

Query

MATCH (a)
RETURN id(a)

Returned GQLSTATUS code


01N02

Returned status description


warn: feature deprecated without replacement. id is deprecated and will be removed without
a replacement.

Query

MATCH (a)
RETURN id(a)

Description of the returned code


The query used a deprecated function: id.

Suggestions for improvement


Use the function elementId() instead.

MATCH (a)
RETURN elementId(a)

100
Example 30. Using an unescaped variable named 'where' in a node pattern

Query

MATCH (where {p: 5})


RETURN where

Description of the returned code


'(where {p: 5})' is deprecated. It is replaced by '(`where` {p: 5})'.

Suggestions for improvement


To continue using variables with this name, use backticks to escape the variable name:

MATCH (`where` {p: 5})


RETURN `where`.p

Query

MATCH (where {p: 5})


RETURN where

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. (where {p: 5}) is deprecated. It is replaced by
(`where` {p: 5}).

Suggestions for improvement


To continue using variables with this name, use backticks to escape the variable name:

MATCH (`where` {p: 5})


RETURN `where`.p

101
Example 31. Using an unescaped variable named 'where' in a relationship pattern

Query

MATCH ()-[where {p: 5}]->()


RETURN where

Description of the returned code


'-[where {p: 5}]-' is deprecated. It is replaced by '-[`where` {p: 5}]-'.

Suggestions for improvement


To continue using variables with this name, use backticks to escape the variable name:

MATCH ()-[`where` {p: 5}]->()


RETURN `where`.p

Query

MATCH ()-[where {p: 5}]->()


RETURN where

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. -[where {p: 5}]- is deprecated. It is replaced by
-[`where` {p: 5}]-.

Suggestions for improvement


To continue using variables with this name, use backticks to escape the variable name:

MATCH ()-[`where` {p: 5}]->()


RETURN `where`.p

102
Example 32. Using an unparenthesized label expression predicate as the right-hand side operand of +

Query

MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + m:A

Description of the returned code


'… + m:A' is deprecated. It is replaced by '… + (m:A)'.

Suggestions for improvement


Parenthesize the label expression predicate on the right-hand side of +:

MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (m:A)

Query

MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + m:A

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. … + m:A is deprecated. It is replaced by … +
(m:A).

Suggestions for improvement


Parenthesize the label expression predicate on the right-hand side of +:

MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (m:A)

103
Example 33. Using an unparenthesized label expression predicate as the right-hand side operand of +

Query

MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + r:C|D

Description of the returned code


'… + r:C|D' is deprecated. It is replaced by '… + (r:C|D)'.

Suggestions for improvement


Parenthesize the label expression predicate on the right-hand side of +:

MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (r:C|D)

Query

MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + r:C|D

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. … + r:C|D is deprecated. It is replaced by … +
(r:C|D).

Suggestions for improvement


Parenthesize the label expression predicate on the right-hand side of +:

MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (r:C|D)

104
Example 34. Using an unescaped variable named is as a WHEN operand in a simple CASE expression

Query

MATCH (n)
WITH n, n.internationalStandard AS is
RETURN CASE n
WHEN is :: INTEGER THEN "ISO/IEC" + is
ELSE is
END AS standardsName

Description of the returned code


'WHEN is
INTEGER' is deprecated. It is replaced by 'WHEN `is` :: INTEGER'.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH (n)
WITH n, n.internationalStandard AS `is`
RETURN CASE n
WHEN `is` :: INTEGER THEN "ISO/IEC" + `is`
ELSE `is`
END AS standardsName

Query

MATCH (n)
WITH n, n.internationalStandard AS is
RETURN CASE n
WHEN is :: INTEGER THEN "ISO/IEC" + is
ELSE is
END AS standardsName

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. WHEN is :: INTEGER is deprecated. It is replaced
by WHEN `is` :: INTEGER.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH (n)
WITH n, n.internationalStandard AS `is`
RETURN CASE n
WHEN `is` :: INTEGER THEN "ISO/IEC" + `is`
ELSE `is`
END AS standardsName

105
Example 35. Using an unescaped variable named contains in addition operations within a WHEN operand in
a simple CASE expression

Query

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS contains
RETURN CASE size(nodes(p))
WHEN contains + 1 THEN "okay"
ELSE "not okay"
END AS check

Description of the returned code


'WHEN contains + 1 INTEGER' is deprecated. It is replaced by 'WHEN `contains` + 1
INTEGER'.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS `contains`
RETURN CASE size(nodes(p))
WHEN `contains` + 1 THEN "okay"
ELSE "not okay"
END AS check

106
Query

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS contains
RETURN CASE size(nodes(p))
WHEN contains + 1 THEN "okay"
ELSE "not okay"
END AS check

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. WHEN contains + 1 INTEGER is deprecated. It is
replaced by WHEN `contains` + 1 INTEGER.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS `contains`
RETURN CASE size(nodes(p))
WHEN `contains` + 1 THEN "okay"
ELSE "not okay"
END AS check

107
Example 36. Using an unescaped variable named contains in subtraction operations within a WHEN operand
in a simple CASE expression

Query

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS contains
RETURN CASE size(relationships(p))
WHEN contains - 1 THEN "okay"
ELSE "not okay"
END AS check

Description of the returned code


'WHEN contains - 1 INTEGER' is deprecated. It is replaced by 'WHEN `contains` - 1
INTEGER'.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS `contains`
RETURN CASE size(relationships(p))
WHEN `contains` - 1 THEN "okay"
ELSE "not okay"
END AS check

108
Query

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS contains
RETURN CASE size(relationships(p))
WHEN contains - 1 THEN "okay"
ELSE "not okay"
END AS check

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. WHEN contains - 1 INTEGER is deprecated. It is
replaced by WHEN `contains` - 1 INTEGER.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS `contains`
RETURN CASE size(relationships(p))
WHEN `contains` - 1 THEN "okay"
ELSE "not okay"
END AS check

109
Example 37. Using the [] operator on an unescaped variable named in within a WHEN operand in a simple
CASE expression

Query

MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS in
RETURN CASE t.ibanNumber
WHEN in[0] THEN "used main account"
ELSE "used different account"
END AS check

Description of the returned code


'WHEN in[0] INTEGER' is deprecated. It is replaced by 'WHEN `in`[0] INTEGER'.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS `in`
RETURN CASE t.ibanNumber
WHEN `in`[0] THEN "used main account"
ELSE "used different account"
END AS check

Query

MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS in
RETURN CASE t.ibanNumber
WHEN in[0] THEN "used main account"
ELSE "used different account"
END AS check

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. WHEN in[0] INTEGER is deprecated. It is replaced
by WHEN `in`[0] INTEGER.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS `in`
RETURN CASE t.ibanNumber
WHEN `in`[0] THEN "used main account"
ELSE "used different account"
END AS check

110
Example 38. Using the [] operator on an unescaped variable named in within a WHEN operand in a simple
CASE expression

Query

MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
WHEN in["mainAccount"] THEN "used main account"
ELSE "used different account"
END AS check

Description of the returned code


'WHEN in["mainAccount"] INTEGER' is deprecated. It is replaced by 'WHEN
`in`["mainAccount"] INTEGER'.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
WHEN `in`["mainAccount"] THEN "used main account"
ELSE "used different account"
END AS check

Query

MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
WHEN in["mainAccount"] THEN "used main account"
ELSE "used different account"
END AS check

Returned GQLSTATUS code


01N01

Returned status description


warn: feature deprecated with replacement. WHEN in["mainAccount"] INTEGER is deprecated.
It is replaced by WHEN `in`["mainAccount"] INTEGER.

Suggestions for improvement


To continue using variables with this name in simple CASE expressions, use backticks to
escape the variable name:

MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
WHEN `in`["mainAccount"] THEN "used main account"
ELSE "used different account"
END AS check

111
Deprecated features without a future replacement
Table 30. Notification details

Neo4j code Neo.ClientNotification.Statement.FeatureDeprecationWarning

Title This feature is deprecated and will be removed in future versions.

Descriptions • The Cypher query option connectComponentsPlanner is deprecated and will be


removed without a replacement. The product’s default behavior of using a cost-
based IDP search algorithm when combining sub-plans will be kept. For more
information, see Cypher Manual → Cypher planner.

• The query used a deprecated function%s

• The query used a deprecated procedure%s

Category DEPRECATION

GQLSTATUS code 01N02

Status description warn: feature deprecated without replacement. { $thing } is deprecated and will
be removed without a replacement.

Classification DEPRECATION

SeverityLevel WARNING

112
Example 39. Using Cypher query option connectComponentsPlanner

Query

CYPHER connectComponentsPlanner=greedy MATCH (a), (b) RETURN *

Returned GQLSTATUS code


01N02

Returned status description


warn: feature deprecated without replacement. connectComponentsPlanner is deprecated and
will be removed without a replacement.

Query

CYPHER connectComponentsPlanner=greedy MATCH (a), (b) RETURN *

Description of the returned code


The Cypher query option connectComponentsPlanner is deprecated and will be removed
without a replacement. The product’s default behavior of using a cost-based IDP search
algorithm when combining sub-plans will be kept. For more information, see Cypher manual
→ Cypher planner.

Procedure field deprecated


Table 31. Notification details

Neo4j code Neo.ClientNotification.Statement.FeatureDeprecationWarning

Title This feature is deprecated and will be removed in future versions.

Description The query used a deprecated field from a procedure. (%s)

Category DEPRECATION

GQLSTATUS code 01N03

Status description warn: procedure field deprecated. { $field } for procedure { $proc } is
deprecated.

Classification DEPRECATION

SeverityLevel WARNING

113
Feature deprecated with replacement - DeprecatedFormat
Table 32. Notification details

Neo4j code Neo.ClientNotification.Request.DeprecatedFormat

Title The client made a request for a format which has been deprecated.

Description The requested format has been deprecated. (%s)

Category DEPRECATION

GQLSTATUS code 01N01

Status description warn: feature deprecated with replacement. { $thing1 } is deprecated. It is


replaced by { $thing2 }.

Classification DEPRECATION

SeverityLevel WARNING

SECURITY category
Security notifications indicate that the result of the query or command might have a potential security
issue. Verify that this is the intended behavior of your query or command.

Role or privilege not assigned


Table 33. Notification details

Neo4j code Neo.ClientNotification.Security.CommandHasNoEffect

Title <command> has no effect.*

Descriptions • The user does not have the role. See Status Codes documentation for more
information.

• The role does not have the privilege. See Status Codes documentation for more
information.

Category SECURITY

GQLSTATUS code 00N71

Status description note: successful completion - role or privilege not assigned. { $cmd } has no effect. The role or
privilege is not assigned.

Classification SECURITY

SeverityLevel INFORMATION

*<command> and cmd could be either the full command given by the user or a subset of the given command.

114
Example 40. Revoking a role from a user who does not have that role

Command

REVOKE ROLE admin, reader FROM jane

Returned GQLSTATUS code


00N71

Returned status description


note: successful completion - role or privilege not assigned. REVOKE ROLE reader FROM jane
has no effect. The role or privilege is not assigned.

Suggestions for improvement


Verify that this is the intended role and user.

Command

REVOKE ROLE admin, reader FROM jane

Title of the returned code


REVOKE ROLE reader FROM jane has no effect.

Description of the returned code


The user does not have the role. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended role and user.

115
Example 41. Revoking a privilege from a role that does not have that privilege

Command

REVOKE WRITE ON GRAPH * FROM reader

Returned GQLSTATUS code


00N71

Returned status description


note: successful completion - role or privilege not assigned. REVOKE DENY WRITE ON GRAPH *
FROM reader has no effect. The role or privilege is not assigned.

Suggestions for improvement


Verify that this is the intended privilege and role.

Command

REVOKE WRITE ON GRAPH * FROM reader

Title of the returned code


REVOKE DENY WRITE ON GRAPH * FROM reader has no effect.

Description of the returned code


The role does not have the privilege. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended privilege and role.

Role or privilege already assigned


Table 34. Notification details

Neo4j code Neo.ClientNotification.Security.CommandHasNoEffect

Title <command> has no effect.*

Descriptions • The user already has the role. See Status Codes documentation for more
information.

• The role already has the privilege. See Status Codes documentation for more
information.

Category SECURITY

GQLSTATUS code 00N70

116
Status description note: successful completion - role or privilege already assigned. { $cmd } has no effect. The role or
privilege is already assigned.

Classification SECURITY

SeverityLevel INFORMATION

*<command> and cmd could be either the full command given by the user or a subset of the given command.

Example 42. Granting a role to a user who already has that role

Command

GRANT ROLE admin TO john

Returned GQLSTATUS code


00N70

Returned status description


note: successful completion - role or privilege already assigned. GRANT ROLE admin TO john
has no effect. The role or privilege is already assigned.

Suggestions for improvement


Verify that this is the intended role and user.

Command

GRANT ROLE admin TO john

Title of the returned code


GRANT ROLE admin TO john has no effect.

Description of the returned code


The user already has the role. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended role and user.

117
Example 43. Granting or denying a privilege to a role that already has that privilege

Command

GRANT TRAVERSE ON GRAPH * TO reader

Returned GQLSTATUS code


00N70

Returned status description


note: successful completion - role or privilege already assigned. GRANT TRAVERSE ON GRAPH *
TO reader has no effect. The role or privilege is already assigned.

Suggestions for improvement


Verify that this is the intended privilege and role.

Command

GRANT TRAVERSE ON GRAPH * TO reader

Title of the returned code


GRANT TRAVERSE ON GRAPH * NODE * TO reader has no effect.

Description of the returned code


The role already has the privilege. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended privilege and role.

Impossible revoke command


Table 35. Notification details

Neo4j code Neo.ClientNotification.Security.ImpossibleRevokeCommand

Title <command> has no effect.*

Description Role does not exist. Make sure nothing is misspelled. This notification will become an error in a
future major version. See Status Codes documentation for more information.

Category SECURITY

GQLSTATUS code 01N70

Status description warn: impossible revoke command. cmd has no effect. $msg Make sure nothing is
misspelled. This notification will become an error in a future major version.

118
Classification SECURITY

SeverityLevel WARNING

*<command> and cmd could be either the full command given by the user or a subset of the given command.

Example 44. Revoking a non-existing role from a user

Command

REVOKE ROLE manager, reader FROM jane

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE ROLE manager FROM jane has no effect. Role does
not exist. Make sure nothing is misspelled. This notification will become an error in a future
major version.

Suggestions for improvement


Verify that this is the intended role and that it is spelled correctly.

Command

REVOKE ROLE manager, reader FROM jane

Title of the returned code


REVOKE ROLE manager FROM jane has no effect.

Description of the returned code


Role does not exist. Make sure nothing is misspelled. This notification will become an error in
a future major version. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended role and that it is spelled correctly.

119
Example 45. Revoking a role from a non-existing user

Command

REVOKE ROLE reader FROM alice

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE ROLE reader FROM alice has no effect. User does
not exist. Make sure nothing is misspelled. This notification will become an error in a future
major version. See Status Codes documentation for more information. o

Suggestions for improvement


Verify that this is the intended user and that it is spelled correctly.

Command

REVOKE ROLE reader FROM alice

Title of the returned code


REVOKE ROLE reader FROM alice has no effect.

Description of the returned code


User does not exist. Make sure nothing is misspelled. This notification will become an error in
a future major version.

Suggestions for improvement


Verify that this is the intended user and that it is spelled correctly.

120
Example 46. Revoking a privilege from a non-existing role

Command

REVOKE GRANT WRITE ON GRAPH * FROM manager

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE GRANT WRITE ON GRAPH * FROM manager has no
effect. Role does not exist. Make sure nothing is misspelled. This notification will become an
error in a future major version.

Suggestions for improvement


Verify that this is the intended role and that it is spelled correctly.

Command

REVOKE GRANT WRITE ON GRAPH * FROM manager

Title of the returned code


REVOKE GRANT WRITE ON GRAPH * FROM manager has no effect.

Description of the returned code


Role does not exist. Make sure nothing is misspelled. This notification will become an error in
a future major version. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended role and that it is spelled correctly.

121
Example 47. Revoking a privilege on a non-existing graph from a role

Command

REVOKE GRANT WRITE ON GRAPH neo3j FROM editor

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE GRANT WRITE ON GRAPH neo3j FROM editor has
no effect. Database neo3j does not exist. Make sure nothing is misspelled. This notification
will become an error in a future major version.

Suggestions for improvement


Verify that this is the intended graph and that it is spelled correctly.

Command

REVOKE GRANT WRITE ON GRAPH neo3j FROM editor

Title of the returned code


REVOKE GRANT WRITE ON GRAPH neo3j FROM editor has no effect.

Description of the returned code


Database neo3j does not exist. Make sure nothing is misspelled. This notification will become
an error in a future major version. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended graph and that it is spelled correctly.

122
Example 48. Revoking a privilege on a non-existing database from a role

Command

REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
has no effect. Database neo3j does not exist. Make sure nothing is misspelled. This
notification will become an error in a future major version.

Suggestions for improvement


Verify that this is the intended database and that it is spelled correctly.

Command

REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor

Title of the returned code


REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor has no effect.

Description of the returned code


Database neo3j does not exist. Make sure nothing is misspelled. This notification will become
an error in a future major version. See Status Codes documentation for more information.

Suggestions for improvement


Verify that this is the intended database and that it is spelled correctly.

123
Example 49. Revoking a privilege from a role with wildcard graph parameter

Parameter

{
"graph": "*"
}

Command

REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC has
no effect. Database * does not exist. Make sure nothing is misspelled. This notification will
become an error in a future major version.

Suggestions for improvement


Use GRAPH * without the parameter to revoke the privilege on all graphs.

Parameter

{
"graph": "*"
}

Command

REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC

Title of the returned code


REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC has no effect.

Description of the returned code


Parameterized database and graph names do not support wildcards. Make sure nothing is
misspelled. This notification will become an error in a future major version. See Status Codes
documentation for more information.

Suggestions for improvement


Use GRAPH * without the parameter to revoke the privilege on all graphs.

124
Example 50. Revoking a privilege from a role with a wildcard database parameter

Parameter

{
"database": "*"
}

Command

REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC

Returned GQLSTATUS code


01N70

Returned status description


warn: impossible revoke command. REVOKE GRANT ACCESS ON DATABASE $database FROM
PUBLIC has no effect. Database * does not exist. Make sure nothing is misspelled. This
notification will become an error in a future major version.

Suggestions for improvement


Use DATABASE * without the parameter to revoke the privilege on all databases.

Parameter

{
"database": "*"
}

Command

REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC

Title of the returned code


REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC has no effect.

Description of the returned code


Parameterized database and graph names do not support wildcards. Make sure nothing is
misspelled. This notification will become an error in a future major version. See Status Codes
documentation for more information.

Suggestions for improvement


Use DATABASE * without the parameter to revoke the privilege on all databases.

125
AuthProviderNotDefined
Table 36. Notification details

Neo4j code Neo.ClientNotification.Security.AuthProviderNotDefined

Title The auth provider is not defined.

Description The auth provider { $provider } is not defined in the configuration. Verify that the
spelling is correct or define { $provider } in the configuration.

Category SECURITY

GQLSTATUS code 00N72

Status description note: successful completion - undefined auth provider. The auth provider { $auth } is
not defined in the configuration. Verify that the spelling is correct or define { $auth }
in the configuration.

Classification SECURITY

SeverityLevel INFORMATION

126
Example 51. Create a user with an auth provider that is not defined in the configuration

Command

CREATE USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }

Description of the returned code


The auth provider unknownProvider is not defined in the configuration. Verify that the spelling
is correct or define unknownProvider in the configuration.

Suggestions for improvement


Make sure that the given provider is correct, or replace it if not. If it is correct, make sure to
add it as a known auth provider in one or both of dbms.security.authentication_providers
and dbms.security.authorization_providers.

Command

CREATE USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }

Returned GQLSTATUS code


00N72

Returned status description


note: successful completion - undefined auth provider. The auth provider unknownProvider is
not defined in the configuration. Verify that the spelling is correct or define unknownProvider
in the configuration.

Suggestions for improvement


Make sure that the given provider is correct, or replace it if not. If it is correct, make sure to
add it as a known auth provider in one or both of dbms.security.authentication_providers
and dbms.security.authorization_providers.

127
Example 52. Alter a user to add an auth provider that is not defined in the configuration

Command

ALTER USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }

Description of the returned code


The auth provider unknownProvider is not defined in the configuration. Verify that the spelling
is correct or define unknownProvider in the configuration.

Suggestions for improvement


Make sure that the given provider is correct, or replace it if not. If it is correct, make sure to
add it as a known auth provider in one or both of dbms.security.authentication_providers
and dbms.security.authorization_providers.

Command

ALTER USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }

Returned GQLSTATUS code


00N72

Returned status description


note: successful completion - undefined auth provider. The auth provider unknownProvider is
not defined in the configuration. Verify that the spelling is correct or define unknownProvider
in the configuration.

Suggestions for improvement


Make sure that the given provider is correct, or replace it if not. If it is correct, make sure to
add it as a known auth provider in one or both of dbms.security.authentication_providers
and dbms.security.authorization_providers.

ExternalAuthNotEnabled
Table 37. Notification details

Neo4j code Neo.ClientNotification.Security.ExternalAuthNotEnabled

Title External auth for user is not enabled.

Description Use setting dbms.security.require_local_user to enable external auth.

Category SECURITY

GQLSTATUS code 01N71

128
Status description warn: external auth disabled. Use the setting 'dbms.security.require_local_user' to enable external
auth.

Classification SECURITY

SeverityLevel WARNING

Example 53. Create a user with an external auth provider when linked users are not enabled

Command

CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }

Suggestions for improvement


Enable linked users through the dbms.security.require_local_user setting. Until enabled,
the new external auth will be ignored, and current external auth behaviors will continue to
apply.

Command

CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }

Returned GQLSTATUS code


01N71

Returned status description


warn: external auth disabled. Use the setting 'dbms.security.require_local_user' to enable
external auth.

Suggestions for improvement


Enable linked users through the dbms.security.require_local_user setting. Until enabled,
the new external auth will be ignored, and current external auth behaviors will continue to
apply.

129
Example 54. Alter a user to add an external auth provider when linked users are not enabled

Command

ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }

Suggestions for improvement


Enable linked users through the dbms.security.require_local_user setting. Until enabled,
the new external auth will be ignored, and current external auth behaviors will continue to
apply.

Command

ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }

Returned GQLSTATUS code


01N71

Returned status description


warn: external auth disabled. Use the setting 'dbms.security.require_local_user' to enable
external auth.

Suggestions for improvement


Enable linked users through the dbms.security.require_local_user setting. Until enabled,
the new external auth will be ignored, and current external auth behaviors will continue to
apply.

TOPOLOGY category
Topology notifications provide additional information related to managing databases and servers.

Server already enabled


Table 38. Notification details

Neo4j code Neo.ClientNotification.Cluster.ServerAlreadyEnabled

Title <command> has no effect.

Description Server %s is already enabled. Verify that this is the intended server.

Category TOPOLOGY

GQLSTATUS code 00N80

130
Status description note: successful completion - server already enabled. ENABLE SERVER has no effect.
Server { $server } is already enabled. Verify that this is the intended server.

Classification TOPOLOGY

SeverityLevel INFORMATION

Example 55. Enabling an already enabled server

Command

ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"

Returned GQLSTATUS code


00N80

Returned status description


note: successful completion - server already enabled. ENABLE SERVER has no effect. Server
123e4567-e89b-12d3-a456-426614174000 is already enabled. Verify that this is the intended
server.

Command

ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"

Description of the returned code


Server 123e4567-e89b-12d3-a456-426614174000 is already enabled. Verify that this is the
intended server.

Server already cordoned


Table 39. Notification details

Neo4j code Neo.ClientNotification.Cluster.ServerAlreadyCordoned

Title <command> has no effect.

Description Server %s is already cordoned. Verify that this is the intended server.

Category TOPOLOGY

GQLSTATUS code 00N81

Status description note: successful completion - server already cordoned. CORDON SERVER has no effect.
Server { $server } is already cordoned. Verify that this is the intended server.

131
Classification TOPOLOGY

SeverityLevel INFORMATION

Example 56. Cordoning an already cordoned server

Command

CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"

Returned GQLSTATUS code


00N81

Returned status description


note: successful completion - server already cordoned. CORDON SERVER has no effect. Server
123e4567-e89b-12d3-a456-426614174000 is already cordoned. Verify that this is the intended
server.

Command

CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"

Description of the returned code


Server 123e4567-e89b-12d3-a456-426614174000 is already cordoned. Verify that this is the
intended server.

No databases reallocated
Table 40. Notification details

Neo4j code Neo.ClientNotification.Cluster.NoDatabasesReallocated

Title <command> has no effect.

Description No databases were reallocated. No better allocation is currently possible.

Category TOPOLOGY

GQLSTATUS code 00N82

Status description note: successful completion - no databases reallocated. REALLOCATE DATABASES has
no effect. No databases were reallocated. No better allocation is currently possible.

Classification TOPOLOGY

SeverityLevel INFORMATION

132
Example 57. Reallocating databases resulted in no allocation changes

Command

REALLOCATE DATABASES

Returned GQLSTATUS code


00N82

Returned status description


note: successful completion - no databases reallocated. REALLOCATE DATABASES has no effect.
No databases were reallocated. No better allocation is currently possible.

Example scenarios
Scenario 1: The cluster is already balanced. For example, when there are three servers, each
hosting databases foo and bar, meaning all databases are allocated to all servers.

Scenario 2: The cluster appears unbalanced, but server constraints prevent you from moving
to a better, more balanced, allocation. For example, assuming server 1 hosts databases foo
and bar, server 2 hosts only foo, and server 3 hosts no databases. Then, a better allocation
would move foo from server 1 to server 3, but if server 3 has the constraint
deniedDatabases:['foo']}, then the cluster is already balanced subject to this constraint.

Command

REALLOCATE DATABASES

Description of the returned code


No databases were reallocated. No better allocation is currently possible.

Example scenarios
Scenario 1: The cluster is already balanced. For example, when there are three servers, each
hosting databases foo and bar, meaning all databases are allocated to all servers.

Scenario 2: The cluster appears unbalanced, but server constraints prevent you from moving
to a better, more balanced, allocation. For example, assuming server 1 hosts databases foo
and bar, server 2 hosts only foo, and server 3 hosts no databases. Then, a better allocation
would move foo from server 1 to server 3, but if server 3 has the constraint
deniedDatabases:['foo']}, then the cluster is already balanced subject to this constraint.

Cordoned servers existed during allocation


This notification is returned when a Cypher administration command triggers an allocation decision and
some of the servers are cordoned. For example, CREATE DATABASE, ALTER DATABASE, DEALLOCATE DATABASES
FROM SERVER[S], and ALTER DATABASE return this notification. However, REALLOCATE DATABASES requires that

133
there are no cordoned servers and, therefore, does not return it.

Table 41. Notification details

Neo4j code Neo.ClientNotification.Cluster.CordonedServersExistedDuringAllocation

Title Cordoned servers existed when making an allocation decision.

Description Server(s) %s are cordoned. This can impact allocation decisions.

Category TOPOLOGY

GQLSTATUS code 00N83

Status description note: successful completion - cordoned servers existed during allocation. Cordoned
servers existed when making an allocation decision. Server(s) { $server_list } are
cordoned. This can impact allocation decisions.

Classification TOPOLOGY

SeverityLevel INFORMATION

134
Example 58. Cordoned servers existed during an allocation decision

The example assumes that you have a cluster with three servers, of which server 123e4567-
e89b-12d3-a456-426614174000 is cordoned using the dbms.cluster.cordonServer procedure.
Then the below command will return this notification.

Command

CREATE DATABASE foo TOPOLOGY 2 PRIMARIES

Returned GQLSTATUS code


00N83

Returned status description


note: successful completion - cordoned servers existed during allocation. Cordoned servers
existed when making an allocation decision. Server(s) 123e4567-e89b-12d3-a456-
426614174000 are cordoned. This can impact allocation decisions.

The example assumes that you have a cluster with three servers, of which server 123e4567-
e89b-12d3-a456-426614174000 is cordoned using the dbms.cluster.cordonServer procedure.
Then the below command will return this notification.

Command

CREATE DATABASE foo TOPOLOGY 2 PRIMARIES

Description of the returned code


Server(s) 123e4567-e89b-12d3-a456-426614174000 are cordoned. This can impact allocation
decisions.

Requested topology matched current topology


Table 42. Notification details

Neo4j code Neo.ClientNotification.Cluster.RequestedTopologyMatchedCurrentTopology

Title <command> has no effect.

Description The requested topology matched the current topology. No allocations were
changed.

Category TOPOLOGY

GQLSTATUS code 00N84

135
Status description note: successful completion - requested topology matched current topology. ALTER
DATABASE has no effect. The requested topology matched the current topology. No
allocations were changed.

Classification TOPOLOGY

SeverityLevel INFORMATION

Example 59. Requested topology matched current topology

The example assumes that you have a cluster with three servers and a database foo with a
topology of two primaries and one secondary.

Command

ALTER DATABASE foo SET TOPOLOGY 2 PRIMARIES 1 SECONDARY

Returned GQLSTATUS code


00N84

Returned status description


note: successful completion - requested topology matched current topology. ALTER DATABASE
has no effect. The requested topology matched the current topology. No allocations were
changed.

The example assumes that you have a cluster with three servers and a database foo with a
topology of two primaries and one secondary.

Command

ALTER DATABASE foo SET TOPOLOGY 2 PRIMARIES 1 SECONDARY

Description of the returned code


The requested topology matched the current topology. No allocations were changed.

SCHEMA category
Schema notifications provide additional information related to indexes and constraints.

Index or constraint already exists


Table 43. Notification details

Neo4j code Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists

136
Title <command> has no effect.

Description <conflicting> already exists.

Description %s already exists.

Category SCHEMA

GQLSTATUS code 00NA0

Status description note: successful completion - index or constraint already exists. { $cmd } has no
effect. { $index_constr_pat } already exists.

SeverityLevel INFORMATION

*<command> and cmd could be either the full command given by the user or a subset of the given command.

Example 60. Creating an index when an equivalent index already exists

Given a range index on (:Label {property}) named existingRangeIndex.

Command

CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)

Returned GQLSTATUS code


00NA0

Returned status description


note: successful completion - index or constraint already exists. CREATE RANGE INDEX
labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON (e.property) has no effect.
RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property) already exists.

Given a range index on (:Label {property}) named existingRangeIndex.

Command

CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)

Title of the returned code


CREATE RANGE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON
(e.property) has no effect.

Full description of the returned code


RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property) already exists.

137
Example 61. Creating an index when another unrelated index using that name already exists

Given a range index on (:Label {property}) named myIndex.

Command

CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)

Returned GQLSTATUS code


00NA0

Returned status description


note: successful completion - index or constraint already exists. CREATE TEXT INDEX myIndex
IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property) has no effect. RANGE INDEX
myIndex FOR (e:Label) ON (e.property) already exists.

Suggestions for improvement


Choose a different name for the new index and try again.

CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)

Given a range index on (:Label {property}) named myIndex.

Command

CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)

Title of the returned code


CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property) has
no effect.

Full description of the returned code


RANGE INDEX myIndex FOR (e:Label) ON (e.property) already exists.

Suggestions for improvement


Choose a different name for the new index and try again.

CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)

138
Example 62. Creating a constraint when an identical constraint already exists

Given a node key constraint on (:Label {property}) named nodeKeyLabelPropertyConstraint.

Command

CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE


(n.property) IS NODE KEY

Returned GQLSTATUS code


00NA0

Returned status description


note: successful completion - index or constraint already exists. CREATE CONSTRAINT
nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label) REQUIRE (e.property) IS
NODE KEY has no effect. CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label)
REQUIRE (e.property) IS NODE KEY already exists.

Given a node key constraint on (:Label {property}) named nodeKeyLabelPropertyConstraint.

Command

CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE


(n.property) IS NODE KEY

Title of the returned code


CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label)
REQUIRE (e.property) IS NODE KEY has no effect.

Full description of the returned code


CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label) REQUIRE (e.property) IS
NODE KEY already exists.

139
Example 63. Creating a constraint when another unrelated constraint using that name already exists

Given a node key constraint on (:Label {property}) named myConstraint.

Command

CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT
NULL

Returned GQLSTATUS code


00NA0

Returned status description


note: successful completion - index or constraint already exists. CREATE CONSTRAINT
myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2) IS NOT NULL has no
effect. CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY
already exists.

Suggestions for improvement


Choose a different name for the new constraint and try again.

CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT
NULL

Given a node key constraint on (:Label {property}) named myConstraint.

Command

CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT
NULL

Title of the returned code


CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2)
IS NOT NULL has no effect.

Full description of the returned code


CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY already
exists.

Suggestions for improvement


Choose a different name for the new constraint and try again.

CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT
NULL

140
Index or constraint does not exist
Table 44. Notification details

Neo4j code Neo.ClientNotification.Schema.IndexOrConstraintDoesNotExist

Title <command> has no effect.

Description %s does not exist.

Category SCHEMA

GQLSTATUS code 00NA1

Status description note: successful completion - index or constraint does not exist. { $cmd } has no
effect. { $index_constr_name } does not exist.

SeverityLevel INFORMATION

141
Example 64. Attempting to drop a non-existing index

Command

DROP INDEX nonExistingIndex IF EXISTS

Returned GQLSTATUS code


00NA1

Returned status description


note: successful completion - index or constraint does not exist. DROP INDEX
nonExistingIndex IF EXISTS has no effect. nonExistingIndex does not exist.

Suggestions for improvement


Verify that this is the intended index and that it is spelled correctly.

Command

DROP INDEX nonExistingIndex IF EXISTS

Title of the returned code


DROP INDEX nonExistingIndex IF EXISTS has no effect.

Full description of the returned code


nonExistingIndex does not exist.

Suggestions for improvement


Verify that this is the intended index and that it is spelled correctly.

142
Example 65. Attempting to drop a non-existing constraint

Command

DROP CONSTRAINT nonExistingConstraint IF EXISTS

Returned GQLSTATUS code


00NA1

Returned status description


note: successful completion - index or constraint does not exist. DROP CONSTRAINT
nonExistingConstraint IF EXISTS has no effect. nonExistingConstraint does not exist.

Suggestions for improvement


Verify that this is the intended constraint and that it is spelled correctly.

Command

DROP CONSTRAINT nonExistingConstraint IF EXISTS

Title of the returned code


DROP CONSTRAINT nonExistingConstraint IF EXISTS has no effect.

Full description of the returned code


nonExistingConstraint does not exist.

Suggestions for improvement


Verify that this is the intended constraint and that it is spelled correctly.

GENERIC notifications
GENERIC notification codes do not belong to any wider category and do not have any connection to each
other.

Subquery variable shadowing


Table 45. Notification details

Neo4j code Neo.ClientNotification.Statement.SubqueryVariableShadowing

Title Variable in subquery is shadowing a variable with the same name from the outer
scope.

143
Description Variable in subquery is shadowing a variable with the same name from the outer scope. If you
want to use that variable instead, it must be imported into the subquery using importing WITH
clause. (%s)

Category GENERIC

GQLSTATUS code 03N60

Status description info: subquery variable shadowing. The variable { $var } in the subquery uses the
same name as a variable from the outer query. Use WITH $var in the subquery to
import the one from the outer scope unless you want it to be a new variable.

Classification GENERIC

SeverityLevel INFORMATION

144
Example 66. Shadowing of a variable from the outer scope

Query

MATCH (n)
CALL {
MATCH (n)--(m)
RETURN m
}
RETURN *

Returned GQLSTATUS code


03N60

Returned status description


info: subquery variable shadowing. The variable n in the subquery uses the same name as a
variable from the outer query. Use WITH n in the subquery to import the one from the outer
scope unless you want it to be a new variable.

Suggestions for improvement


If the intended behavior of the query is for the variable in the subquery to be a new variable,
then nothing needs to be done. If the intended behavior is to use the variable from the outer
query, it needs to be imported to the subquery using the WITH clause.

MATCH (n)
CALL {
WITH n
MATCH (n)--(m)
RETURN m
}
RETURN *

145
Query

MATCH (n)
CALL {
MATCH (n)--(m)
RETURN m
}
RETURN *

Description of the returned code


Variable in subquery is shadowing a variable with the same name from the outer scope. If
you want to use that variable instead, it must be imported into the subquery using importing
WITH clause. (the shadowing variable is: n)

Suggestions for improvement


If the intended behavior of the query is for the variable in the subquery to be a new variable,
then nothing needs to be done. If the intended behavior is to use the variable from the outer
query, it needs to be imported to the subquery using the WITH clause.

MATCH (n)
CALL {
WITH n
MATCH (n)--(m)
RETURN m
}
RETURN *

Redundant optional procedure


Table 46. Notification details

Neo4j code Neo.ClientNotification.Statement.RedundantOptionalProcedure

Title The use of OPTIONAL is redundant when the procedure calls a void procedure.

Description The use of OPTIONAL is redundant as CALL %s is a void procedure.

Category GENERIC

GQLSTATUS code 03N61

Status description info: redundant optional procedure. The use of OPTIONAL is redundant as CALL %s is
a void procedure.

Classification GENERIC

SeverityLevel INFORMATION

146
Example 67. Redundant use of OPTIONAL in a procedure call

Query

OPTIONAL CALL db.createLabel("A")

Returned GQLSTATUS code


03N61

Returned status description


info: redundant optional procedure. The use of OPTIONAL is redundant as CALL
db.createLabel is a void procedure.

Suggestions for improvement


If the intended behavior of the query is to use a void procedure, the OPTIONAL keyword can be
removed without impacting the query.

CALL db.createLabel("A")

Query

OPTIONAL CALL db.createLabel("A")

Description of the returned code


The use of OPTIONAL is redundant as CALL db.createLabel is a void procedure.

Suggestions for improvement


If the intended behavior of the query is to use a void procedure, the OPTIONAL keyword can be
removed without impacting the query.

CALL db.createLabel("A")

Redundant optional subquery


Table 47. Notification details

Neo4j code Neo.ClientNotification.Statement.RedundantOptionalSubquery

Title The use of OPTIONAL is redundant when CALL is a unit subquery.

Description The use of OPTIONAL is redundant as CALL is a unit subquery.

Category GENERIC

GQLSTATUS code 03N62

147
Status description info: redundant optional subquery. The use of OPTIONAL is redundant as CALL is a
unit subquery.

Classification GENERIC

SeverityLevel INFORMATION

148
Example 68. Redundant use of OPTIONAL in a CALL subquery

Query

UNWIND [1, 2, 3] AS x
OPTIONAL CALL (x) {
CREATE({i:x})
}

Returned GQLSTATUS code


03N62

Description of the returned code


info: redundant optional subquery. The use of OPTIONAL is redundant as CALL is a unit
subquery.

Suggestions for improvement


If the intended behavior of the query is for the subquery not to return any values, the
OPTIONAL keyword can be removed without impacting the query.

UNWIND [1, 2, 3] AS x
CALL (x) {
CREATE({i:x})
}

Query

UNWIND [1, 2, 3] AS x
OPTIONAL CALL (x) {
CREATE({i:x})
}

Description of the returned code


Optional is redundant in the case of a unit subquery. The use of OPTIONAL on unit subqueries
have no effect and can be removed.

Suggestions for improvement


If the intended behavior of the query is for the subquery not to return any values, the
OPTIONAL keyword can be removed without impacting the query.

UNWIND [1, 2, 3] AS x
CALL (x) {
CREATE({i:x})
}

Parameter missing
Table 48. Notification details

149
Neo4j code Neo.ClientNotification.Statement.ParameterNotProvided

Title The statement refers to a parameter that was not provided in the request.

Description Did not supply query with enough parameters. The produced query plan will not be cached and is
not executable without EXPLAIN. (%s)

Category GENERIC

GQLSTATUS code 01N60

Status description warn: parameter missing. The query plan cannot be cached and is not executable
without EXPLAIN due to the undefined parameter(s) { $param_list }. Provide the
parameter(s).

Classification GENERIC

SeverityLevel WARNING

Example 69. Using an EXPLAIN query with parameters without providing them

Query

EXPLAIN WITH $param as param


RETURN param

Returned GQLSTATUS code


01N60

Returned status description


warn: parameter missing. The query plan cannot be cached and is not executable without
EXPLAIN due to the undefined parameter(s) { $param }. Provide the parameter(s).

Suggestions for improvement


Provide the parameter to be able to cache the plan.

Query

EXPLAIN WITH $param as param


RETURN param

Description of the returned code


Did not supply query with enough parameters. The produced query plan will not be cached
and is not executable without EXPLAIN. (Missing parameters: param)

Suggestions for improvement


Provide the parameter to be able to cache the plan.

150
Procedure or function execution warning
Table 49. Notification details

Neo4j code Neo.ClientNotification.Procedure.ProcedureWarning

Title The query used a procedure that generated a warning.

Description The query used a procedure that generated a warning. (%s)

Category GENERIC

GQLSTATUS code 01N62

Status description warn: procedure execution warning. The procedure { $proc } generates the
warning { $msg }.

Classification GENERIC

SeverityLevel WARNING

Unsatisfiable relationship type expression Label—new 5.4


When matching on a relationship type expression that can never be satisfied, for example asking for zero,
more than one or contradictory types.

Table 50. Notification category details

Neo4j code Neo.ClientNotification.Statement.UnsatisfiableRelationshipTypeExpression

Title The query contains a relationship type expression that cannot be satisfied.

Description Relationship type expression cannot possibly be satisfied. (%s)

Category GENERIC

GQLSTATUS code 01N61

Status description warn: unsatisfiable relationship type expression. The expression { $label_expr }
cannot be satisfied because relationships must have exactly one type.

Classification GENERIC

SeverityLevel WARNING

151
Example 70. Matching on a relationship type expression that can never be satisfied

Query

MATCH ()-[r:R1&R2]->() RETURN r

Returned GQLSTATUS code


01N61

Returned status description


warn: unsatisfiable relationship type expression. The expression R1&R2 cannot be satisfied
because relationships must have exactly one type.

Query

MATCH ()-[r:R1&R2]->() RETURN r

Description of the returned code


Relationship type expression cannot possibly be satisfied. (R1&R2 can never be fulfilled by any
relationship. Relationships must have exactly one type.)

Repeated relationship reference Label—new 5.5


Table 51. Notification category details

Neo4j code Neo.ClientNotification.Statement.RepeatedRelationshipReference

Title The query returns no results because a relationship variable is bound more than
once.

Description • A relationship is referenced more than once in the query, which leads to no
results because relationships must not occur more than once in each result. (%s)

• A variable-length relationship variable is bound more than once, which leads to


no results because relationships must not occur more than once in each result.
(%s)

Category GENERIC

GQLSTATUS code 01N63

Status description warn: repeated relationship reference. { $var } is repeated in { $pat }, which
leads to no results.

Classification GENERIC

152
SeverityLevel WARNING

Example 71. Binding a relationship variable more than once

Query

MATCH (:A)-[r]->(), ()-[r]->(:B) RETURN r

Returned GQLSTATUS code


01N63

Returned status description


warn: repeated relationship reference. r is repeated in (:A)-[r]→(), ()-[r]→(:B), which
leads to no results.

Suggestions for improvement


Use one pattern to match all relationships that start with a node with the label A and end
with a node with the label B:

MATCH (:A)-[r]->(:B) RETURN r

Query

MATCH (:A)-[r]->(), ()-[r]->(:B) RETURN r

Description of the returned code


A relationship is referenced more than once in the query, which leads to no results because
relationships must not occur more than once in each result. (Relationship r was repeated)

Suggestions for improvement


Use one pattern to match all relationships that start with a node with the label A and end
with a node with the label B:

MATCH (:A)-[r]->(:B) RETURN r

153
Example 72. Binding a variable-length relationship variable more than once (when run on version 5.6 or
newer)

Query

MATCH ()-[r*]->()<-[r*]-() RETURN count(*) AS count

Returned GQLSTATUS code


01N63

Returned status description


warn: repeated relationship reference. r is repeated in ()-[r*]→()←[r*]-(), which leads to no
results.

Query

MATCH ()-[r*]->()<-[r*]-() RETURN count(*) AS count

Description of the returned code


A variable-length relationship variable is bound more than once, which leads to no results
because relationships must not occur more than once in each result. (Relationship r was
repeated)

154
Changes to status codes per Neo4j version
Neo4j 5.25
Starting from 5.25, the query log includes the GQL error information under the JSON object errorInfo. For
more information, see Operations Manual → GQL error information.

Neo4j 5.24
New:

Neo.ClientNotification.Statement.RedundantOptionalProcedure
Neo.ClientNotification.Statement.RedundantOptionalSubquery
Neo.ClientNotification.Security.AuthProviderNotDefined
Neo.ClientNotification.Security.ExternalAuthNotEnabled
Neo.ClientNotification.Statement.AggregationSkippedNull

Neo4j 5.23
From version 5.23, Neo4j has a new GqlStatusObject API in addition to the existing Notification API.

The GqlStatusObject API provides information about the status of a Cypher query or command execution
in compliance with the GQL standard. It includes GQLSTATUS code, StatusDescription, and
DiagnosticRecord. For more information, see GQL-status notification object.

Neo4j 5.17
New:

Neo.ClientNotification.Cluster.RequestedTopologyMatchedCurrentTopology
Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists
Neo.ClientNotification.Schema.IndexOrConstraintDoesNotExist

Neo4j 5.15
New:

Neo.ClientNotification.Cluster.CordonedServersExistedDuringAllocation

Neo4j 5.14
New:

Neo.ClientNotification.Cluster.NoDatabasesReallocated
Neo.ClientNotification.Statement.SideEffectVisibility

155
Changed

The usage of Neo.ClientNotification.Statement.RuntimeExperimental has been removed.

Neo4j 5.13
New:

Neo.ClientNotification.Cluster.ServerAlreadyEnabled
Neo.ClientError.ChangeDataCapture.InvalidIdentifier
Neo.TransientError.ChangeDataCapture.FutureIdentifier
Neo.DatabaseError.ChangeDataCapture.Disabled
Neo.DatabaseError.ChangeDataCapture.ScanFailure

Neo4j 5.9
New:

Neo.ClientNotification.Security.CommandHasNoEffect
Neo.ClientNotification.Security.ImpossibleRevokeCommand

Neo4j 5.5
New:

Neo.ClientNotification.Statement.RepeatedRelationshipReference

Neo4j 5.4
New:

Neo.ClientNotification.Statement.UnsatisfiableRelationshipTypeExpression

Neo4j 5.0
New:

Neo.ClientNotification.Database.HomeDatabaseNotFound
Neo.ClientNotification.Request.DeprecatedFormat
Neo.ClientNotification.Schema.HintedIndexNotFound
Neo.ClientNotification.Statement.CartesianProduct
Neo.ClientNotification.Statement.CodeGenerationFailed
Neo.ClientNotification.Statement.DynamicProperty
Neo.ClientNotification.Statement.EagerOperator
Neo.ClientNotification.Statement.ExhaustiveShortestPath
Neo.ClientNotification.Statement.NoApplicableIndex
Neo.ClientNotification.Statement.RuntimeExperimental
Neo.ClientNotification.Statement.SubqueryVariableShadowing
Neo.ClientNotification.Statement.UnboundedVariableLengthPattern
Neo.ClientNotification.Statement.ParameterNotProvided
Neo.ClientError.Statement.UnsupportedOperationError

156
Removed:

Neo.ClientError.Statement.CodeGenerationFailed
Neo.TransientError.Transaction.TransientTransactionFailure
Neo.ClientNotification.Statement.CartesianProductWarning
Neo.ClientNotification.Statement.DynamicPropertyWarning
Neo.ClientNotification.Statement.EagerOperatorWarning
Neo.ClientNotification.Statement.ExhaustiveShortestPathWarning
Neo.ClientNotification.Statement.ExperimentalFeature
Neo.ClientNotification.Statement.MissingAlias
Neo.ClientNotification.Statement.NoApplicableIndexWarning
Neo.ClientNotification.Statement.SubqueryVariableShadowingWarning
Neo.ClientNotification.Statement.UnboundedVariableLengthPatternWarning

Neo4j 4.4
New:

Neo.ClientError.Statement.UnsupportedAdministrationCommand
Neo.DatabaseError.Transaction.LinkedTransactionError

Neo4j 4.3
New:

Neo.ClientError.General.UpgradeRequired
Neo.TransientError.Statement.ExecutionTimeout

Neo4j 4.2
New:

Neo.ClientNotification.Statement.MissingAlias
Neo.ClientNotification.Statement.SubqueryVariableShadowingWarning
Neo.TransientError.Transaction.TransientTransactionFailure

Neo4j 4.1
New:

Neo.ClientError.Cluster.Routing
Neo.ClientError.General.TransactionOutOfMemoryError
Neo.ClientError.Statement.AccessMode
Neo.DatabaseError.Statement.RemoteExecutionFailed
Neo.TransientError.General.MemoryPoolOutOfMemoryError

Removed:

Neo.ClientError.Cluster.TransactionSizeExceedsLimit
Neo.DatabaseError.Cluster.SerializationFailure
Neo.TransientError.General.TransactionOutOfMemoryError

157
Neo4j 4.0
New:

Neo.ClientError.Cluster.TransactionSizeExceedsLimit
Neo.ClientError.Database.DatabaseNotFound
Neo.ClientError.Database.ExistingDatabaseFound
Neo.ClientError.Fabric.AccessMode
Neo.ClientError.Schema.ConstraintViolation
Neo.ClientError.Schema.ConstraintWithNameAlreadyExists
Neo.ClientError.Schema.EquivalentSchemaRuleAlreadyExists
Neo.ClientError.Schema.IndexMultipleFound
Neo.ClientError.Schema.IndexWithNameAlreadyExists
Neo.ClientError.Statement.NotSystemDatabaseError
Neo.ClientError.Statement.RuntimeUnsupportedError
Neo.ClientError.Transaction.InvalidBookmarkMixture
Neo.DatabaseError.Cluster.SerializationFailure
Neo.DatabaseError.Database.DatabaseLimitReached
Neo.DatabaseError.Database.UnableToStartDatabase
Neo.DatabaseError.Database.Unknown
Neo.DatabaseError.Fabric.RemoteExecutionFailed
Neo.DatabaseError.Schema.TokenLimitReached
Neo.DatabaseError.Statement.CodeGenerationFailed
Neo.TransientError.Database.DatabaseUnavailable
Neo.TransientError.General.TransactionMemoryLimit
Neo.TransientError.General.TransactionOutOfMemoryError
Neo.TransientError.Transaction.BookmarkTimeout
Neo.TransientError.Transaction.LeaseExpired
Neo.TransientError.Transaction.MaximumTransactionLimitReached

Removed:

Neo.ClientError.LegacyIndex.LegacyIndexNotFound
Neo.ClientError.Request.TransactionRequired
Neo.ClientError.Schema.ConstraintVerificationFailed
Neo.ClientError.Security.EncryptionRequired
Neo.ClientError.Statement.LabelNotFound
Neo.ClientNotification.Statement.CreateUniqueUnavailableWarning
Neo.ClientNotification.Statement.JoinHintUnsupportedWarning
Neo.ClientNotification.Statement.PlannerUnavailableWarning
Neo.ClientNotification.Statement.PlannerUnsupportedWarning
Neo.DatabaseError.Schema.LabelLimitReached
Neo.TransientError.Cluster.NoLeaderAvailable
Neo.TransientError.General.DatabaseUnavailable
Neo.TransientError.Network.CommunicationError
Neo.TransientError.Schema.SchemaModifiedConcurrently
Neo.TransientError.Transaction.InstanceStateChanged
Neo.TransientError.Transaction.LockSessionExpired

158
License
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)

You are free to


Share
copy and redistribute the material in any medium or format

Adapt
remix, transform, and build upon the material

The licensor cannot revoke these freedoms as long as you follow the license terms.

Under the following terms


Attribution
You must give appropriate credit, provide a link to the license, and indicate if changes were made. You
may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or
your use.

NonCommercial
You may not use the material for commercial purposes.

ShareAlike
If you remix, transform, or build upon the material, you must distribute your contributions under the
same license as the original.

No additional restrictions
You may not apply legal terms or technological measures that legally restrict others from doing
anything the license permits.

Notices
You do not have to comply with the license for elements of the material in the public domain or where your
use is permitted by an applicable exception or limitation.

No warranties are given. The license may not give you all of the permissions necessary for your intended
use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the
material.

See https://creativecommons.org/licenses/by-nc-sa/4.0/ for further details. The full license text is available
at https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.

159

You might also like