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.

Please note that while GQLSTATUS codes remain stable, the status descriptions associated with these codes may change over 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 1. 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

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

Unbounded variable length pattern

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

Table 2. 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

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 3. Notification details

Neo4j code

Neo.ClientNotification.Statement.ExhaustiveShortestPath

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

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-indexed label. This may not perform well on large data sets. Adding an index could improve the query speed.

Table 4. 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

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 5. 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

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

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

Dynamic property

Table 6. 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

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;
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 7. Notification details

Neo4j code

Neo.ClientNotification.Statement.CodeGenerationFailed

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 8. 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

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 9. Notification details

Neo4j code

Neo.ClientNotification.Schema.HintedIndexNotFound

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

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.

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 10. Notification details

Neo4j code

Neo.ClientNotification.Database.HomeDatabaseNotFound

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.

Unknown label

Table 11. 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

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 12. 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.

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 13. 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

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 14. Notification details

Neo4j code

Neo.ClientNotification.Statement.AggregationSkippedNull

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 15. Notification details

Neo4j code

Neo.ClientNotification.Statement.RuntimeUnsupportedWarning

Title

This query is not supported by the chosen runtime.

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

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

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

Table 16. Notification details

Neo4j code

Neo.ClientNotification.Statement.RuntimeExperimental

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 17. Notification details

Neo4j code

Neo.ClientNotification.Statement.FeatureDeprecationWarning

Title

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

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.

  • Valid for Neo4j 5.5-5.25 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

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.

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
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 18. Notification details

Neo4j code

Neo.ClientNotification.Statement.FeatureDeprecationWarning

Title

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

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

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 *
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)
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)
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
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
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'}
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.

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

Deprecated features without a future replacement

Table 19. 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

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 20. 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

Feature deprecated with replacement - DeprecatedFormat

Table 21. 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 22. 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.

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.

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 23. 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

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.

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 24. 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.

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.

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.

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.

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.

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.

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.

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.

AuthProviderNotDefined

Table 25. 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

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.

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 26. 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

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.

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 27. 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

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 28. 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.

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 29. 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

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 there are no cordoned servers and, therefore, does not return it.

Table 30. 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

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 31. 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

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 32. Notification details

Neo4j code

Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists

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.

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)
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.

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

Index or constraint does not exist

Table 33. 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

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.

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 34. Notification details

Neo4j code

Neo.ClientNotification.Statement.SubqueryVariableShadowing

Title

Variable in subquery is shadowing a variable with the same name from the outer scope.

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

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 *
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 35. 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

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 36. 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

Status description

info: redundant optional subquery. The use of OPTIONAL is redundant as CALL is a unit subquery.

Classification

GENERIC

SeverityLevel

INFORMATION

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 37. Notification details

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.

Procedure or function execution warning

Table 38. 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

When matching on a relationship type expression that can never be satisfied, for example asking for zero, more than one or contradictory types.

Table 39. 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

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

Table 40. 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

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