surrealdb_core/sql/
query.rs

1use crate::sql::fmt::Pretty;
2use crate::sql::function::Function;
3use crate::sql::model::Model;
4use crate::sql::statements::CreateStatement;
5use crate::sql::statements::DeleteStatement;
6use crate::sql::statements::InsertStatement;
7use crate::sql::statements::KillStatement;
8use crate::sql::statements::LiveStatement;
9use crate::sql::statements::RelateStatement;
10use crate::sql::statements::SelectStatement;
11use crate::sql::statements::UpdateStatement;
12use crate::sql::statements::UpsertStatement;
13use crate::sql::statements::{DefineStatement, RemoveStatement};
14use crate::sql::{Statement, Statements};
15
16use revision::revisioned;
17use serde::{Deserialize, Serialize};
18use std::fmt::Write;
19use std::fmt::{self, Display, Formatter};
20use std::ops::{Deref, DerefMut};
21use std::str;
22
23pub(crate) const TOKEN: &str = "$surrealdb::private::sql::Query";
24
25#[revisioned(revision = 1)]
26#[derive(Clone, Debug, Default, Eq, PartialEq, PartialOrd, Serialize, Deserialize, Hash)]
27#[serde(rename = "$surrealdb::private::sql::Query")]
28#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
29#[non_exhaustive]
30pub struct Query(pub Statements);
31
32impl From<DefineStatement> for Query {
33	fn from(s: DefineStatement) -> Self {
34		Query(Statements(vec![Statement::Define(s)]))
35	}
36}
37
38impl From<RemoveStatement> for Query {
39	fn from(s: RemoveStatement) -> Self {
40		Query(Statements(vec![Statement::Remove(s)]))
41	}
42}
43
44impl From<SelectStatement> for Query {
45	fn from(s: SelectStatement) -> Self {
46		Query(Statements(vec![Statement::Select(s)]))
47	}
48}
49
50impl From<CreateStatement> for Query {
51	fn from(s: CreateStatement) -> Self {
52		Query(Statements(vec![Statement::Create(s)]))
53	}
54}
55
56impl From<UpsertStatement> for Query {
57	fn from(s: UpsertStatement) -> Self {
58		Query(Statements(vec![Statement::Upsert(s)]))
59	}
60}
61
62impl From<UpdateStatement> for Query {
63	fn from(s: UpdateStatement) -> Self {
64		Query(Statements(vec![Statement::Update(s)]))
65	}
66}
67
68impl From<RelateStatement> for Query {
69	fn from(s: RelateStatement) -> Self {
70		Query(Statements(vec![Statement::Relate(s)]))
71	}
72}
73
74impl From<DeleteStatement> for Query {
75	fn from(s: DeleteStatement) -> Self {
76		Query(Statements(vec![Statement::Delete(s)]))
77	}
78}
79
80impl From<InsertStatement> for Query {
81	fn from(s: InsertStatement) -> Self {
82		Query(Statements(vec![Statement::Insert(s)]))
83	}
84}
85
86impl From<LiveStatement> for Query {
87	fn from(s: LiveStatement) -> Self {
88		Query(Statements(vec![Statement::Live(s)]))
89	}
90}
91
92impl From<KillStatement> for Query {
93	fn from(s: KillStatement) -> Self {
94		Query(Statements(vec![Statement::Kill(s)]))
95	}
96}
97
98impl From<Function> for Query {
99	fn from(f: Function) -> Self {
100		Query(Statements(vec![Statement::Value(f.into())]))
101	}
102}
103
104impl From<Model> for Query {
105	fn from(m: Model) -> Self {
106		Query(Statements(vec![Statement::Value(m.into())]))
107	}
108}
109
110impl From<Statement> for Query {
111	fn from(s: Statement) -> Self {
112		Query(Statements(vec![s]))
113	}
114}
115
116impl From<Vec<Statement>> for Query {
117	fn from(s: Vec<Statement>) -> Self {
118		Query(Statements(s))
119	}
120}
121
122impl Deref for Query {
123	type Target = Vec<Statement>;
124	fn deref(&self) -> &Self::Target {
125		&self.0 .0
126	}
127}
128
129impl DerefMut for Query {
130	fn deref_mut(&mut self) -> &mut Self::Target {
131		&mut self.0 .0
132	}
133}
134
135impl IntoIterator for Query {
136	type Item = Statement;
137	type IntoIter = std::vec::IntoIter<Self::Item>;
138	fn into_iter(self) -> Self::IntoIter {
139		self.0.into_iter()
140	}
141}
142
143impl Display for Query {
144	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
145		write!(Pretty::from(f), "{}", &self.0)
146	}
147}