surql_parser/upstream/sql/statements/define/
model.rs1use super::DefineKind;
2use crate::upstream::fmt::{CoverStmts, EscapeIdent};
3use crate::upstream::sql::{Expr, Literal, Permission};
4use surrealdb_types::{SqlFormat, ToSql, write_sql};
5#[derive(Clone, Debug, PartialEq, Eq)]
6#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
7pub struct DefineModelStatement {
8 pub kind: DefineKind,
9 pub hash: String,
10 pub name: String,
11 pub version: String,
12 pub comment: Expr,
13 pub permissions: Permission,
14}
15impl Default for DefineModelStatement {
16 fn default() -> Self {
17 Self {
18 kind: DefineKind::Default,
19 hash: String::new(),
20 name: String::new(),
21 version: String::new(),
22 comment: Expr::Literal(Literal::None),
23 permissions: Permission::default(),
24 }
25 }
26}
27impl ToSql for DefineModelStatement {
28 fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
29 write_sql!(f, fmt, "DEFINE MODEL");
30 match self.kind {
31 DefineKind::Default => {}
32 DefineKind::Overwrite => write_sql!(f, fmt, " OVERWRITE"),
33 DefineKind::IfNotExists => write_sql!(f, fmt, " IF NOT EXISTS"),
34 }
35 write_sql!(f, fmt, " ml::{}<{}>", EscapeIdent(&self.name), self.version);
36 if !matches!(self.comment, Expr::Literal(Literal::None)) {
37 write_sql!(f, fmt, " COMMENT {}", CoverStmts(&self.comment));
38 }
39 write_sql!(f, fmt, " PERMISSIONS {}", self.permissions);
40 }
41}