reinhardt_query/query/
drop_view.rs1use crate::{
6 backend::QueryBuilder,
7 types::{DynIden, IntoIden},
8};
9
10use super::traits::{QueryBuilderTrait, QueryStatementBuilder, QueryStatementWriter};
11
12#[derive(Debug, Clone)]
26pub struct DropViewStatement {
27 pub(crate) names: Vec<DynIden>,
28 pub(crate) if_exists: bool,
29 pub(crate) cascade: bool,
30 pub(crate) restrict: bool,
31 pub(crate) materialized: bool,
32}
33
34impl DropViewStatement {
35 pub fn new() -> Self {
37 Self {
38 names: Vec::new(),
39 if_exists: false,
40 cascade: false,
41 restrict: false,
42 materialized: false,
43 }
44 }
45
46 pub fn take(&mut self) -> Self {
48 Self {
49 names: std::mem::take(&mut self.names),
50 if_exists: self.if_exists,
51 cascade: self.cascade,
52 restrict: self.restrict,
53 materialized: self.materialized,
54 }
55 }
56
57 pub fn name<N>(&mut self, name: N) -> &mut Self
68 where
69 N: IntoIden,
70 {
71 self.names.push(name.into_iden());
72 self
73 }
74
75 pub fn names<I, N>(&mut self, names: I) -> &mut Self
86 where
87 I: IntoIterator<Item = N>,
88 N: IntoIden,
89 {
90 for name in names {
91 self.names.push(name.into_iden());
92 }
93 self
94 }
95
96 pub fn if_exists(&mut self) -> &mut Self {
108 self.if_exists = true;
109 self
110 }
111
112 pub fn cascade(&mut self) -> &mut Self {
127 self.cascade = true;
128 self.restrict = false;
129 self
130 }
131
132 pub fn restrict(&mut self) -> &mut Self {
147 self.restrict = true;
148 self.cascade = false;
149 self
150 }
151
152 pub fn materialized(&mut self, materialized: bool) -> &mut Self {
164 self.materialized = materialized;
165 self
166 }
167}
168
169impl Default for DropViewStatement {
170 fn default() -> Self {
171 Self::new()
172 }
173}
174
175impl QueryStatementBuilder for DropViewStatement {
176 fn build_any(&self, query_builder: &dyn QueryBuilderTrait) -> (String, crate::value::Values) {
177 use std::any::Any;
179 if let Some(builder) =
180 (query_builder as &dyn Any).downcast_ref::<crate::backend::PostgresQueryBuilder>()
181 {
182 return builder.build_drop_view(self);
183 }
184 if let Some(builder) =
185 (query_builder as &dyn Any).downcast_ref::<crate::backend::MySqlQueryBuilder>()
186 {
187 return builder.build_drop_view(self);
188 }
189 if let Some(builder) =
190 (query_builder as &dyn Any).downcast_ref::<crate::backend::SqliteQueryBuilder>()
191 {
192 return builder.build_drop_view(self);
193 }
194 panic!("Unsupported query builder type");
195 }
196}
197
198impl QueryStatementWriter for DropViewStatement {}