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    ShowVariable(ShowVariableStatement),
56    Pragma(PragmaStatement),
57    ShowTables(ShowTablesStatement),
58    ShowViews(ShowViewsStatement),
59    ShowCreateTable(ShowCreateTableStatement),
60    ShowCreateView(ShowCreateViewStatement),
61    ShowIndexes(ShowIndexesStatement),
62    Describe(DescribeStatement),
63    Expression(ExpressionStatement),
64    Explain(ExplainStatement),
65    Analyze(AnalyzeStatement),
66    Vacuum(VacuumStatement),
67    Copy(CopyStatement),
68    Call(Box<CallStatement>),
69    CreateRoutine(Box<CreateRoutineStatement>),
70    CreateTrigger(Box<CreateTriggerStatement>),
71    CreateJob(Box<CreateJobStatement>),
72    DropRoutine(Box<DropRoutineStatement>),
73    DropTrigger(Box<DropTriggerStatement>),
74    DropJob(Box<DropJobStatement>),
75    AlterJob(Box<AlterJobStatement>),
76    CreateSchema(CreateSchemaStatement),
77    CreatePrincipal(CreatePrincipalStatement),
78    CreateRole(CreateRoleStatement),
79    AlterSecuritySubject(AlterSecuritySubjectStatement),
80    DropSecuritySubject(DropSecuritySubjectStatement),
81    Grant(Box<GrantStatement>),
82    Revoke(Box<RevokeStatement>),
83    AlterOwner(Box<AlterOwnerStatement>),
84}
85
86impl fmt::Display for Statement {
87    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
88        match self {
89            Statement::Select(s) => write!(f, "{}", s),
90            Statement::Insert(s) => write!(f, "{}", s),
91            Statement::Update(s) => write!(f, "{}", s),
92            Statement::Delete(s) => write!(f, "{}", s),
93            Statement::Truncate(s) => write!(f, "{}", s),
94            Statement::CreateTable(s) => write!(f, "{}", s),
95            Statement::DropTable(s) => write!(f, "{}", s),
96            Statement::AlterTable(s) => write!(f, "{}", s),
97            Statement::AlterIndex(s) => write!(f, "{}", s),
98            Statement::CreateIndex(s) => write!(f, "{}", s),
99            Statement::DropIndex(s) => write!(f, "{}", s),
100            Statement::CreateView(s) => write!(f, "{}", s),
101            Statement::DropView(s) => write!(f, "{}", s),
102            Statement::CreateExtension(s) => write!(f, "{}", s),
103            Statement::DropExtension(s) => write!(f, "{}", s),
104            Statement::CreateExternalType(s) => write!(f, "{}", s),
105            Statement::DropExternalType(s) => write!(f, "{}", s),
106            Statement::CreateOperator(s) => write!(f, "{}", s),
107            Statement::DropOperator(s) => write!(f, "{}", s),
108            Statement::CreateOperatorClass(s) => write!(f, "{}", s),
109            Statement::DropOperatorClass(s) => write!(f, "{}", s),
110            Statement::CreatePlannerSupport(s) => write!(f, "{}", s),
111            Statement::DropPlannerSupport(s) => write!(f, "{}", s),
112            Statement::Begin(s) => write!(f, "{}", s),
113            Statement::Commit(s) => write!(f, "{}", s),
114            Statement::Rollback(s) => write!(f, "{}", s),
115            Statement::Savepoint(s) => write!(f, "{}", s),
116            Statement::ReleaseSavepoint(s) => write!(f, "{}", s),
117            Statement::Set(s) => write!(f, "{}", s),
118            Statement::ShowVariable(s) => write!(f, "{}", s),
119            Statement::Pragma(s) => write!(f, "{}", s),
120            Statement::ShowTables(s) => write!(f, "{}", s),
121            Statement::ShowViews(s) => write!(f, "{}", s),
122            Statement::ShowCreateTable(s) => write!(f, "{}", s),
123            Statement::ShowCreateView(s) => write!(f, "{}", s),
124            Statement::ShowIndexes(s) => write!(f, "{}", s),
125            Statement::Describe(s) => write!(f, "{}", s),
126            Statement::Expression(s) => write!(f, "{}", s),
127            Statement::Explain(s) => write!(f, "{}", s),
128            Statement::Analyze(s) => write!(f, "{}", s),
129            Statement::Vacuum(s) => write!(f, "{}", s),
130            Statement::Copy(s) => write!(f, "{}", s),
131            Statement::Call(s) => write!(f, "{}", s),
132            Statement::CreateRoutine(s) => write!(f, "{}", s),
133            Statement::CreateTrigger(s) => write!(f, "{}", s),
134            Statement::CreateJob(s) => write!(f, "{}", s),
135            Statement::DropRoutine(s) => write!(f, "{}", s),
136            Statement::DropTrigger(s) => write!(f, "{}", s),
137            Statement::DropJob(s) => write!(f, "{}", s),
138            Statement::AlterJob(s) => write!(f, "{}", s),
139            Statement::CreateSchema(s) => write!(f, "{}", s),
140            Statement::CreatePrincipal(s) => write!(f, "{}", s),
141            Statement::CreateRole(s) => write!(f, "{}", s),
142            Statement::AlterSecuritySubject(s) => write!(f, "{}", s),
143            Statement::DropSecuritySubject(s) => write!(f, "{}", s),
144            Statement::Grant(s) => write!(f, "{}", s),
145            Statement::Revoke(s) => write!(f, "{}", s),
146            Statement::AlterOwner(s) => write!(f, "{}", s),
147        }
148    }
149}
150
151/// Program (collection of statements)
152#[derive(Debug, Clone, PartialEq)]
153pub struct Program {
154    pub statements: Vec<Statement>,
155}
156
157impl fmt::Display for Program {
158    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
159        for stmt in &self.statements {
160            write!(f, "{};", stmt)?;
161        }
162        Ok(())
163    }
164}