Skip to main content

Module ast

Module ast 

Source
Expand description

AST for the PG-dialect subset SPG accepts in v0.2.

Display is implemented so that for any AST a produced by crate::parser, re-parsing format!("{a}") yields a structurally equal AST. Binary and unary operators always emit parentheses to remove any precedence ambiguity — round-trip safety wins over prettiness.

Structs§

AlterIndexStatement
AlterSequenceStatement
v7.17.0 — ALTER SEQUENCE AST node.
AlterTableStatement
v6.7.2 — ALTER TABLE t SET <setting> = <value>. v6.7.2 ships the single hot_tier_bytes setting; later v6.7.x sub-versions can add more SET subjects without changing the dispatch shape.
ColumnDef
ColumnName
CreateDomainStatement
v7.17.0 Phase 1.5 — CREATE DOMAIN AST.
CreateFunctionStatement
v7.12.4 — CREATE [OR REPLACE] FUNCTION. v7.12.4 ships RETURNS TRIGGER LANGUAGE plpgsql as the primary use case (the row-level trigger body the CREATE TRIGGER below references). Non-trigger user-defined functions parse but error at execution time with a clear unsupported message; that surface lands in v7.12.5+.
CreateIndexStatement
CreateMaterializedViewStatement
v7.17.0 Phase 1.3 — CREATE MATERIALIZED VIEW AST node.
CreatePublicationStatement
v6.1.2 — CREATE PUBLICATION AST node. The scope field uses the PublicationScope shape. v6.1.2 only accepted AllTables; v6.1.3 unlocks the ForTables / AllTablesExcept variants by flipping the parser gate (no AST migration).
CreateSequenceStatement
v7.17.0 — CREATE SEQUENCE AST node. See Statement::CreateSequence.
CreateSubscriptionStatement
v6.1.4 — CREATE SUBSCRIPTION AST node. v6.1.4 ships a single fixed-shape DDL; the WITH-clause options PG supports (enabled, slot_name, streaming, binary) are out of scope for v6.1.4 — enabled defaults to true and there are no other knobs to set in v6.1.x.
CreateTableStatement
CreateTriggerStatement
v7.12.4 — CREATE [OR REPLACE] TRIGGER. Always row-level (FOR EACH ROW) in v7.12.4 — statement-level triggers parse but the executor refuses them. WHEN (cond) clauses are out of scope; the trigger function can short-circuit on a leading IF inside its body once v7.12.5 lands IF.
CreateTypeStatement
v7.17.0 Phase 1.4 — CREATE TYPE AST.
CreateUserStatement
CreateViewStatement
v7.17.0 Phase 1.2 — CREATE VIEW AST node.
Cte
DeleteStatement
DELETE FROM <table> [WHERE cond]. v4.4 — removes matched rows from the active catalog and prunes them from every index.
ExplainStatement
ForeignKeyConstraint
v7.6.0 — A single FOREIGN KEY constraint. Both column-level REFERENCES and table-level FOREIGN KEY (...) REFERENCES ... parse into this shape — the column-level form has a single-entry columns / parent_columns.
FromClause
FROM clause shape. v1.10 accepts a primary table plus a flat list of joined peers — FROM a [, b]* [INNER|LEFT] JOIN c ON expr .... The joins evaluate left-associatively in nested-loop order.
FromJoin
FunctionArg
v7.12.4 — one positional argument to a CREATE FUNCTION.
InsertStatement
MergeStatement
v7.17.0 Phase 3.P0-42 — SQL:2003 / PG 15+ MERGE statement. One WHEN clause fires per source row depending on whether the on condition matched any target row(s); the executor walks clauses in declaration order and fires the first whose matched kind and optional condition are both satisfied.
MergeWhenClause
OnConflictClause
v7.9.7 — INSERT upsert clause: ON CONFLICT (target) DO action.
OrderBy
PartitionBySpec
v7.37.6-B — PARTITION BY <kind> (key_columns…) parent suffix. v7.37.6-B only RANGE is recognised; the enum keeps space for future LIST / HASH without breaking the public AST shape.
PartitionOfSpec
v7.37.6-B — PARTITION OF <parent> <bounds> child suffix. Bounds is either a half-open range (FOR VALUES FROM (a) TO (b)) or the catch-all DEFAULT partition.
PlPgSqlBlock
v7.12.4 — PL/pgSQL BEGIN ... END; block. v7.12.6 widens from assignment + return to a real-PL/pgSQL surface: DECLARE-block local variables, IF/ELSIF/ELSE/END IF control flow, RAISE diagnostics, and embedded SQL statements that execute through the regular engine path. The remaining v7.12.x carve-out is loops (LOOP/WHILE/FOR), which mailrs’s trigger doesn’t need but other PG customers may; deferred to a future minor release.
PlPgSqlDeclare
v7.12.6 — single DECLARE entry: variable name + declared type + optional initialiser. Variables default to SQL NULL when no init is given (matches PG).
SelectStatement
SequenceOptions
v7.17.0 — option grammar shared by CREATE / ALTER SEQUENCE. All fields are optional. min_value/max_value carry Some(SeqBound::NoBound) for NO MINVALUE / NO MAXVALUE.
TableRef
UpdateStatement
UPDATE <table> SET col = expr [, ...] [WHERE cond]. v4.4 — the engine evaluates expr per matched row in the table’s row order and rewrites cells in place. Indexed columns are dropped + re- inserted into the affected B-tree on each row change.
WindowFrame
v4.20 explicit window frame: ROWS|RANGE BETWEEN <bound> AND <bound>. end is None for the shorthand “ROWS ” where end implicitly = CURRENT ROW.

