surrealdb_expr/expr/
output.rs1use surrealdb_types::{SqlFormat, ToSql, write_sql};
2
3use crate::expr::field::{Fields, Selector};
4use crate::expr::{Expr, Field, Literal};
5
6#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
7pub enum Output {
8 #[default]
9 None,
10 Null,
11 Diff,
12 After,
13 Before,
14 Fields(Fields),
15}
16
17impl ToSql for Output {
18 fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
19 f.push_str("RETURN ");
20 match self {
21 Self::None => f.push_str("NONE"),
22 Self::Null => f.push_str("NULL"),
23 Self::Diff => f.push_str("DIFF"),
24 Self::After => f.push_str("AFTER"),
25 Self::Before => f.push_str("BEFORE"),
26 Self::Fields(v) => match v {
27 Fields::Select(fields) => {
28 let mut iter = fields.iter();
29 match iter.next() {
30 Some(Field::Single(Selector {
31 expr: Expr::Literal(Literal::None),
32 alias,
33 })) => {
34 f.push_str("(NONE)");
35 if let Some(alias) = alias {
36 write_sql!(f, fmt, " AS {alias}");
37 }
38 }
39 Some(x) => {
40 x.fmt_sql(f, fmt);
41 }
42 None => {}
43 }
44
45 for x in iter {
46 write_sql!(f, fmt, ", {x}");
47 }
48 }
49 x => x.fmt_sql(f, fmt),
50 },
51 }
52 }
53}