surql_parser/upstream/sql/statements/
info.rs1use crate::upstream::fmt::CoverStmts;
2use crate::upstream::sql::{Base, Expr};
3use surrealdb_types::{SqlFormat, ToSql, write_sql};
4#[derive(Clone, Debug, Eq, PartialEq)]
5#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
6pub enum InfoStatement {
7 Root(bool),
8 Ns(bool),
9 Db(bool, Option<Expr>),
10 Tb(Expr, bool, Option<Expr>),
11 User(Expr, Option<Base>, bool),
12 Index(Expr, Expr, bool),
13}
14impl ToSql for InfoStatement {
15 fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
16 match self {
17 Self::Root(false) => f.push_str("INFO FOR ROOT"),
18 Self::Root(true) => f.push_str("INFO FOR ROOT STRUCTURE"),
19 Self::Ns(false) => f.push_str("INFO FOR NAMESPACE"),
20 Self::Ns(true) => f.push_str("INFO FOR NAMESPACE STRUCTURE"),
21 Self::Db(false, v) => match v {
22 Some(v) => {
23 write_sql!(f, sql_fmt, "INFO FOR DATABASE VERSION {}", CoverStmts(v))
24 }
25 None => f.push_str("INFO FOR DATABASE"),
26 },
27 Self::Db(true, v) => match v {
28 Some(v) => {
29 write_sql!(
30 f,
31 sql_fmt,
32 "INFO FOR DATABASE VERSION {} STRUCTURE",
33 CoverStmts(v)
34 )
35 }
36 None => f.push_str("INFO FOR DATABASE STRUCTURE"),
37 },
38 Self::Tb(t, false, v) => match v {
39 Some(v) => {
40 write_sql!(
41 f,
42 sql_fmt,
43 "INFO FOR TABLE {} VERSION {}",
44 CoverStmts(t),
45 CoverStmts(v)
46 )
47 }
48 None => write_sql!(f, sql_fmt, "INFO FOR TABLE {}", CoverStmts(t)),
49 },
50 Self::Tb(t, true, v) => match v {
51 Some(v) => {
52 write_sql!(
53 f,
54 sql_fmt,
55 "INFO FOR TABLE {} VERSION {} STRUCTURE",
56 CoverStmts(t),
57 CoverStmts(v)
58 )
59 }
60 None => {
61 write_sql!(f, sql_fmt, "INFO FOR TABLE {} STRUCTURE", CoverStmts(t))
62 }
63 },
64 Self::User(u, b, false) => match b {
65 Some(b) => {
66 write_sql!(f, sql_fmt, "INFO FOR USER {} ON {b}", CoverStmts(u))
67 }
68 None => write_sql!(f, sql_fmt, "INFO FOR USER {}", CoverStmts(u)),
69 },
70 Self::User(u, b, true) => match b {
71 Some(b) => {
72 write_sql!(
73 f,
74 sql_fmt,
75 "INFO FOR USER {} ON {b} STRUCTURE",
76 CoverStmts(u)
77 )
78 }
79 None => {
80 write_sql!(f, sql_fmt, "INFO FOR USER {} STRUCTURE", CoverStmts(u))
81 }
82 },
83 Self::Index(i, t, false) => {
84 write_sql!(
85 f,
86 sql_fmt,
87 "INFO FOR INDEX {} ON {}",
88 CoverStmts(i),
89 CoverStmts(t)
90 )
91 }
92 Self::Index(i, t, true) => {
93 write_sql!(
94 f,
95 sql_fmt,
96 "INFO FOR INDEX {} ON {} STRUCTURE",
97 CoverStmts(i),
98 CoverStmts(t)
99 )
100 }
101 }
102 }
103}