Skip to main content

gluesql_core/query_builder/
drop_table.rs

1use {
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}