surrealdb_sql/statements/define/
sequence.rs1use surrealdb_types::{SqlFormat, ToSql, write_sql};
2
3use super::DefineKind;
4use crate::{CoverStmts, Expr, Literal};
5
6#[derive(Clone, Debug, Eq, PartialEq)]
7#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
8pub struct DefineSequenceStatement {
9 pub kind: DefineKind,
10 pub name: Expr,
11 pub batch: Expr,
12 pub start: Expr,
13 pub timeout: Expr,
14}
15
16impl Default for DefineSequenceStatement {
17 fn default() -> Self {
18 Self {
19 kind: DefineKind::Default,
20 name: Expr::Literal(Literal::None),
21 batch: Expr::Literal(Literal::Integer(0)),
22 start: Expr::Literal(Literal::Integer(0)),
23 timeout: Expr::Literal(Literal::None),
24 }
25 }
26}
27
28impl ToSql for DefineSequenceStatement {
29 fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
30 write_sql!(f, sql_fmt, "DEFINE SEQUENCE");
31 match self.kind {
32 DefineKind::Default => {}
33 DefineKind::Overwrite => write_sql!(f, sql_fmt, " OVERWRITE"),
34 DefineKind::IfNotExists => write_sql!(f, sql_fmt, " IF NOT EXISTS"),
35 }
36 write_sql!(
37 f,
38 sql_fmt,
39 " {} BATCH {} START {}",
40 CoverStmts(&self.name),
41 CoverStmts(&self.batch),
42 CoverStmts(&self.start)
43 );
44 if !matches!(self.timeout, Expr::Literal(Literal::None)) {
45 write_sql!(f, sql_fmt, " TIMEOUT {}", CoverStmts(&self.timeout));
46 }
47 }
48}