Skip to content

Commit fda1357

Browse files
committed
[#148] parse_expression 테스트케이스 추가
1 parent 6dd2813 commit fda1357

File tree

1 file changed

+113
-1
lines changed

1 file changed

+113
-1
lines changed

src/parser/test/expressions.rs

+113-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::ast::dml::expressions::parentheses::ParenthesesExpression;
1010
use crate::ast::dml::expressions::unary::UnaryOperatorExpression;
1111
use crate::ast::dml::parts::select_item::SelectItem;
1212
use crate::ast::dml::select::SelectQuery;
13-
use crate::ast::types::{ConditionalFunction, SQLExpression, UserDefinedFunction};
13+
use crate::ast::types::{ConditionalFunction, SQLExpression, SelectColumn, UserDefinedFunction};
1414
use crate::lexer::predule::OperatorToken;
1515
use crate::lexer::tokens::Token;
1616
use crate::parser::predule::Parser;
@@ -286,6 +286,35 @@ fn test_parse_expression() {
286286
.into(),
287287
want_error: false,
288288
},
289+
TestCase {
290+
name: "(3 + 1) BETWEEN 2 AND 44".into(),
291+
input: vec![
292+
Token::LeftParentheses,
293+
Token::Integer(3),
294+
Token::Operator(OperatorToken::Plus),
295+
Token::Integer(1),
296+
Token::RightParentheses,
297+
Token::Between,
298+
Token::Integer(2),
299+
Token::And,
300+
Token::Integer(44),
301+
],
302+
expected: BetweenExpression {
303+
a: ParenthesesExpression {
304+
expression: BinaryOperatorExpression {
305+
operator: BinaryOperator::Add,
306+
lhs: SQLExpression::Integer(3),
307+
rhs: SQLExpression::Integer(1),
308+
}
309+
.into(),
310+
}
311+
.into(),
312+
x: SQLExpression::Integer(2),
313+
y: SQLExpression::Integer(44),
314+
}
315+
.into(),
316+
want_error: false,
317+
},
289318
TestCase {
290319
name: "3.0 between 1.2 and 5.3".into(),
291320
input: vec![
@@ -657,6 +686,77 @@ fn test_parse_expression() {
657686
.into(),
658687
want_error: false,
659688
},
689+
TestCase {
690+
name: r#"foo between 1 and 5"#.into(),
691+
input: vec![
692+
Token::Identifier("foo".to_owned()),
693+
Token::Between,
694+
Token::Integer(1),
695+
Token::And,
696+
Token::Integer(5),
697+
],
698+
expected: BetweenExpression {
699+
a: SQLExpression::SelectColumn(SelectColumn::new(None, "foo".to_owned())),
700+
x: SQLExpression::Integer(1),
701+
y: SQLExpression::Integer(5),
702+
}
703+
.into(),
704+
want_error: false,
705+
},
706+
TestCase {
707+
name: r#"foo(1) + 10"#.into(),
708+
input: vec![
709+
Token::Identifier("foo".to_owned()),
710+
Token::LeftParentheses,
711+
Token::Integer(1),
712+
Token::RightParentheses,
713+
Token::Operator(OperatorToken::Plus),
714+
Token::Integer(10),
715+
],
716+
expected: BinaryOperatorExpression {
717+
operator: BinaryOperator::Add,
718+
lhs: CallExpression {
719+
function: UserDefinedFunction {
720+
database_name: None,
721+
function_name: "foo".into(),
722+
}
723+
.into(),
724+
arguments: vec![SQLExpression::Integer(1)],
725+
}
726+
.into(),
727+
rhs: SQLExpression::Integer(10),
728+
}
729+
.into(),
730+
want_error: false,
731+
},
732+
TestCase {
733+
name: r#"foo(1) BETWEEN 1 and 5"#.into(),
734+
input: vec![
735+
Token::Identifier("foo".to_owned()),
736+
Token::LeftParentheses,
737+
Token::Integer(1),
738+
Token::RightParentheses,
739+
Token::Between,
740+
Token::Integer(1),
741+
Token::And,
742+
Token::Integer(5),
743+
],
744+
expected: BetweenExpression {
745+
a: CallExpression {
746+
function: UserDefinedFunction {
747+
database_name: None,
748+
function_name: "foo".into(),
749+
}
750+
.into(),
751+
arguments: vec![SQLExpression::Integer(1)],
752+
}
753+
.into(),
754+
x: SQLExpression::Integer(1),
755+
y: SQLExpression::Integer(5),
756+
}
757+
.into(),
758+
want_error: false,
759+
},
660760
TestCase {
661761
name: "오류: * 5".into(),
662762
input: vec![Token::Operator(OperatorToken::Asterisk), Token::Integer(5)],
@@ -669,6 +769,18 @@ fn test_parse_expression() {
669769
expected: Default::default(),
670770
want_error: true,
671771
},
772+
TestCase {
773+
name: "오류: )".into(),
774+
input: vec![Token::RightParentheses],
775+
expected: Default::default(),
776+
want_error: true,
777+
},
778+
TestCase {
779+
name: "오류: DELETE".into(),
780+
input: vec![Token::Delete],
781+
expected: Default::default(),
782+
want_error: true,
783+
},
672784
];
673785

674786
for t in test_cases {

0 commit comments

Comments
 (0)