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