GQL Conformance Profile
This document captures implementation-defined behaviors and diagnostics relevant to ordering, pagination, and query execution. Geode maintains full ISO/IEC 39075:2024 GQL compliance; the profile explains how those requirements are met in practice.
Supported (highlights)
The highlights below are non-exhaustive and focus on areas with implementation-defined behavior or additional policy constraints.
- MATCH with:
- Node label and single property equality predicate (baseline)
- Single-hop expand and bounded path expansion
- OPTIONAL MATCH (null-preserving) semantics
- ORDER BY over RETURN items for MATCH result bindings, with deterministic comparator and JSON lexicographic tiebreak.
- LIMIT/OFFSET slicing post-ordering.
- Set operations: UNION/INTERSECT/EXCEPT (existing engine path).
- Data modification statements (CREATE/INSERT/UPDATE/DELETE/MERGE).
- Schema and type system behaviors (labels, property types, constraints, indexes).
- Functions and aggregations (scalar and aggregate semantics).
- Transaction semantics with ACID guarantees and MVCC isolation.
Deterministic Transport Parity Evidence (Curated Datasets)
- Curated varlen determinism dataset (
data/varlen_determinism) exercises equal-length path expansions to validate whole-row JSON lex tie-break and UA005/UA006 ordering consistency. - Transport parity (QUIC vs gRPC) verified for: simple RETURN ordering, set operations DISTINCT, projection slices, ORDER/LIMIT/OFFSET pagination, MATCH variable-length expansions, diagnostics (US001, IllegalOrderKey), CASE 3VL null semantics, and nulls-last ordering.
// CANARY: REQ=REQ-GQL-018; FEATURE=“Transport Parity VarLen Dataset Rows”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_018_TransportParity_VarLenDatasetRows; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-091; FEATURE=“Client Server Arg Passthrough”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_091_ClientServerArgPassthrough; OWNER=client; UPDATED=2025-09-24
// CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity Simple RETURN”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_ReturnOrdered; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity SetOp DISTINCT”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_SetOpDistinct; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity Projection Rows”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_ProjectionRows; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity ORDER/LIMIT/OFFSET Rows”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_OrderPaginationRows; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity MATCH VarLen Rows”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_MatchVarLenRows; OWNER=engine; UPDATED=2025-09-24
// CANARY: REQ=REQ-GQL-017; FEATURE=“VarLen Path Determinism UA005/UA006”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_VarLenDeterminism_QUIC; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“VarLen Path Determinism UA005/UA006”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_VarLenDeterminism_GRPC; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity Diagnostics US001”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_US001; OWNER=engine; UPDATED=2025-09-24
Policies and Diagnostics
- US001 (unordered pagination): LIMIT/OFFSET without explicit ORDER is rejected. Anchor: 16.18–16.19.
- IllegalOrderKey (policy): ORDER BY keys restricted to identifiers by default. Anchor: 14.10. // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity Diagnostics IllegalOrderKey”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_IllegalOrderKey; OWNER=engine; UPDATED=2025-09-24 // CANARY: REQ=REQ-GQL-017; FEATURE=“Transport Parity CASE 3VL”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_017_TransportParity_Case3VL; OWNER=engine; UPDATED=2025-09-24
- Null ordering policy: implementation-defined default; see Requirements — binary collation, nulls-last policy (flagger exposed). // CANARY: REQ=REQ-GQL-024; FEATURE=“Nulls-Last Ordering Parity”; ASPECT=Docs; STATUS=TESTED; TEST=TestCANARY_REQ_GQL_024_TransportParity_NullsLastOrder; OWNER=engine; UPDATED=2025-09-24
- UA005/UA006 (bounded path tie-break determinism): Shorter paths preferred; ties broken deterministically by bound IDs and JSON-lex row key. Transport-parity enforced by tests.
Safety Guards (Execution Limits)
The engine enforces protective upper bounds during MATCH evaluation to prevent excessive memory or time consumption. These are implementation-defined and surfaced via diagnostics (ExecutionGuardTrip) when tripped; partial results MAY be returned (truncated) per STEAL/NO-FORCE policy while maintaining deterministic ordering of emitted rows.
- Default
max_results: 100,000 (bindings) - Default
max_frontier: 100,000 (active frontier nodes / partial paths in BFS) - Default
max_hops_limit: 64 - Diagnostic code:
ExecutionGuardTrip - Policy: Guard trip preserves already produced bindings and sets deterministic ordering
// CANARY: REQ=REQ-GQL-017; FEATURE=“MatchSafetyGuardsPolicy”; ASPECT=Docs; STATUS=TESTED; TEST=geodetestlab/specs/gql_pattern_matching_comprehensive.yml; TEST=TestCANARY_REQ_GQL_017_MatchGuardTrips; OWNER=engine; UPDATED=2025-09-25 // CANARY: REQ=REQ-GQL-017; FEATURE=“MatchFrontierGuard”; ASPECT=Docs; STATUS=TESTED; TEST=geodetestlab/specs/gql_pattern_matching_comprehensive.yml; TEST=TestCANARY_REQ_GQL_017_MatchGuardTrips; OWNER=engine; UPDATED=2025-09-25 // CANARY: REQ=REQ-GQL-017; FEATURE=“MatchResultGuard”; ASPECT=Docs; STATUS=TESTED; TEST=geodetestlab/specs/gql_pattern_matching_comprehensive.yml; TEST=TestCANARY_REQ_GQL_017_MatchGuardTrips; OWNER=engine; UPDATED=2025-09-25
Flagger
- I:IllegalOrderKeyPolicy=ident-only
- U:US001=enforced
- U:OrderTiebreak=LexJSON
- U:PathTieBreak=UA005/UA006
Implementation-defined
- Default collation: binary; Unicode collation optional.
- Null ordering policy: default nulls-last; nulls-first via env override.
Wire Mapping: ExecutionGuardTrip Additional Status
// CANARY: REQ=REQ-GQL-017; FEATURE=“MatchGuardStatusWireMapping”; ASPECT=Docs; STATUS=TESTED; TEST=geodetestlab/specs/gql_pattern_matching_comprehensive.yml; TEST=TestCANARY_REQ_GQL_017_MatchGuardStatusWireMapping; OWNER=engine; UPDATED=2025-09-24
When a safety guard trips during MATCH evaluation (result/frontier/hops), the server emits primary success frames with status_class 00000 and includes ExecutionGuardTrip inside the additional_statuses array of the SchemaDefinition frame and (for redundancy) the first DataPage frame. This indicates a partial result truncation event without elevating to an error-class status. Clients SHOULD surface a warning and MAY retry with adjusted guard thresholds. No change to exit codes (remain 0).
Environment Overrides (Test / Diagnostics)
Guard threshold overrides (test/support use only):
- CLI (preferred for determinism):
geode serve --match-max-results <N>lowers themax_resultsguard at process start.geode serve --match-max-frontier <N>lowers themax_frontierguard at process start.
- Environment (legacy/fallback):
GEODE_MATCH_MAX_RESULTSandGEODE_MATCH_MAX_FRONTIERmay still be set; if both CLI and env are provided, the CLI flags win.
Production deployments SHOULD leave these unset (defaults: 100,000). Frames emitted under overridden thresholds still carry the additional status for transparency.