Expression Types
Expr::Named ✓ Expr::Named("email".into()) →
Expr::Aliased ✓ Expr::Aliased(name, alias)
→
users.email AS user_email
Expr::Aggregate ✓ Expr::Aggregate(func, col, filter)
→
COUNT(*) FILTER (WHERE ...) AS cnt
Expr::Window ✓ Expr::Window(func, partition, order, frame)
→
SUM(amount) OVER (PARTITION BY dept ORDER BY date)
Expr::Case ✓ Expr::Case(when_clauses, else_value)
→
CASE WHEN ... THEN 'A' ELSE 'B' END
Expr::ArrayConstructor
NEW
Expr::ArrayConstructor(elements, alias)
→
ARRAY[col1, col2] AS arr
Expr::RowConstructor
NEW
Expr::RowConstructor(elements, alias)
→
ROW(id, name) AS person
Expr::Subscript
NEW
Expr::Subscript(expr, index, alias)
→
tags[1] AS first_tag
Expr::Collate
NEW
Expr::Collate(expr, collation)
→
name COLLATE "C"
Expr::FieldAccess
NEW
Expr::FieldAccess(expr, field, alias)
→
(address).city AS city
Expr::Cast ✓ Expr::Cast(expr, target_type)
→
id::TEXT
Expr::JsonAccess ✓ Expr::JsonAccess(column, path_segments)
→
data->'user'->>'name' AS name
GROUP BY Modes
| Mode | Example SQL | Status |
|---|---|---|
GroupByMode::Simple | GROUP BY a, b | ✓ |
GroupByMode::Rollup | GROUP BY ROLLUP(a, b) | ✓ |
GroupByMode::Cube | GROUP BY CUBE(a, b) | ✓ |
GroupByMode::GroupingSets | GROUP BY GROUPING SETS ((a, b), (c)) | NEW |
DDL Actions
| Action | Example SQL | Status |
|---|---|---|
Action::Make | CREATE TABLE ... | ✓ |
Action::Drop | DROP TABLE ... | ✓ |
Action::Index | CREATE INDEX ... | ✓ |
Action::CreateView | CREATE VIEW ... AS SELECT | NEW |
Action::DropView | DROP VIEW IF EXISTS ... | NEW |