Skip to main content

uqa_sql/
compiler.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Lift a `PostgreSQL` parse tree into the internal [`Statement`] AST.
8//!
9//! The facade exposes compilation while statement-family modules own
10//! validation and lowering. Tree-shaped SELECT/DDL/expression lowering remains
11//! in the private `tree` module, and `PostgreSQL` type interpretation remains
12//! in the private `types` module.
13
14use crate::ast::{
15    AlterTableAction, AlterTableStmt, AlterViewAction, AlterViewKind, AlterViewStmt, DeleteStmt,
16    DropKind, DropStmt, Expr, Statement, TableKeyConstraint, TableKeyConstraintKind,
17    TransactionStmt, UpdateStmt,
18};
19use crate::error::{Result, SQLError};
20use pg_query::protobuf::{Node, RangeVar};
21use pg_query::NodeEnum;
22use types::compile_pg_type_name;
23
24mod administrative;
25mod composites;
26mod cursors;
27mod dispatch;
28mod dml;
29mod domains;
30mod drop_alter;
31mod enums;
32mod events;
33mod foreign_servers;
34mod foreign_tables;
35mod foreign_wrappers;
36mod hierarchy;
37mod locking;
38mod merge;
39mod names;
40mod relations;
41mod returning;
42mod routines;
43mod schema_moves;
44mod sequences;
45mod tree;
46mod type_lifecycle;
47mod types;
48
49pub use dispatch::{
50    compile, parse_statements, plan_only_for_test, resolve_deferred_create_table, ParsedStatement,
51};
52pub use foreign_tables::resolve_deferred_create_foreign_table;
53pub(crate) use types::compile_retained_type_declaration;
54pub(crate) use types::compile_retained_type_reference;
55pub use types::{
56    parse_regobject_name, parse_regprocedure_name, parse_regtype_name, ParsedRegprocedureName,
57    ParsedRegtypeName,
58};
59
60pub(crate) fn compile_pg_expression(node: &Node) -> Result<Expr> {
61    compile_expr(node)
62}
63
64pub(crate) fn compile_pg_projections(nodes: &[Node]) -> Result<Vec<crate::ast::Projection>> {
65    compile_projections(nodes)
66}
67
68pub(crate) fn compile_pg_select(
69    select: &pg_query::protobuf::SelectStmt,
70) -> Result<crate::ast::SelectStmt> {
71    compile_select(select)
72}
73
74pub(in crate::compiler) use hierarchy::compile_table_hierarchy;
75pub(super) use names::{
76    compile_on_commit, compile_qualified_name, range_var_alias, range_var_name,
77    relation_persistence, validate_create_table_envelope,
78};
79pub(crate) use names::{render_relation_component, write_relation_component};
80pub(in crate::compiler) use returning::compile_returning_clause;
81
82use tree::{
83    compile_create_index, compile_create_table, compile_expr, compile_from_node, compile_insert,
84    compile_projections, compile_select, compile_values_lists, compile_with_clause, extract_string,
85};
86
87#[cfg(test)]
88mod tests;