Skip to content

Commit 4749281

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

File tree

1 file changed

+84
-1
lines changed

1 file changed

+84
-1
lines changed

src/parser/test/expressions.rs

+84-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;
@@ -657,6 +657,77 @@ fn test_parse_expression() {
657657
.into(),
658658
want_error: false,
659659
},
660+
TestCase {
661+
name: r#"foo between 1 and 5"#.into(),
662+
input: vec![
663+
Token::Identifier("foo".to_owned()),
664+
Token::Between,
665+
Token::Integer(1),
666+
Token::And,
667+
Token::Integer(5),
668+
],
669+
expected: BetweenExpression {
670+
a: SQLExpression::SelectColumn(SelectColumn::new(None, "foo".to_owned())),
671+
x: SQLExpression::Integer(1),
672+
y: SQLExpression::Integer(5),
673+
}
674+
.into(),
675+
want_error: false,
676+
},
677+
TestCase {
678+
name: r#"foo(1) + 10"#.into(),
679+
input: vec![
680+
Token::Identifier("foo".to_owned()),
681+
Token::LeftParentheses,
682+
Token::Integer(1),
683+
Token::RightParentheses,
684+
Token::Operator(OperatorToken::Plus),
685+
Token::Integer(10),
686+
],
687+
expected: BinaryOperatorExpression {
688+
operator: BinaryOperator::Add,
689+
lhs: CallExpression {
690+
function: UserDefinedFunction {
691+
database_name: None,
692+
function_name: "foo".into(),
693+
}
694+
.into(),
695+
arguments: vec![SQLExpression::Integer(1)],
696+
}
697+
.into(),
698+
rhs: SQLExpression::Integer(10),
699+
}
700+
.into(),
701+
want_error: false,
702+
},
703+
TestCase {
704+
name: r#"foo(1) BETWEEN 1 and 5"#.into(),
705+
input: vec![
706+
Token::Identifier("foo".to_owned()),
707+
Token::LeftParentheses,
708+
Token::Integer(1),
709+
Token::RightParentheses,
710+
Token::Between,
711+
Token::Integer(1),
712+
Token::And,
713+
Token::Integer(5),
714+
],
715+
expected: BetweenExpression {
716+
a: CallExpression {
717+
function: UserDefinedFunction {
718+
database_name: None,
719+
function_name: "foo".into(),
720+
}
721+
.into(),
722+
arguments: vec![SQLExpression::Integer(1)],
723+
}
724+
.into(),
725+
x: SQLExpression::Integer(1),
726+
y: SQLExpression::Integer(5),
727+
}
728+
.into(),
729+
want_error: false,
730+
},
660731
TestCase {
661732
name: "오류: * 5".into(),
662733
input: vec![Token::Operator(OperatorToken::Asterisk), Token::Integer(5)],
@@ -669,6 +740,18 @@ fn test_parse_expression() {
669740
expected: Default::default(),
670741
want_error: true,
671742
},
743+
TestCase {
744+
name: "오류: )".into(),
745+
input: vec![Token::RightParentheses],
746+
expected: Default::default(),
747+
want_error: true,
748+
},
749+
TestCase {
750+
name: "오류: DELETE".into(),
751+
input: vec![Token::Delete],
752+
expected: Default::default(),
753+
want_error: true,
754+
},
672755
];
673756

674757
for t in test_cases {

0 commit comments

Comments
 (0)