diff --git a/src/parser/implements/ddl/database.rs b/src/parser/implements/ddl/database.rs index a0966320..52a15cf5 100644 --- a/src/parser/implements/ddl/database.rs +++ b/src/parser/implements/ddl/database.rs @@ -33,7 +33,9 @@ impl Parser { } _ => { return Err(ParsingError::wrap( - "not supported command. possible commands: (create database)", + format!( + "not supported command. possible commands: (create database): {current_token:?}", + ) )); } } @@ -74,9 +76,9 @@ impl Parser { query_builder = query_builder.set_name(identifier); } _ => { - return Err(ParsingError::wrap( - "not supported command. possible commands: (create database)", - )); + return Err(ParsingError::wrap(format!( + "not supported command. possible commands: (drop database): {current_token:?}", + ))); } } diff --git a/src/parser/test/create_database.rs b/src/parser/test/create_database.rs index f6da89bd..a3dac083 100644 --- a/src/parser/test/create_database.rs +++ b/src/parser/test/create_database.rs @@ -1,44 +1,61 @@ #![cfg(test)] use crate::ast::ddl::create_database::CreateDatabaseQuery; -use crate::parser::context::ParserContext; +use crate::ast::SQLStatement; +use crate::lexer::tokens::Token; use crate::parser::predule::Parser; #[test] -pub fn create_database_1() { - let text = r#" - CREATE DATABASE IF Not exists test_db; - "# - .to_owned(); - - let mut parser = Parser::with_string(text).unwrap(); - - let expected = CreateDatabaseQuery::builder() - .set_name("test_db".to_owned()) - .set_if_not_exists(true) - .build(); - - assert_eq!( - parser.parse(ParserContext::default()).unwrap(), - vec![expected], - ); -} - -#[test] -pub fn create_database_2() { - let text = r#" - CREATE DATABASE test_db; - "# - .to_owned(); - - let mut parser = Parser::with_string(text).unwrap(); - - let expected = CreateDatabaseQuery::builder() - .set_name("test_db".to_owned()) - .set_if_not_exists(false) - .build(); - - assert_eq!( - parser.parse(ParserContext::default()).unwrap(), - vec![expected], - ); +fn test_handle_create_database_query() { + struct TestCase { + name: String, + input: Vec, + expected: SQLStatement, + want_error: bool, + } + + let test_cases = vec![ + TestCase { + name: "CREATE DATABASE test_db;".into(), + input: vec![Token::Identifier("test_db".to_owned()), Token::SemiColon], + expected: CreateDatabaseQuery::builder() + .set_name("test_db".to_owned()) + .build() + .into(), + want_error: false, + }, + TestCase { + name: "CREATE DATABASE IF NOT EXISTS test_db;".into(), + input: vec![ + Token::If, + Token::Not, + Token::Exists, + Token::Identifier("test_db".to_owned()), + Token::SemiColon, + ], + expected: CreateDatabaseQuery::builder() + .set_name("test_db".to_owned()) + .set_if_not_exists(true) + .build() + .into(), + want_error: false, + }, + ]; + + for t in test_cases { + let mut parser = Parser::new(t.input); + + let got = parser.handle_create_database_query(); + + assert_eq!( + got.is_err(), + t.want_error, + "TC: {} Error: {:?}", + t.name, + got.err() + ); + + if let Ok(alias) = got { + assert_eq!(alias, t.expected, "TC: {}", t.name); + } + } }