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