Skip to content

Commit 6dd2813

Browse files
committed
[#148] parse_expression between 파싱 버그 수정
1 parent ea8391a commit 6dd2813

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

src/parser/implements/dml/expression.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ impl Parser {
1919
context: ParserContext,
2020
) -> Result<SQLExpression, RRDBError> {
2121
if !self.has_next_token() {
22-
return Err(ParsingError::wrap("E0201 need more tokens"));
22+
return Err(ParsingError::wrap("E0216 need more tokens"));
2323
}
2424

2525
let current_token = self.get_next_token();
@@ -493,7 +493,9 @@ impl Parser {
493493
a: SQLExpression,
494494
context: ParserContext,
495495
) -> Result<SQLExpression, RRDBError> {
496-
let context = context.set_in_between_clause(true);
496+
let context = context
497+
.set_in_between_clause(true)
498+
.set_in_parentheses(false);
497499

498500
if !self.has_next_token() {
499501
return Err(ParsingError::wrap("E0210 need more tokens"));

src/parser/test/expressions.rs

+51
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,28 @@ fn test_parse_expression() {
264264
.into(),
265265
want_error: false,
266266
},
267+
TestCase {
268+
name: "(3 between 1 and 5)".into(),
269+
input: vec![
270+
Token::LeftParentheses,
271+
Token::Integer(3),
272+
Token::Between,
273+
Token::Integer(1),
274+
Token::And,
275+
Token::Integer(5),
276+
Token::RightParentheses,
277+
],
278+
expected: ParenthesesExpression {
279+
expression: BetweenExpression {
280+
a: SQLExpression::Integer(3),
281+
x: SQLExpression::Integer(1),
282+
y: SQLExpression::Integer(5),
283+
}
284+
.into(),
285+
}
286+
.into(),
287+
want_error: false,
288+
},
267289
TestCase {
268290
name: "3.0 between 1.2 and 5.3".into(),
269291
input: vec![
@@ -606,6 +628,35 @@ fn test_parse_expression() {
606628
.into(),
607629
want_error: false,
608630
},
631+
TestCase {
632+
name: r#"(SELECT 1) BETWEEN 0 AND 5"#.into(),
633+
input: vec![
634+
Token::LeftParentheses,
635+
Token::Select,
636+
Token::Integer(1),
637+
Token::RightParentheses,
638+
Token::Between,
639+
Token::Integer(0),
640+
Token::And,
641+
Token::Integer(5),
642+
],
643+
expected: BetweenExpression {
644+
a: SQLExpression::Subquery(
645+
SelectQuery::builder()
646+
.add_select_item(
647+
SelectItem::builder()
648+
.set_item(SQLExpression::Integer(1))
649+
.build(),
650+
)
651+
.build()
652+
.into(),
653+
),
654+
x: SQLExpression::Integer(0),
655+
y: SQLExpression::Integer(5),
656+
}
657+
.into(),
658+
want_error: false,
659+
},
609660
TestCase {
610661
name: "오류: * 5".into(),
611662
input: vec![Token::Operator(OperatorToken::Asterisk), Token::Integer(5)],

0 commit comments

Comments
 (0)