Skip to main content

surrealdb_sql/statements/define/
bucket.rs

1use 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}