Skip to main content

surql_parser/upstream/sql/statements/
live.rs

1use crate::upstream::fmt::CoverStmts;
2use crate::upstream::sql::{Cond, Expr, Fetchs, Fields};
3use surrealdb_types::{SqlFormat, ToSql, write_sql};
4use uuid::Uuid;
5#[derive(Clone, Debug, Eq, PartialEq)]
6#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
7pub enum LiveFields {
8	Diff,
9	Select(Fields),
10}
11#[derive(Clone, Debug, Eq, PartialEq)]
12#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
13pub struct LiveStatement {
14	pub fields: LiveFields,
15	pub what: Expr,
16	pub cond: Option<Cond>,
17	pub fetch: Option<Fetchs>,
18}
19impl ToSql for LiveStatement {
20	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
21		f.push_str("LIVE SELECT");
22		match &self.fields {
23			LiveFields::Diff => write_sql!(f, fmt, " DIFF"),
24			LiveFields::Select(x) => write_sql!(f, fmt, " {}", x),
25		}
26		write_sql!(f, fmt, " FROM {}", CoverStmts(&self.what));
27		if let Some(ref v) = self.cond {
28			write_sql!(f, fmt, " {v}");
29		}
30		if let Some(ref v) = self.fetch {
31			write_sql!(f, fmt, " {v}");
32		}
33	}
34}