surql_parser/upstream/sql/statements/define/
sequence.rs1use 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}