Skip to main content

radixdb_sql/ast/
statement.rs

1// Copyright 2026 RadixDB Contributors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use super::*;
16
17// ============================================================================
18// Statements
19// ============================================================================
20
21/// Statement enum representing all statement types
22#[derive(Debug, Clone, PartialEq)]
23pub enum Statement {
24    Select(SelectStatement),
25    Insert(InsertStatement),
26    Update(UpdateStatement),
27    Delete(DeleteStatement),
28    Truncate(TruncateStatement),
29    CreateTable(CreateTableStatement),
30    DropTable(DropTableStatement),
31    /// Boxed to reduce enum size (776 bytes unboxed)
32    AlterTable(Box<AlterTableStatement>),
33    AlterIndex(AlterIndexStatement),
34    CreateIndex(CreateIndexStatement),
35    DropIndex(DropIndexStatement),
36    CreateView(CreateViewStatement),
37    DropView(DropViewStatement),
38    CreateExtension(CreateExtensionStatement),
39    DropExtension(DropExtensionStatement),
40    CreateExternalType(CreateExternalTypeStatement),
41    DropExternalType(DropExternalTypeStatement),
42    CreateOperator(Box<CreateOperatorStatement>),
43    DropOperator(Box<DropOperatorStatement>),
44    CreateOperatorClass(Box<CreateOperatorClassStatement>),
45    DropOperatorClass(Box<DropOperatorClassStatement>),
46    CreatePlannerSupport(Box<CreatePlannerSupportStatement>),
47    DropPlannerSupport(Box<DropPlannerSupportStatement>),
48    Begin(BeginStatement),
49    Commit(CommitStatement),
50    Rollback(RollbackStatement),
51    Savepoint(SavepointStatement),
52    ReleaseSavepoint(ReleaseSavepointStatement),
53    /// Boxed to reduce enum size (424 bytes unboxed)
54    Set(Box<SetStatement>),
55    Pragma(PragmaStatement),
56    ShowTables(ShowTablesStatement),
57    ShowViews(ShowViewsStatement),
58    ShowCreateTable(ShowCreateTableStatement),
59    ShowCreateView(ShowCreateViewStatement),
60    ShowIndexes(ShowIndexesStatement),
61    Describe(DescribeStatement),
62    Expression(ExpressionStatement),
63    Explain(ExplainStatement),
64    Analyze(AnalyzeStatement),
65    Vacuum(VacuumStatement),
66    Copy(CopyStatement),
67    Call(Box<CallStatement>),
68    CreateRoutine(Box<CreateRoutineStatement>),
69    CreateTrigger(Box<CreateTriggerStatement>),
70    CreateJob(Box<CreateJobStatement>),
71    DropRoutine(Box<DropRoutineStatement>),
72    DropTrigger(Box<DropTriggerStatement>),
73    DropJob(Box<DropJobStatement>),
74    AlterJob(Box<AlterJobStatement>),
75    CreateSchema(CreateSchemaStatement),
76    CreatePrincipal(CreatePrincipalStatement),
77    CreateRole(CreateRoleStatement),
78    AlterSecuritySubject(AlterSecuritySubjectStatement),
79    DropSecuritySubject(DropSecuritySubjectStatement),
80    Grant(Box<GrantStatement>),
81    Revoke(Box<RevokeStatement>),
82    AlterOwner(Box<AlterOwnerStatement>),
83}
84
85impl fmt::Display for Statement {
86    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
87        match self {
88            Statement::Select(s) => write!(f, "{}", s),
89            Statement::Insert(s) => write!(f, "{}", s),
90            Statement::Update(s) => write!(f, "{}", s),
91            Statement::Delete(s) => write!(f, "{}", s),
92            Statement::Truncate(s) => write!(f, "{}", s),
93            Statement::CreateTable(s) => write!(f, "{}", s),
94            Statement::DropTable(s) => write!(f, "{}", s),
95            Statement::AlterTable(s) => write!(f, "{}", s),
96            Statement::AlterIndex(s) => write!(f, "{}", s),
97            Statement::CreateIndex(s) => write!(f, "{}", s),
98            Statement::DropIndex(s) => write!(f, "{}", s),
99            Statement::CreateView(s) => write!(f, "{}", s),
100            Statement::DropView(s) => write!(f, "{}", s),
101            Statement::CreateExtension(s) => write!(f, "{}", s),
102            Statement::DropExtension(s) => write!(f, "{}", s),
103            Statement::CreateExternalType(s) => write!(f, "{}", s),
104            Statement::DropExternalType(s) => write!(f, "{}", s),
105            Statement::CreateOperator(s) => write!(f, "{}", s),
106            Statement::DropOperator(s) => write!(f, "{}", s),
107            Statement::CreateOperatorClass(s) => write!(f, "{}", s),
108            Statement::DropOperatorClass(s) => write!(f, "{}", s),
109            Statement::CreatePlannerSupport(s) => write!(f, "{}", s),
110            Statement::DropPlannerSupport(s) => write!(f, "{}", s),
111            Statement::Begin(s) => write!(f, "{}", s),
112            Statement::Commit(s) => write!(f, "{}", s),
113            Statement::Rollback(s) => write!(f, "{}", s),
114            Statement::Savepoint(s) => write!(f, "{}", s),
115            Statement::ReleaseSavepoint(s) => write!(f, "{}", s),
116            Statement::Set(s) => write!(f, "{}", s),
117            Statement::Pragma(s) => write!(f, "{}", s),
118            Statement::ShowTables(s) => write!(f, "{}", s),
119            Statement::ShowViews(s) => write!(f, "{}", s),
120            Statement::ShowCreateTable(s) => write!(f, "{}", s),
121            Statement::ShowCreateView(s) => write!(f, "{}", s),
122            Statement::ShowIndexes(s) => write!(f, "{}", s),
123            Statement::Describe(s) => write!(f, "{}", s),
124            Statement::Expression(s) => write!(f, "{}", s),
125            Statement::Explain(s) => write!(f, "{}", s),
126            Statement::Analyze(s) => write!(f, "{}", s),
127            Statement::Vacuum(s) => write!(f, "{}", s),
128            Statement::Copy(s) => write!(f, "{}", s),
129            Statement::Call(s) => write!(f, "{}", s),
130            Statement::CreateRoutine(s) => write!(f, "{}", s),
131            Statement::CreateTrigger(s) => write!(f, "{}", s),
132            Statement::CreateJob(s) => write!(f, "{}", s),
133            Statement::DropRoutine(s) => write!(f, "{}", s),
134            Statement::DropTrigger(s) => write!(f, "{}", s),
135            Statement::DropJob(s) => write!(f, "{}", s),
136            Statement::AlterJob(s) => write!(f, "{}", s),
137            Statement::CreateSchema(s) => write!(f, "{}", s),
138            Statement::CreatePrincipal(s) => write!(f, "{}", s),
139            Statement::CreateRole(s) => write!(f, "{}", s),
140            Statement::AlterSecuritySubject(s) => write!(f, "{}", s),
141            Statement::DropSecuritySubject(s) => write!(f, "{}", s),
142            Statement::Grant(s) => write!(f, "{}", s),
143            Statement::Revoke(s) => write!(f, "{}", s),
144            Statement::AlterOwner(s) => write!(f, "{}", s),
145        }
146    }
147}
148
149/// Program (collection of statements)
150#[derive(Debug, Clone, PartialEq)]
151pub struct Program {
152    pub statements: Vec<Statement>,
153}
154
155impl fmt::Display for Program {
156    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
157        for stmt in &self.statements {
158            write!(f, "{};", stmt)?;
159        }
160        Ok(())
161    }
162}