Skip to main content

surql_parser/upstream/sql/statements/
info.rs

1use 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}