surrealdb_sql/statements/define/
bucket.rs1use surrealdb_types::{SqlFormat, ToSql, write_sql};
2
3use super::DefineKind;
4use crate::{CoverStmts, Expr, Literal, Permission};
5
6#[derive(Clone, Debug, Eq, PartialEq)]
7#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
8pub struct DefineBucketStatement {
9 pub kind: DefineKind,
10 pub name: Expr,
11 pub backend: Option<Expr>,
12 pub permissions: Permission,
13 pub readonly: bool,
14 pub comment: Expr,
15}
16
17impl Default for DefineBucketStatement {
18 fn default() -> Self {
19 Self {
20 kind: DefineKind::Default,
21 name: Expr::Literal(Literal::None),
22 backend: None,
23 permissions: Permission::default(),
24 readonly: false,
25 comment: Expr::Literal(Literal::None),
26 }
27 }
28}
29
30impl ToSql for DefineBucketStatement {
31 fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
32 write_sql!(f, sql_fmt, "DEFINE BUCKET");
33 match self.kind {
34 DefineKind::Default => {}
35 DefineKind::Overwrite => write_sql!(f, sql_fmt, " OVERWRITE"),
36 DefineKind::IfNotExists => write_sql!(f, sql_fmt, " IF NOT EXISTS"),
37 }
38 write_sql!(f, sql_fmt, " {}", CoverStmts(&self.name));
39
40 if self.readonly {
41 write_sql!(f, sql_fmt, " READONLY");
42 }
43
44 if let Some(ref backend) = self.backend {
45 write_sql!(f, sql_fmt, " BACKEND {}", CoverStmts(backend));
46 }
47
48 write_sql!(f, sql_fmt, " PERMISSIONS {}", self.permissions);
49
50 if !matches!(self.comment, Expr::Literal(Literal::None)) {
51 write_sql!(f, sql_fmt, " COMMENT {}", CoverStmts(&self.comment));
52 }
53 }
54}