From f9a734c1582f8b588fd9ee672482abe008054c4b Mon Sep 17 00:00:00 2001 From: myyrakle Date: Tue, 13 Aug 2024 23:59:02 +0900 Subject: [PATCH] =?UTF-8?q?[#110]=20handle=5Fcreate=5Ftable=5Fquery=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/parser/test/ddl.rs | 122 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/src/parser/test/ddl.rs b/src/parser/test/ddl.rs index 07741c9..4b5adfc 100644 --- a/src/parser/test/ddl.rs +++ b/src/parser/test/ddl.rs @@ -247,3 +247,125 @@ fn test_handle_drop_query() { } } } + +#[test] +fn test_handle_create_table_query() { + struct TestCase { + name: String, + input: Vec, + expected: SQLStatement, + want_error: bool, + } + + let test_cases = vec![ + TestCase { + name: "CREATE TABLE foo(id INT PRIMARY KEY)".into(), + input: vec![ + Token::Identifier("foo".to_owned()), + Token::LeftParentheses, + Token::Identifier("id".to_owned()), + Token::Identifier("INT".to_owned()), + Token::Primary, + Token::Key, + Token::RightParentheses, + ], + expected: CreateTableQuery::builder() + .set_table(TableName::new(None, "foo".to_owned())) + .add_column( + Column::builder() + .set_name("id".to_owned()) + .set_data_type(DataType::Int) + .set_primary_key(true) + .build(), + ) + .build() + .into(), + want_error: false, + }, + TestCase { + name: "오류: 빈 토큰".into(), + input: vec![], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: CREATE TABLE foo".into(), + input: vec![Token::Identifier("foo".to_owned())], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: CREATE TABLE foo)".into(), + input: vec![Token::Identifier("foo".to_owned()), Token::RightParentheses], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: CREATE TABLE foo(".into(), + input: vec![Token::Identifier("foo".to_owned()), Token::LeftParentheses], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: CREATE TABLE foo(id INT PRIMARY KEY".into(), + input: vec![ + Token::Identifier("foo".to_owned()), + Token::LeftParentheses, + Token::Identifier("id".to_owned()), + Token::Identifier("INT".to_owned()), + Token::Primary, + Token::Key, + ], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: CREATE TABLE foo(id INT PRIMARY KEY(".into(), + input: vec![ + Token::Identifier("foo".to_owned()), + Token::LeftParentheses, + Token::Identifier("id".to_owned()), + Token::Identifier("INT".to_owned()), + Token::Primary, + Token::Key, + Token::LeftParentheses, + ], + expected: Default::default(), + want_error: true, + }, + TestCase { + name: "오류: CREATE TABLE foo(id INT PRIMARY KEY))".into(), + input: vec![ + Token::Identifier("foo".to_owned()), + Token::LeftParentheses, + Token::Identifier("id".to_owned()), + Token::Identifier("INT".to_owned()), + Token::Primary, + Token::Key, + Token::RightParentheses, + Token::RightParentheses, + ], + expected: Default::default(), + want_error: true, + }, + ]; + + for t in test_cases { + let mut parser = Parser::new(t.input); + + let got = parser.handle_create_table_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); + } + } +}