Skip to main content

surrealdb_sql/statements/
info.rs

1use 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	// revision discriminant override accounting for previous behavior when adding variants and
9	// removing not at the end of the enum definition.
10	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}