gluesql_core/query_builder/
drop_table.rs1use {
2 super::Build,
3 crate::{ast::Statement, plan::StatementPlan, result::Result},
4};
5
6#[derive(Clone, Debug)]
7pub struct DropTableNode {
8 table_name: String,
9 if_exists: bool,
10 cascade: bool,
11}
12
13impl DropTableNode {
14 pub fn new(table_name: String, exists: bool, cascade: bool) -> Self {
15 Self {
16 table_name,
17 if_exists: exists,
18 cascade,
19 }
20 }
21}
22
23impl Build for DropTableNode {
24 fn build(self) -> Result<StatementPlan> {
25 let names = vec![self.table_name];
26 let if_exists = self.if_exists;
27 let cascade = self.cascade;
28
29 Ok(Statement::DropTable {
30 names,
31 if_exists,
32 cascade,
33 }
34 .into())
35 }
36}
37
38#[cfg(test)]
39mod tests {
40 use crate::query_builder::{Build, table, test};
41
42 #[test]
43 fn drop_table() {
44 let actual = table("Foo").drop_table().build();
45 let expected = "DROP TABLE Foo";
46 test(&actual, expected);
47
48 let actual = table("Foo").drop_table_if_exists().build();
49 let expected = "DROP TABLE IF EXISTS Foo";
50 test(&actual, expected);
51
52 let actual = table("Foo").drop_table_cascade().build();
53 let expected = "DROP TABLE Foo CASCADE";
54 test(&actual, expected);
55
56 let actual = table("Foo").drop_table_if_exists_cascade().build();
57 let expected = "DROP TABLE IF EXISTS Foo CASCADE";
58 test(&actual, expected);
59 }
60}