surrealdb_expr/expr/statements/alter/
mod.rs1use revision::{DeserializeRevisioned, Revisioned, SerializeRevisioned};
2use surrealdb_types::{SqlFormat, ToSql};
3
4pub mod access;
5pub mod analyzer;
6pub mod api;
7pub mod bucket;
8pub mod config;
9pub mod database;
10pub mod event;
11pub mod field;
12pub mod function;
13pub mod index;
14pub mod module;
15pub mod namespace;
16pub mod param;
17pub mod sequence;
18pub mod system;
19pub mod table;
20pub mod user;
21
22pub use access::AlterAccessStatement;
23pub use analyzer::AlterAnalyzerStatement;
24pub use api::{AlterApiClause, AlterApiStatement};
25pub use bucket::AlterBucketStatement;
26pub use config::AlterConfigStatement;
27pub use database::AlterDatabaseStatement;
28pub use event::AlterEventStatement;
29pub use field::{AlterDefault, AlterFieldStatement};
30pub use function::AlterFunctionStatement;
31pub use index::AlterIndexStatement;
32pub use module::AlterModuleStatement;
33pub use namespace::AlterNamespaceStatement;
34pub use param::AlterParamStatement;
35pub use sequence::AlterSequenceStatement;
36pub use system::AlterSystemStatement;
37pub use table::AlterTableStatement;
38pub use user::AlterUserStatement;
39#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
40pub enum AlterKind<T> {
45 #[default]
46 None,
47 Set(T),
48 Drop,
49}
50
51impl<T: Revisioned> Revisioned for AlterKind<T> {
52 fn revision() -> u16 {
53 1
54 }
55}
56
57impl<T: Revisioned + SerializeRevisioned> SerializeRevisioned for AlterKind<T> {
58 fn serialize_revisioned<W: std::io::Write>(
59 &self,
60 w: &mut W,
61 ) -> std::result::Result<(), revision::Error> {
62 SerializeRevisioned::serialize_revisioned(&Self::revision(), w)?;
63 match self {
64 AlterKind::None => SerializeRevisioned::serialize_revisioned(&0u32, w)?,
65 AlterKind::Set(x) => {
66 SerializeRevisioned::serialize_revisioned(&1u32, w)?;
67 SerializeRevisioned::serialize_revisioned(x, w)?;
68 }
69 AlterKind::Drop => {
70 SerializeRevisioned::serialize_revisioned(&2u32, w)?;
71 }
72 }
73 Ok(())
74 }
75}
76
77impl<T: Revisioned + DeserializeRevisioned> DeserializeRevisioned for AlterKind<T> {
78 fn deserialize_revisioned<R: std::io::Read>(
79 r: &mut R,
80 ) -> std::result::Result<Self, revision::Error>
81 where
82 Self: Sized,
83 {
84 match DeserializeRevisioned::deserialize_revisioned(r)? {
85 1u16 => {
86 let variant: u32 = DeserializeRevisioned::deserialize_revisioned(r)?;
87 match variant {
88 0 => Ok(AlterKind::None),
89 1 => Ok(AlterKind::Set(DeserializeRevisioned::deserialize_revisioned(r)?)),
90 2 => Ok(AlterKind::Drop),
91 x => Err(revision::Error::Deserialize(format!(
92 "Unknown variant `{x}` for AlterKind"
93 ))),
94 }
95 }
96 x => Err(revision::Error::Deserialize(format!("Unknown revision `{x}` for AlterKind"))),
97 }
98 }
99}
100
101#[derive(Clone, Debug, Eq, PartialEq, Hash)]
102pub enum AlterStatement {
107 System(AlterSystemStatement),
108 Namespace(AlterNamespaceStatement),
109 Database(AlterDatabaseStatement),
110 Table(AlterTableStatement),
111 Api(AlterApiStatement),
112 Event(AlterEventStatement),
113 Index(AlterIndexStatement),
114 Sequence(AlterSequenceStatement),
115 Field(Box<AlterFieldStatement>),
116 Param(AlterParamStatement),
117 Bucket(AlterBucketStatement),
118 Config(AlterConfigStatement),
119 Analyzer(AlterAnalyzerStatement),
120 Function(AlterFunctionStatement),
121 User(AlterUserStatement),
122 Access(AlterAccessStatement),
123 Module(AlterModuleStatement),
124}
125
126impl ToSql for AlterStatement {
127 fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
128 match self {
129 Self::System(v) => v.fmt_sql(f, fmt),
130 Self::Namespace(v) => v.fmt_sql(f, fmt),
131 Self::Database(v) => v.fmt_sql(f, fmt),
132 Self::Table(v) => v.fmt_sql(f, fmt),
133 Self::Api(v) => v.fmt_sql(f, fmt),
134 Self::Event(v) => v.fmt_sql(f, fmt),
135 Self::Index(v) => v.fmt_sql(f, fmt),
136 Self::Sequence(v) => v.fmt_sql(f, fmt),
137 Self::Field(v) => v.fmt_sql(f, fmt),
138 Self::Param(v) => v.fmt_sql(f, fmt),
139 Self::Bucket(v) => v.fmt_sql(f, fmt),
140 Self::Config(v) => v.fmt_sql(f, fmt),
141 Self::Analyzer(v) => v.fmt_sql(f, fmt),
142 Self::Function(v) => v.fmt_sql(f, fmt),
143 Self::User(v) => v.fmt_sql(f, fmt),
144 Self::Access(v) => v.fmt_sql(f, fmt),
145 Self::Module(v) => v.fmt_sql(f, fmt),
146 }
147 }
148}