1mod add_column;
2pub use add_column::AddColumn;
3
4mod alter_column;
5pub use alter_column::{AlterColumn, AlterColumnChanges};
6
7mod alter_table;
8pub use alter_table::{AlterTable, AlterTableAction};
9
10mod alter_type;
11pub use alter_type::AlterType;
12
13mod check;
14pub use check::CheckConstraint;
15
16mod column_def;
17pub use column_def::ColumnDef;
18
19mod copy_table;
20pub use copy_table::CopyTable;
21
22mod create_index;
23pub use create_index::CreateIndex;
24
25mod create_table;
26pub use create_table::CreateTable;
27
28mod create_type;
29pub use create_type::CreateType;
30
31mod drop_column;
32pub use drop_column::DropColumn;
33
34mod drop_index;
35pub use drop_index::DropIndex;
36
37mod drop_table;
38pub use drop_table::DropTable;
39
40mod ident;
41pub use ident::Ident;
42
43mod name;
44pub use name::Name;
45
46mod pragma;
47pub use pragma::Pragma;
48
49mod rename_type;
50pub use rename_type::RenameType;
51
52mod table_name;
53pub use table_name::TableName;
54
55pub use toasty_core::stmt::*;
56
57#[derive(Debug, Clone)]
59pub enum Statement {
60 AddColumn(AddColumn),
62 AlterColumn(AlterColumn),
64 AlterTable(AlterTable),
66 AlterType(AlterType),
68 CopyTable(CopyTable),
70 CreateIndex(CreateIndex),
72 CreateTable(CreateTable),
74 CreateType(CreateType),
76 DropColumn(DropColumn),
78 DropTable(DropTable),
80 DropIndex(DropIndex),
82 Pragma(Pragma),
84 RenameType(RenameType),
86 Delete(Delete),
88 Insert(Insert),
90 Query(Query),
92 Update(Update),
94}
95
96impl Statement {
97 pub fn is_update(&self) -> bool {
99 matches!(self, Self::Update(_))
100 }
101
102 pub fn returning_len(&self) -> Option<usize> {
104 match self {
105 Self::Delete(delete) => delete
106 .returning
107 .as_ref()
108 .map(|ret| ret.as_project_unwrap().as_record_unwrap().len()),
109 Self::Insert(insert) => insert
110 .returning
111 .as_ref()
112 .map(|ret| ret.as_project_unwrap().as_record_unwrap().len()),
113 Self::Query(query) => match &query.body {
114 ExprSet::Select(select) => Some(
115 select
116 .returning
117 .as_project_unwrap()
118 .as_record_unwrap()
119 .len(),
120 ),
121 stmt => todo!("returning_len, stmt={stmt:#?}"),
122 },
123 Self::Update(update) => update
124 .returning
125 .as_ref()
126 .map(|ret| ret.as_project_unwrap().as_record_unwrap().len()),
127 _ => None,
128 }
129 }
130}
131
132impl From<toasty_core::stmt::Statement> for Statement {
133 fn from(value: toasty_core::stmt::Statement) -> Self {
134 match value {
135 toasty_core::stmt::Statement::Delete(stmt) => Self::Delete(stmt),
136 toasty_core::stmt::Statement::Insert(stmt) => Self::Insert(stmt),
137 toasty_core::stmt::Statement::Query(stmt) => Self::Query(stmt),
138 toasty_core::stmt::Statement::Update(stmt) => Self::Update(stmt),
139 }
140 }
141}