surrealdb_core/sql/
query.rs1use 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}