1use common::fmt::{EscapeKwFreeIdent, Fmt};
2use surrealdb_types::{SqlFormat, ToSql, write_sql};
3
4use crate::{Cond, Fields, Groups, TableName};
5
6#[derive(Clone, Debug, PartialEq, Eq)]
7pub struct View {
8 pub expr: Fields,
9 pub what: Vec<TableName>,
10 pub cond: Option<Cond>,
11 pub group: Option<Groups>,
12}
13
14impl ToSql for View {
15 fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
16 write_sql!(
17 f,
18 fmt,
19 "AS SELECT {} FROM {}",
20 self.expr,
21 Fmt::comma_separated(self.what.iter().map(|x| EscapeKwFreeIdent(x.as_str())))
22 );
23 if let Some(ref v) = self.cond {
24 write_sql!(f, fmt, " {v}");
25 }
26 if let Some(ref v) = self.group {
27 write_sql!(f, fmt, " {v}");
28 }
29 }
30}