ISO GQL Coverage Statement

This page states which features of ISO/IEC 39075:2024 (GQL) ArcadeDB supports, supports in part, or does not support. It describes ArcadeDB 26.10.1 and later; rows marked "since 26.10.2" describe a change in that release.

ArcadeDB has no separate GQL engine. GQL-aligned syntax runs in the native OpenCypher engine (query language opencypher), which implements the Cypher 25 grammar, the GQL-aligned revision of Cypher. GQL and Cypher 25 statements can be mixed freely in the same query, and no setting is needed to enable them.

Status values used below:

  • Supported: the feature runs with GQL semantics; any deviation is listed in the Notes column.

  • Partial: part of the feature runs; the Notes column says which part.

  • Not supported: the feature is not available.

Conformance testing

No public conformance test suite exists for ISO GQL yet, so ArcadeDB publishes no GQL suite results. The OpenCypher engine is validated against the official openCypher Technology Compatibility Kit on every build: 3,897 scenarios, 97.8% passing, 0 failing, 84 skipped. See Cypher Compatibility Matrix for the breakdown.

Graph pattern matching

GQL feature Status Notes

Node and edge patterns, directed and undirected (-->, <--, --)

Supported

The GQL tilde forms for undirected edges (~[ ]~) are not supported; use -[ ]-.

Label expressions: &, |, !, %, parentheses, IS Label

Supported

For example (n:(Person&!Admin)|Admin), (n IS Person & Employee), -[r:!KNOWS]->. On variable-length relationships since 26.10.2.

Element pattern WHERE (inline predicates in node and edge patterns)

Supported

(n:Person WHERE n.age > 35), -[r WHERE r.weight > 1]->.

Quantified edges: {m,n}, {n}, {,n}, +, *

Supported

-[:KNOWS]->{1,3}. The quantifier {0} is refused.

Quantified path patterns: ( ... ){m,n}

Partial

Groups with fixed-length inner patterns and an inner WHERE are supported; inner variables bind as lists. The inner WHERE is checked as the WHERE of a clause is: an undefined variable or an aggregate function in it is refused, as in Neo4j (since 26.11.1). It can read the variables of the group and the one of the group’s right boundary, which stands for the vertex the whole group ends on (((x)-[:R]→(y) WHERE y.id ⇐ b.id){1,3} (b)); it read null before 26.11.1, so the group matched nothing. An undirected hop inside a group matches a self-loop once, as the plain and the variable-length patterns do (since 26.11.1; it matched it twice before). Not supported inside a group: variable-length relationships, path variables, nested groups, parameterized property maps and dynamic labels.

Parenthesized path pattern with WHERE and no quantifier

Supported

Since 26.10.2, for example MATCH ((a)-[:KNOWS]→(b) WHERE a.name = 'A'). In 26.10.1 and earlier it fails with a type error.

Path variables (p = …​)

Supported

A path variable over a quantified group binds one path, as in Neo4j, since 26.10.2. In 26.10.1 and earlier, over a group with no outer hops, it bound a list of paths.

Multiple path patterns and multiple MATCH statements

Supported

OPTIONAL MATCH

Supported

Path modes, path search prefixes and match modes

GQL feature Status Notes

Path mode TRAIL

Supported

The default, as in GQL. See Path Mode.

Path mode WALK

Supported

The pattern needs an upper bound.

Path mode ACYCLIC

Supported

Path mode SIMPLE

Not supported

Path search prefix ALL / ALL PATHS

Supported

The default behavior.

Path search prefixes ANY, ANY k, ANY SHORTEST, ALL SHORTEST, SHORTEST k, SHORTEST k GROUPS

Not supported

Use the shortestPath() and allShortestPaths() functions. Since 26.10.2 these prefixes are refused with an error; in 26.10.1 and earlier they are accepted but not applied, so the query returns every matching path.

Match mode DIFFERENT EDGES

Supported

The default, as in GQL (written DIFFERENT RELATIONSHIPS in Cypher 25). The GQL keyword DIFFERENT EDGES is not accepted.

Match mode REPEATABLE ELEMENTS

Not supported

Refused with an error since 26.10.2; in 26.10.1 and earlier accepted but not applied.

Query composition

GQL feature Status Notes

RETURN, RETURN DISTINCT

Supported

Grouping is implicit (Cypher style); the GQL GROUP BY clause and SELECT statement are not supported.

FILTER [WHERE]

Supported

FOR x IN list

Supported

Equivalent to UNWIND. WITH ORDINALITY / WITH OFFSET are not supported.

LET

Supported

Since 26.10.2. See LET. In 26.10.1 and earlier use WITH *, expr AS x.

ORDER BY, OFFSET / SKIP, LIMIT

Supported

NULLS FIRST / NULLS LAST are not supported.

FINISH

Supported

NEXT (statement chaining)

Not supported

Refused with an error. Use WITH.

UNION, UNION ALL, UNION DISTINCT

Supported

See UNION.

EXCEPT, INTERSECT, OTHERWISE

Not supported

Conditional query WHEN …​ THEN …​ ELSE (Cypher 25)

Supported

Since 26.10.2, as a whole statement. See Conditional query.

USE graph

Partial

One ArcadeDB database is one graph: since 26.10.2 USE accepts the current database and refuses any other name. In 26.10.1 and earlier it is ignored.

Data modification

GQL feature Status Notes

INSERT

