Skip to content

Commit

Permalink
[#145] insert_query 테스트케이스 추가 및 버그 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
myyrakle committed Jul 31, 2024
1 parent 80fa71d commit a4bd21a
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/ast/dml/insert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::ast::{types::TableName, DMLStatement, SQLStatement};

use super::{parts::insert_values::InsertValue, select::SelectQuery};

#[derive(Clone, Debug, PartialEq)]
#[derive(Clone, Debug, PartialEq, Default)]
pub struct InsertQuery {
pub into_table: Option<TableName>,
pub columns: Vec<String>,
Expand All @@ -16,6 +16,12 @@ pub enum InsertData {
None,
}

impl Default for InsertData {
fn default() -> Self {
Self::None
}
}

impl InsertQuery {
pub fn builder() -> Self {
Self {
Expand Down
4 changes: 4 additions & 0 deletions src/parser/implements/dml/insert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ impl Parser {
}

// INTO 토큰 삼키기
if !self.has_next_token() {
return Err(ParsingError::wrap("E0410 need more tokens"));
}

let current_token = self.get_next_token();
if current_token != Token::Into {
return Err(ParsingError::wrap("E0403 expected INTO"));
Expand Down
141 changes: 141 additions & 0 deletions src/parser/test/insert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,147 @@ fn test_insert_query() {
.build(),
want_error: false,
},
TestCase {
name: "실패: 빈 토큰".into(),
input: vec![],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT".into(),
input: vec![Token::Insert],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: SELECT".into(),
input: vec![Token::Select],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT INTO foo.bar".into(),
input: vec![
Token::Insert,
Token::Into,
Token::Identifier("foo".into()),
Token::Period,
Token::Identifier("bar".into()),
],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT INTO foo.bar(".into(),
input: vec![
Token::Insert,
Token::Into,
Token::Identifier("foo".into()),
Token::Period,
Token::Identifier("bar".into()),
Token::LeftParentheses,
],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT INTO foo.bar(a,b".into(),
input: vec![
Token::Insert,
Token::Into,
Token::Identifier("foo".into()),
Token::Period,
Token::Identifier("bar".into()),
Token::LeftParentheses,
Token::Identifier("a".into()),
Token::Comma,
Token::Identifier("b".into()),
],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT INTO foo.bar(a,b) INSERT".into(),
input: vec![
Token::Insert,
Token::Into,
Token::Identifier("foo".into()),
Token::Period,
Token::Identifier("bar".into()),
Token::LeftParentheses,
Token::Identifier("a".into()),
Token::Comma,
Token::Identifier("b".into()),
Token::RightParentheses,
Token::Insert,
],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT INTO foo.bar(a, b, c) Values(1, 2), (4, 5)".into(),
input: vec![
Token::Insert,
Token::Into,
Token::Identifier("foo".into()),
Token::Period,
Token::Identifier("bar".into()),
Token::LeftParentheses,
Token::Identifier("a".into()),
Token::Comma,
Token::Identifier("b".into()),
Token::Comma,
Token::Identifier("c".into()),
Token::RightParentheses,
Token::Values,
Token::LeftParentheses,
Token::Integer(1),
Token::Comma,
Token::Integer(2),
Token::RightParentheses,
Token::Comma,
Token::LeftParentheses,
Token::Integer(4),
Token::Comma,
Token::Integer(5),
Token::RightParentheses,
],
expected: Default::default(),
want_error: true,
},
TestCase {
name: "실패: INSERT INTO foo.bar(a, b, c) Select s.a, s.b from boom.some as s".into(),
input: vec![
Token::Insert,
Token::Into,
Token::Identifier("foo".into()),
Token::Period,
Token::Identifier("bar".into()),
Token::LeftParentheses,
Token::Identifier("a".into()),
Token::Comma,
Token::Identifier("b".into()),
Token::Comma,
Token::Identifier("c".into()),
Token::RightParentheses,
Token::Select,
Token::Identifier("s".into()),
Token::Period,
Token::Identifier("a".into()),
Token::Comma,
Token::Identifier("s".into()),
Token::Period,
Token::Identifier("b".into()),
Token::From,
Token::Identifier("boom".into()),
Token::Period,
Token::Identifier("some".into()),
Token::As,
Token::Identifier("s".into()),
],
expected: Default::default(),
want_error: true,
},
];

for t in test_cases {
Expand Down

0 comments on commit a4bd21a

Please sign in to comment.