diff --git a/src/lib/parser/test/expressions.rs b/src/lib/parser/test/expressions.rs index b5396141..653a8d25 100644 --- a/src/lib/parser/test/expressions.rs +++ b/src/lib/parser/test/expressions.rs @@ -2,9 +2,8 @@ use crate::lib::ast::predule::{ BetweenExpression, BinaryOperator, BinaryOperatorExpression, CallExpression, FunctionName, - SQLExpression, SelectItem, SelectQuery, + SQLExpression, SelectItem, SelectQuery, UnaryOperator, UnaryOperatorExpression, }; -use crate::lib::dml::{UnaryOperator, UnaryOperatorExpression}; use crate::lib::parser::predule::Parser; #[test] @@ -19,14 +18,14 @@ pub fn arithmetic_expression_1() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Binary( + .set_item( BinaryOperatorExpression { operator: BinaryOperator::Add, lhs: SQLExpression::Integer(3), rhs: SQLExpression::Integer(5), } .into(), - )) + ) .set_alias("foo".into()) .build(), ) @@ -47,21 +46,19 @@ pub fn arithmetic_expression_2() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Binary( + .set_item( BinaryOperatorExpression { operator: BinaryOperator::Add, - lhs: SQLExpression::Binary( - BinaryOperatorExpression { - operator: BinaryOperator::Add, - lhs: SQLExpression::Integer(1), - rhs: SQLExpression::Integer(2), - } - .into(), - ), + lhs: BinaryOperatorExpression { + operator: BinaryOperator::Add, + lhs: SQLExpression::Integer(1), + rhs: SQLExpression::Integer(2), + } + .into(), rhs: SQLExpression::Integer(3), } .into(), - )) + ) .set_alias("foo".into()) .build(), ) @@ -82,21 +79,19 @@ pub fn arithmetic_expression_3() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Binary( + .set_item( BinaryOperatorExpression { operator: BinaryOperator::Add, lhs: SQLExpression::Integer(1), - rhs: SQLExpression::Binary( - BinaryOperatorExpression { - operator: BinaryOperator::Mul, - lhs: SQLExpression::Integer(2), - rhs: SQLExpression::Integer(3), - } - .into(), - ), + rhs: BinaryOperatorExpression { + operator: BinaryOperator::Mul, + lhs: SQLExpression::Integer(2), + rhs: SQLExpression::Integer(3), + } + .into(), } .into(), - )) + ) .set_alias("foo".into()) .build(), ) @@ -117,28 +112,24 @@ pub fn arithmetic_expression_4() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Binary( + .set_item( BinaryOperatorExpression { operator: BinaryOperator::Add, - lhs: SQLExpression::Binary( - BinaryOperatorExpression { - operator: BinaryOperator::Add, - lhs: SQLExpression::Integer(1), - rhs: SQLExpression::Binary( - BinaryOperatorExpression { - operator: BinaryOperator::Mul, - lhs: SQLExpression::Integer(2), - rhs: SQLExpression::Integer(3), - } - .into(), - ), + lhs: BinaryOperatorExpression { + operator: BinaryOperator::Add, + lhs: SQLExpression::Integer(1), + rhs: BinaryOperatorExpression { + operator: BinaryOperator::Mul, + lhs: SQLExpression::Integer(2), + rhs: SQLExpression::Integer(3), } .into(), - ), + } + .into(), rhs: SQLExpression::Integer(4), } .into(), - )) + ) .set_alias("foo".into()) .build(), ) @@ -159,7 +150,7 @@ pub fn arithmetic_expression_5() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Binary( + .set_item( BinaryOperatorExpression { operator: BinaryOperator::Mul, lhs: SQLExpression::Integer(2), @@ -173,7 +164,7 @@ pub fn arithmetic_expression_5() { ), } .into(), - )) + ) .set_alias("foo".into()) .build(), ) @@ -194,7 +185,7 @@ pub fn arithmetic_expression_6() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Binary( + .set_item( BinaryOperatorExpression { operator: BinaryOperator::Mul, lhs: UnaryOperatorExpression { @@ -205,7 +196,7 @@ pub fn arithmetic_expression_6() { rhs: SQLExpression::Integer(5), } .into(), - )) + ) .set_alias("foo".into()) .build(), ) @@ -226,13 +217,16 @@ pub fn function_call_expression_1() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::FunctionCall(CallExpression { - function_name: FunctionName { - database_name: None, - function_name: "coalesce".into(), - }, - arguments: vec![SQLExpression::Null, SQLExpression::Integer(1)], - })) + .set_item( + CallExpression { + function_name: FunctionName { + database_name: None, + function_name: "coalesce".into(), + }, + arguments: vec![SQLExpression::Null, SQLExpression::Integer(1)], + } + .into(), + ) .set_alias("foo".into()) .build(), ) @@ -253,14 +247,80 @@ pub fn between_expression_1() { let expected = SelectQuery::builder() .add_select_item( SelectItem::builder() - .set_item(SQLExpression::Between( + .set_item( BetweenExpression { a: SQLExpression::Integer(3), x: SQLExpression::Integer(1), y: SQLExpression::Integer(5), } .into(), - )) + ) + .set_alias("foo".into()) + .build(), + ) + .build(); + + assert_eq!(parser.parse().unwrap(), vec![expected],); +} + +#[test] +pub fn between_expression_2() { + let text = r#" + SELECT 3 between 1 and 5 + 1 as foo + "# + .to_owned(); + + let mut parser = Parser::new(text).unwrap(); + + let expected = SelectQuery::builder() + .add_select_item( + SelectItem::builder() + .set_item( + BetweenExpression { + a: SQLExpression::Integer(3), + x: SQLExpression::Integer(1), + y: BinaryOperatorExpression { + operator: BinaryOperator::Add, + lhs: SQLExpression::Integer(5), + rhs: SQLExpression::Integer(1), + } + .into(), + } + .into(), + ) + .set_alias("foo".into()) + .build(), + ) + .build(); + + assert_eq!(parser.parse().unwrap(), vec![expected],); +} + +#[test] +pub fn between_expression_3() { + let text = r#" + SELECT 3 between 1 + 1 and 99 as foo + "# + .to_owned(); + + let mut parser = Parser::new(text).unwrap(); + + let expected = SelectQuery::builder() + .add_select_item( + SelectItem::builder() + .set_item( + BetweenExpression { + a: SQLExpression::Integer(3), + x: BinaryOperatorExpression { + operator: BinaryOperator::Add, + lhs: SQLExpression::Integer(1), + rhs: SQLExpression::Integer(1), + } + .into(), + y: SQLExpression::Integer(99), + } + .into(), + ) .set_alias("foo".into()) .build(), )