From d4ae38a85d59de6910731de3e9f0dd50fa5daaea Mon Sep 17 00:00:00 2001 From: myyrakle Date: Tue, 13 Aug 2024 23:46:03 +0900 Subject: [PATCH] =?UTF-8?q?[#110]=20handle=5Fdrop=5Fquery=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/parser/test/ddl.rs | 64 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/parser/test/ddl.rs b/src/parser/test/ddl.rs index 8f0e0e9..07741c9 100644 --- a/src/parser/test/ddl.rs +++ b/src/parser/test/ddl.rs @@ -7,6 +7,8 @@ use crate::{ alter_table::{AlterTableAction, AlterTableQuery, AlterTableRenameColumn}, create_database::CreateDatabaseQuery, create_table::CreateTableQuery, + drop_database::DropDatabaseQuery, + drop_table::DropTableQuery, }, types::{Column, DataType, TableName}, SQLStatement, @@ -183,3 +185,65 @@ fn test_handle_alter_query() { } } } + +#[test] +fn test_handle_drop_query() { + struct TestCase { + name: String, + input: Vec, + expected: SQLStatement, + want_error: bool, + } + + let test_cases = vec![ + TestCase { + name: "DROP DATABASE foo".into(), + input: vec![Token::Database, Token::Identifier("foo".to_owned())], + expected: DropDatabaseQuery::builder() + .set_name("foo".to_owned()) + .build() + .into(), + want_error: false, + }, + TestCase { + name: "DROP TABLE foo".into(), + input: vec![Token::Table, Token::Identifier("foo".to_owned())], + expected: DropTableQuery::builder() + .set_table(TableName::new(None, "foo".to_owned())) + .build() + .into(), + want_error: false, + }, + TestCase { + name: "오류: 빈 토큰".into(), + input: vec![], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: NULL".into(), + input: vec![Token::Null, Token::Null], + expected: Default::default(), + want_error: true, + }, + ]; + + for t in test_cases { + let mut parser = Parser::new(t.input); + + let got = parser.handle_drop_query(Default::default()); + + assert_eq!( + got.is_err(), + t.want_error, + "{}: want_error: {}, error: {:?}", + t.name, + t.want_error, + got.err() + ); + + if let Ok(statements) = got { + assert_eq!(statements, t.expected.into(), "TC: {}", t.name); + } + } +}