Skip to main content

surrealdb_sql/statements/
live.rs

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