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 (any changes to them will be breaking), changes to status descriptions associated with these codes are not breaking and may happen at any time. For this reason, parsing the status descriptions or incorporating them into scripts is not recommended. |
PERFORMANCE
notifications
Performance notifications are returned whenever the query uses costly operations and the performance may be improved by changing the query or adding an index.
Cartesian product
This notification is returned when there is a Cartesian product in the plan.
Neo4j code |
|
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 ( |
Category |
|
GQLSTATUS code |
|
Status description |
info: cartesian product.
The disconnected patterns |
Classification |
|
SeverityLevel |
|
- 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.
Neo4j code |
|
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 |
|
GQLSTATUS code |
|
Status description |
info: unbounded variable length pattern. The provided pattern |
Classification |
|
SeverityLevel |
|
- 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.
Neo4j code |
|
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 |
Category |
|
GQLSTATUS code |
|
Status description |
info: exhaustive shortest path.
The query runs with exhaustive shortest path due to the existential predicate(s) |
Classification |
|
SeverityLevel |
|
- 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 useWITH
to separate theMATCH
from the existential predicate(s). - Suggestions for improvement
-
Separate the predicate by introducing a
WITH
after theMATCH
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 theMATCH
containing the shortest path from the existential predicates on that path. - Suggestions for improvement
-
Separate the predicate by introducing a
WITH
after theMATCH
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.
Neo4j code |
|
Title |
Adding a schema index may speed up this query. |
Description |
Using |
Category |
|
GQLSTATUS code |
|
Status description |
info: no applicable index.
|
Classification |
|
SeverityLevel |
|
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 withMATCH
orMERGE
on a label that does not have an index may result in long execution times. Consider adding an index for labelPerson
. - 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 aMATCH
orMERGE
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.
Neo4j code |
|
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 |
Category |
|
GQLSTATUS code |
|
Status description |
info: eager operator.
The query execution plan contains the |
Classification |
|
SeverityLevel |
|
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 withEager
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
Neo4j code |
|
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 ( |
Category |
|
GQLSTATUS code |
|
Status description |
info: dynamic property.
An index exists on label/type(s) |
Classification |
|
SeverityLevel |
|
- 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, ifprop
is equal toname
, 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, ifprop
is equal toname
, the following query would be able to use the index:MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;
- 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 tosince
, 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 tosince
, 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.
Neo4j code |
|
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 |
|
GQLSTATUS code |
|
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 |
|
SeverityLevel |
|
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
Neo4j code |
|
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. ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: join hint unfulfillable. Unable to create a plan with |
Classification |
|
SeverityLevel |
|
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 theOPTIONAL 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 theOPTIONAL 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
Neo4j code |
|
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 ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: hinted index not found.
Unable to create a plan with |
Classification |
|
SeverityLevel |
|
- 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.
- 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
Neo4j code |
|
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. ( |
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - home database not found.
The database |
Classification |
|
SeverityLevel |
|
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
Neo4j code |
|
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 ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: unknown label.
The label |
Classification |
|
SeverityLevel |
|
- 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
Neo4j code |
|
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 ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: unknown relationship type.
The relationship type |
Classification |
|
SeverityLevel |
|
- 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
Neo4j code |
|
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 ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: unknown property key.
The property |
Classification |
|
SeverityLevel |
|
- 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
Neo4j code |
|
Title |
The query contains an aggregation function that skips null values. |
Description |
The query contains an aggregation function that skips null values. |
Category |
|
GQLSTATUS code |
|
Status description |
warn: null value eliminated in set function. |
Classification |
|
SeverityLevel |
|
- 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
Neo4j code |
|
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.
( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: unsupported runtime.
The query cannot be executed with |
Classification |
|
SeverityLevel |
|
- 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 includingShowIndexes
, 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. |
Neo4j code |
|
Title |
This feature is experimental and should not be used in production systems. |
Description |
You are using an experimental feature ( |
Category |
|
SeverityLevel |
|
- 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
Neo4j code |
|
Title |
This feature is deprecated and will be removed in future versions. |
Descriptions |
|
Category |
|
GQLSTATUS code |
|
Status description |
warn: feature deprecated. $msg |
Classification |
|
SeverityLevel |
|
- 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
)
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. |
- 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
- 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 identifiermy\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 identifiermy\u0085identifier
.
Feature deprecated with a replacement
Neo4j code |
|
Title |
This feature is deprecated and will be removed in future versions. |
Descriptions |
|
Category |
|
GQLSTATUS code |
|
Status description |
warn: feature deprecated with replacement.
|
Classification |
|
SeverityLevel |
|
|:
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 *
- 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 bySET a = properties(b)
. - Suggestions for improvement
-
Use the
properties()
function to get all properties fromb
.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 fromb
.MATCH (a)-[]-(b) SET a = properties(b)
- 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 bySET a += properties(r)
. - Suggestions for improvement
-
Use the
properties()
function to get all properties fromr
.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 fromr
.MATCH (a)-[r]-(b) SET a += properties(r)
- 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 byshortestPath((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
andallShortestPaths
with fixed length relationships is deprecated and will be removed in a future version. Please use a path with a length of1 [r*1..1]
instead or aMatch
with alimit
. - 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
-
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 byruntime=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
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 bytext-2.0
. - Suggestions for improvement
-
Update the option
indexProvider
with the valuetext-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 usetext-2.0
instead. - Suggestions for improvement
-
Update the option
indexProvider
with the valuetext-2.0
.CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}
CALL cdc.query
- Returned GQLSTATUS code
-
01N01
- Returned status description
-
warn: feature deprecated with replacement.
cdc.query
is deprecated. It is replaced bydb.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.
- Query
-
MATCH (a) RETURN id(a)
- Returned GQLSTATUS code
-
01N01
- Returned status description
-
warn: feature deprecated with replacement.
id
is deprecated. It is replaced byelementId()
. - 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)
- 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
- 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
+
- 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)
+
- 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)
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 byWHEN `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
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 byWHEN `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
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 byWHEN `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
[]
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 byWHEN `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
[]
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 byWHEN `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
Neo4j code |
|
Title |
This feature is deprecated and will be removed in future versions. |
Descriptions |
|
Category |
|
GQLSTATUS code |
|
Status description |
warn: feature deprecated without replacement.
|
Classification |
|
SeverityLevel |
|
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
Neo4j code |
|
Title |
This feature is deprecated and will be removed in future versions. |
Description |
The query used a deprecated field from a procedure. ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: procedure field deprecated.
|
Classification |
|
SeverityLevel |
|
Feature deprecated with replacement - DeprecatedFormat
Neo4j code |
|
Title |
The client made a request for a format which has been deprecated. |
Description |
The requested format has been deprecated. ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: feature deprecated with replacement.
|
Classification |
|
SeverityLevel |
|
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
Neo4j code |
|
Title |
|
Descriptions |
|
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - role or privilege not assigned.
|
Classification |
|
SeverityLevel |
|
*<command>
and cmd
could be either the full command given by the user or a subset of the given command.
- 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.
- 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
Neo4j code |
|
Title |
|
Descriptions |
|
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - role or privilege already assigned.
|
Classification |
|
SeverityLevel |
|
*<command>
and cmd
could be either the full command given by the user or a subset of the given command.
- 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.
- 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
Neo4j code |
|
Title |
|
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 |
|
GQLSTATUS code |
|
Status description |
warn: impossible revoke command. |
Classification |
|
SeverityLevel |
|
*<command>
and cmd
could be either the full command given by the user or a subset of the given command.
- 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.
- 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.
- 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.
- 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. Databaseneo3j
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.
- 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. Databaseneo3j
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.
- 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.
- 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
Neo4j code |
|
Title |
The auth provider is not defined. |
Description |
The auth provider |
Category |
|
GQLSTATUS code |
|
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 |
|
SeverityLevel |
|
- 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 defineunknownProvider
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
anddbms.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 defineunknownProvider
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
anddbms.security.authorization_providers
.
- 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 defineunknownProvider
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
anddbms.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 defineunknownProvider
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
anddbms.security.authorization_providers
.
ExternalAuthNotEnabled
Neo4j code |
|
Title |
External auth for user is not enabled. |
Description |
Use setting |
Category |
|
GQLSTATUS code |
|
Status description |
warn: external auth disabled. Use the setting 'dbms.security.require_local_user' to enable external auth. |
Classification |
|
SeverityLevel |
|
- 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.
- 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
Neo4j code |
|
Title |
|
Description |
Server |
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - server already enabled.
|
Classification |
|
SeverityLevel |
|
- 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. Server123e4567-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
Neo4j code |
|
Title |
|
Description |
Server |
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - server already cordoned.
|
Classification |
|
SeverityLevel |
|
- 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. Server123e4567-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
Neo4j code |
|
Title |
|
Description |
No databases were reallocated. No better allocation is currently possible. |
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - no databases reallocated.
|
Classification |
|
SeverityLevel |
|
- 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
andbar
, 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
andbar
, server 2 hosts onlyfoo
, and server 3 hosts no databases. Then, a better allocation would movefoo
from server 1 to server 3, but if server 3 has the constraintdeniedDatabases:['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
andbar
, 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
andbar
, server 2 hosts onlyfoo
, and server 3 hosts no databases. Then, a better allocation would movefoo
from server 1 to server 3, but if server 3 has the constraintdeniedDatabases:['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.
Neo4j code |
|
Title |
Cordoned servers existed when making an allocation decision. |
Description |
Server(s) |
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - cordoned servers existed during allocation.
Cordoned servers existed when making an allocation decision.
Server(s) |
Classification |
|
SeverityLevel |
|
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
Neo4j code |
|
Title |
|
Description |
The requested topology matched the current topology. No allocations were changed. |
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - requested topology matched current topology.
|
Classification |
|
SeverityLevel |
|
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
Neo4j code |
|
Title |
|
Description |
|
Description |
|
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - index or constraint already exists.
|
SeverityLevel |
|
*<command>
and cmd
could be either the full command given by the user or a subset of the given command.
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.
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)
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.
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
Neo4j code |
|
Title |
|
Description |
|
Category |
|
GQLSTATUS code |
|
Status description |
note: successful completion - index or constraint does not exist.
|
SeverityLevel |
|
- 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.
- 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
Neo4j code |
|
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. ( |
Category |
|
GQLSTATUS code |
|
Status description |
info: subquery variable shadowing.
The variable |
Classification |
|
SeverityLevel |
|
- 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. UseWITH 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
Neo4j code |
|
Title |
The use of |
Description |
The use of |
Category |
|
GQLSTATUS code |
|
Status description |
info: redundant optional procedure. The use of |
Classification |
|
SeverityLevel |
|
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 asCALL 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 asCALL 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
Neo4j code |
|
Title |
The use of |
Description |
The use of |
Category |
|
GQLSTATUS code |
|
Status description |
info: redundant optional subquery. The use of |
Classification |
|
SeverityLevel |
|
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 asCALL
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
Neo4j code |
|
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. ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: parameter missing.
The query plan cannot be cached and is not executable without |
Classification |
|
SeverityLevel |
|
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
Neo4j code |
|
Title |
The query used a procedure that generated a warning. |
Description |
The query used a procedure that generated a warning. ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: procedure execution warning.
The procedure |
Classification |
|
SeverityLevel |
|
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.
Neo4j code |
|
Title |
The query contains a relationship type expression that cannot be satisfied. |
Description |
Relationship type expression cannot possibly be satisfied. ( |
Category |
|
GQLSTATUS code |
|
Status description |
warn: unsatisfiable relationship type expression.
The expression |
Classification |
|
SeverityLevel |
|
- 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
Neo4j code |
|
Title |
The query returns no results because a relationship variable is bound more than once. |
Description |
|
Category |
|
GQLSTATUS code |
|
Status description |
warn: repeated relationship reference. |
Classification |
|
SeverityLevel |
|
- 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 labelB
: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 labelB
:MATCH (:A)-[r]->(:B) RETURN r
- 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)