Value type declarations
Value types appear in graph definitions, session declarations and parser-only casts/type predicates. The parser’s type vocabulary is broader than the executable value representation.
| Family | Grammar examples |
|---|---|
| Boolean | BOOLEAN, BOOL |
| Integers and numerics | INTEGER, BIG INTEGER, INT(64), DECIMAL(8,2), FLOAT(24,2), DOUBLE |
| Characters and bytes | STRING, VARCHAR(64), CHAR(16), BYTES(16), VARBINARY(512) |
| Temporal | DATE, TIME, TIMESTAMP, LOCAL TIME, TIME WITH TIME ZONE |
| Lists and arrays | LIST<STRING>, STRING LIST, INTEGER ARRAY[3] |
| Records | RECORD, RECORD {name STRING}, {name STRING} |
| Dynamic unions | INTEGER | STRING, ANY<STRING | INTEGER> |
| Graph values | PATH, ANY NODE, EDGE, GRAPH, BINDING TABLE |
| General property values | PROPERTY VALUE |
Declarations can apply NOT NULL. A union accepts null only when its members permit null; combining exclusively non-null types does not create a nullable union.
SESSION SET VALUE $limit INTEGER NOT NULL = 10;SESSION SET VALUE $names LIST<STRING> = ['Alice', 'Bob'];RETURN $limit AS limit, $names AS names;Query scalars currently normalize integer and approximate numeric values to Int64/Float64 after supported declaration validation. Decimal literals are f64, not an exact decimal implementation. A DECIMAL or NUMERIC session parameter accepts an integer or finite decimal literal that fits the declared precision and scale (DECIMAL(p) means scale 0), then reads back as Float64. CHAR(n) limits a character string to n characters, the same maximum VARCHAR(n) and STRING(n) enforce; a shorter string is valid. Temporal values, arbitrary unions and structured references do not automatically become executable query scalars because their types parse.
Graph definitions preserve constraints including approximate-numeric scale. Unsupported nesting is rejected before durable publication so a committed definition remains recoverable.