Enums§

AlterIndexTarget
AlterTableTarget
AssignTarget
BinOp
CastTarget
Collation
v7.17.0 Phase 2.5 — text collation classification surfaced from the SQL parser. Mirrors spg_storage::Collation; the engine bridges between the two at CREATE TABLE time.
ColumnTypeName
SQL-level type names. The mapping to the storage runtime’s DataType happens in spg-engine — keeping spg-sql free of storage deps.
CteBody
v7.37.43-T4.4 — CTE body. Read-only (Select) or data-modifying (Insert / Update / Delete with optional RETURNING). The data-modifying variants must carry a RETURNING projection for the outer query to reference the CTE alias by; an empty RETURNING is only valid if no outer reference materialises (rare — typically caught at planning).
Expr
ExtractField
FkAction
v7.6.0 — Referential action for ON DELETE / ON UPDATE.
FrameBound
FrameKind
FunctionArgMode
FunctionArgType
FunctionBody
FunctionReturn
IndexMethod
IsolationLevel
v7.38 轴 4 — PG-standard isolation levels. SPG accepts all four at parse time and tracks the selected value on the engine. The actual semantic differentiation (REPEATABLE READ snapshot, SERIALIZABLE SSI) lands in the v7.38 isolation framework train; today every level reads as effective READ COMMITTED (which is also how PG treats READ UNCOMMITTED — it silently upgrades to READ COMMITTED). Default = ReadCommitted.
JoinKind
LimitExpr
v7.9.24 — LIMIT / OFFSET value. Integer literal at parse time or a placeholder $N resolved during extended-query Bind. mailrs migration follow-up H2.
Literal
MergeAction
MergeMatched
NullTreatment
v6.4.2 — null treatment on LAG / LEAD / FIRST_VALUE / LAST_VALUE. PG / ANSI default is Respect — NULLs participate in the offset walk. Ignore causes the function to skip NULL values in the argument expression, returning the next non-NULL.
OnConflictAction
v7.9.7 — action on conflict.
PartitionKindAst
PartitionOfBoundsAst
PlPgSqlStmt
PublicationScope
v6.1.2 — Which tables a publication covers. v6.1.3 (this commit) flips the parser gate for the ForTables / AllTablesExcept variants — the on-disk shape, snapshot serialisation, and the AST round-trip Display path were already in place in v6.1.2 so this is a parser-only widening.
RaiseLevel
RangeKindAst
v7.17.0 Phase 3.P0-38 — PG range element kind. Mirrors spg_storage::RangeKind; we keep it spg-sql-local so the AST crate doesn’t depend on storage. Bridged at engine boundary.
ReturnTarget
SelectItem
SeqBound
v7.17.0 — MINVALUE n / NO MINVALUE.
SequenceDataType
v7.17.0 — narrow type for AS clause of CREATE SEQUENCE.
SequenceOwnedBy
v7.17.0 — OWNED BY {table.col | NONE}.
SetValue
v7.12.1 — payload of a SET right-hand side. PG syntax accepts a string literal, an identifier (often a config name), an integer/float, or the bare DEFAULT keyword.
Statement
TableConstraint
v7.9.18 — table-level constraint at the end of a CREATE TABLE column list. Either a composite PRIMARY KEY or a UNIQUE (single- or multi-column).
TriggerEvent
TriggerForEach
TriggerSelector
v7.16.1 — target of ALTER TABLE … { ENABLE | DISABLE } TRIGGER …. PG also accepts USER, REPLICA, ALWAYS modifiers; v7.16.1 ships the two shapes pg_dump actually emits (ALL + per-name) — the rest parse-accept as Named shouldn’t surface from a dump.
TriggerTiming
TypeKind
v7.17.0 Phase 1.4 — flavour of the new type. Only ENUM is implemented; the variant set is open so Phase 1.5 (DOMAIN) and later (COMPOSITE, RANGE) can land without an AST shape migration.
UnOp
UnionKind
VecEncoding
In-cell encoding for a VECTOR(N) column. v6.0.1 added the optional USING <encoding> clause; omitting it keeps the pre-v6 F32 default. Sq8 quantises each cell to a per-vector affine (min, max, [u8; dim]) triple (4× compression). F16 (v6.0.3, DDL keyword HALF) stores each element as IEEE-754 binary16 (2× compression, ~3 decimal digits of precision).