Currently unsupported mandatory GQL features

Cypher® supports most mandatory GQL features, though there are a few instances where its current functionality diverges. The table below provides an overview of these GQL features and, where applicable, their functional equivalents in Neo4j.

Unlike optional GQL features, mandatory GQL features are not assigned a GQL feature ID code. The below table is instead listed in order of their appearance in the ISO/IEC 39075:2024(en) GQL Standard.

GQL Standard subclause Description Comment and similar Neo4j functionality

4.9.2

GQL-status objects

Exposing successful execution results, errors, exceptions, and warnings as GQL-status objects.

4.16.2

Boolean types

Cypher supports the Boolean literals TRUE and FALSE, but not UNKNOWN. Cypher also does not support Boolean type predicate tests.

7.1-7.3

Session management

GQL defines the following session commands: SESSION SET, SESSION RESET, and SESSION CLOSE. Neo4j offers session management through the driver session API.

8.1-8.4

Transaction management

GQL defines the following transaction commands: START TRANSACTION, COMMIT, and ROLLBACK.

Neo4j offers transaction management through the driver transaction API. Cypher Shell also offers specific commands to manage transactions.

11.1

Graph expressions

GQL defines the following graph reference values commands: CURRENT_GRAPH and CURRENT_PROPERTY_GRAPH.

13.3

SET statement

GQL’s SET statement has no order dependencies because all right-hand side operations are completed before any assignments occur. In Cypher’s SET, the order of rows can affect the outcome because changes made during execution may depend on the sequence of assignments. The only way to guarantee row order in Neo4j is to use ORDER BY.

15.1 & 15.2

CALL procedure statement & inline procedure CALL

  • GQL defines an OPTIONAL CALL statement, enabling optional procedure and subquery calling.

  • GQL implicitly imports variables. In Cypher, CALL subqueries require an explicit importing WITH clause.

16.19

OFFSET clause

Cypher only supports SKIP.

17.1

Schema reference

GQL defines an AT clause for selecting the current schema and the following schema selection options: HOME_SCHEMA and CURRENT_SCHEMA.

20.3

Value specification

GQL defines the SESSION_USER value expression, which enables accessing a user’s username within a query. In Cypher, current user details can be seen using the SHOW CURRENT USER command.

20.9

Aggregate functions

Cypher and GQL handle NULL values differently for aggregate functions when queries return 0 rows. For example, RETURN SUM(<expression>) on an empty table returns NULL in GQL, but in Cypher it returns 0.

20.24

Character string functions

GQL defines the UPPER and LOWER folds, which are not included in Cypher. However, Cypher includes two equivalent functions: toUpper() and toLower().

21.1

Names and variables

  • GQL allows for extended parameter identifiers. For example: RETURN $0hello is allowed in GQL but not Cypher.

  • GQL allows identifiers that are not variables to be delimited with both backticks and quotes. Cypher only allows backticks. For example: MATCH (n) RETURN n."a prop" is allowed in GQL but not Cypher.

21.3

<token>, <separator>, and <identifier>

GQL specifies a list of reserved words that cannot be used for unquoted variable names, labels, and property names. Cypher also specifies a list of reserved keywords, but it differs from GQL’s.