Skip to main content

surrealdb_sql/statements/define/
sequence.rs

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