Skip to main content

surql_parser/upstream/sql/statements/define/
sequence.rs

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