Supported

Nodes and edges, with & and IS labels, also after MATCH. Variable-length edges are refused.

SET (properties, +=, labels, SET n IS Label)

Supported

REMOVE

Supported

DELETE, DETACH DELETE, NODETACH DELETE

Supported

DELETE and NODETACH DELETE refuse a node that still has edges.

CREATE, MERGE

Supported

Cypher extensions, not part of GQL.

Predicates and expressions

GQL feature Status Notes

IS [NOT] TYPED <type>, IS ::, ::

Partial

Supported for the types marked Supported under Value types. Union types, RECORD, DECIMAL and unsigned types are not supported. See IS TYPED data types.

IS [NOT] NULL

Supported

IS [NOT] LABELED

Not supported

Use n:Label or n IS Label.

IS [NOT] DIRECTED, IS SOURCE OF, IS DESTINATION OF

Not supported

IS DIRECTED is refused with an error since 26.10.2 (every relationship is directed); in 26.10.1 and earlier it is read as a label test.

IS [NOT] [NFC|NFD|NFKC|NFKD] NORMALIZED

Supported

Since 26.10.2; NFC when no form is written, null for a value that is not a string. In 26.10.1 and earlier use s = normalize(s).

ALL_DIFFERENT(), SAME(), PROPERTY_EXISTS()

Not supported

EXISTS { ... }, COUNT { ... }, COLLECT { ... } subqueries

Supported

CASE (simple and searched), NULLIF, COALESCE

Supported

Comparison, STARTS WITH, ENDS WITH, CONTAINS, string concatenation ||

Supported

Three-valued logic

Supported

UNKNOWN is represented as null. See Three-valued logic.

CAST(x AS type)

Not supported

Use toInteger(), toFloat(), toString(), toBoolean() and their …​OrNull() variants.

Value types

GQL type Status Notes

STRING, BOOLEAN

Supported

Signed integers: INT8, INT16, INT32, INT64, INTEGER

Supported

Stored at the declared width. An integer literal is INT64.

Unsigned integers (UINT8 …​ UINT64)

Not supported

FLOAT32, FLOAT64, FLOAT

Supported

DECIMAL

Not supported

DATE, LOCAL TIME, ZONED TIME, LOCAL DATETIME, ZONED DATETIME, DURATION

Supported

Including the TIMESTAMP / TIME WITH[OUT] TIME ZONE spellings. Typed literals such as DATE '2026-01-01' are not supported; use date('2026-01-01').

LIST<T>, NODE, EDGE / RELATIONSHIP, ANY, NOTHING, NULL

Supported

PATH

Supported

IS TYPED PATH and valueType() recognise paths, shortestPath() ones included, since 26.10.2.

RECORD

Not supported

Use maps.

BYTES

Not supported

Functions

GQL functions Status Notes

String: UPPER, LOWER, TRIM (with LEADING / TRAILING / BOTH), BTRIM, LTRIM, RTRIM, SUBSTRING, LEFT, RIGHT, NORMALIZE, CHAR_LENGTH, CHARACTER_LENGTH

Supported

String: OCTET_LENGTH, BYTE_LENGTH

Not supported

Numeric: ABS, FLOOR, CEIL / CEILING, SQRT, EXP, LN, LOG, LOG10, trigonometric and hyperbolic functions

Supported

Numeric: MOD, POWER

Not supported

Use the % and ^ operators.

Aggregates: COUNT, SUM, AVG, MIN, MAX (with DISTINCT / ALL), COLLECT_LIST, PERCENTILE_CONT, PERCENTILE_DISC

Supported

Aggregates: STDDEV_SAMP, STDDEV_POP

Not supported

Use stDev() and stDevP().

Graph: ELEMENT_ID, PATH_LENGTH

Partial

elementId() and path_length() are supported; the element_id() spelling is not.

List: CARDINALITY, TRIM_ARRAY, ELEMENTS

Not supported

Use size() and list slicing.

Temporal constructors: date(), local_time(), zoned_time(), local_datetime(), zoned_datetime(), duration(), duration_between()

Supported

CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP

Not supported

Use date(), time() and datetime() without arguments.

Transactions and sessions

GQL feature Status Notes

START TRANSACTION, COMMIT, ROLLBACK

Supported

The access modes READ ONLY / READ WRITE are not supported. The optional ISOLATION clause is an ArcadeDB extension. See Transaction control.

SESSION SET $param = value, SESSION RESET, SESSION CLOSE

Partial

Available with a server session (HTTP session or Bolt), not in embedded mode. SESSION SET SCHEMA, SESSION SET GRAPH and SESSION SET TIME ZONE are not supported. See Session management.

Catalog, graph types and diagnostics

GQL feature Status Notes

CREATE GRAPH, DROP GRAPH

Not supported

One ArcadeDB database is one graph. Databases are created through the server API, the console or Studio.

CREATE GRAPH TYPE, open and closed graph types, GQL node and edge type definitions

Not supported

ArcadeDB has a native schema, defined with SQL DDL (CREATE VERTEX TYPE, CREATE EDGE TYPE, CREATE PROPERTY). In Cypher, CREATE CONSTRAINT …​ IS TYPED / IS NOT NULL / IS UNIQUE / IS KEY declares property types and constraints.

GQLSTATUS codes

Not supported

Errors carry Neo4j-style classifications; over Bolt they are reported as Neo.ClientError.* codes.