Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions nexum_core/src/sql/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,28 @@ impl Parser {
Err(anyhow!("Unsupported query type"))
}
}

SqlStatement::Drop {
object_type,
if_exists,
names,
..
} => {
// Handle DROP TABLE statements parsed by sqlparser
match object_type {
ast::ObjectType::Table => {
if names.len() != 1 {
return Err(anyhow!("Can only drop one table at a time"));
}
let table_name = names[0].to_string();
Ok(Statement::DropTable {
name: table_name,
if_exists: *if_exists,
})
}
_ => Err(anyhow!("Only DROP TABLE is supported")),
}
}
Comment thread
Adez017 marked this conversation as resolved.
_ => Err(anyhow!("Unsupported statement type")),
}
}
Expand Down Expand Up @@ -515,6 +537,20 @@ mod tests {
}
}

#[test]
fn test_parse_drop_table() {
let sql = "DROP TABLE users";
let stmt = Parser::parse(sql).unwrap();

match stmt {
Statement::DropTable { name, if_exists } => {
assert_eq!(name, "users");
assert!(!if_exists);
}
_ => panic!("Expected DropTable statement"),
}
}

#[test]
fn test_parse_drop_table_if_exists() {
let sql = "DROP TABLE IF EXISTS users";
Expand All @@ -528,4 +564,33 @@ mod tests {
_ => panic!("Expected DropTable statement"),
}
}

#[test]
fn test_parse_drop_table_with_quotes() {
let sql = "DROP TABLE `users`";
let stmt = Parser::parse(sql).unwrap();

match stmt {
Statement::DropTable { name, if_exists } => {
assert_eq!(name, "users");
assert!(!if_exists);
}
_ => panic!("Expected DropTable statement"),
}
}

#[test]
fn test_parse_drop_table_sqlparser_syntax() {
// Test that sqlparser's DROP TABLE syntax also works
let sql = "DROP TABLE users";
let stmt = Parser::parse(sql).unwrap();

match stmt {
Statement::DropTable { name, if_exists } => {
assert_eq!(name, "users");
assert!(!if_exists);
}
_ => panic!("Expected DropTable statement"),
}
}
Comment thread
Adez017 marked this conversation as resolved.
}
Loading