@@ -6695,22 +6695,26 @@ fn parse_searched_case_expr() {
66956695 & Case {
66966696 operand: None ,
66976697 conditions: vec![
6698- IsNull ( Box :: new( Identifier ( Ident :: new( "bar" ) ) ) ) ,
6699- BinaryOp {
6700- left: Box :: new( Identifier ( Ident :: new( "bar" ) ) ) ,
6701- op: Eq ,
6702- right: Box :: new( Expr :: Value ( number( "0" ) ) ) ,
6698+ CaseWhen {
6699+ condition: IsNull ( Box :: new( Identifier ( Ident :: new( "bar" ) ) ) ) ,
6700+ result: Expr :: Value ( Value :: SingleQuotedString ( "null" . to_string( ) ) ) ,
67036701 } ,
6704- BinaryOp {
6705- left: Box :: new( Identifier ( Ident :: new( "bar" ) ) ) ,
6706- op: GtEq ,
6707- right: Box :: new( Expr :: Value ( number( "0" ) ) ) ,
6702+ CaseWhen {
6703+ condition: BinaryOp {
6704+ left: Box :: new( Identifier ( Ident :: new( "bar" ) ) ) ,
6705+ op: Eq ,
6706+ right: Box :: new( Expr :: Value ( number( "0" ) ) ) ,
6707+ } ,
6708+ result: Expr :: Value ( Value :: SingleQuotedString ( "=0" . to_string( ) ) ) ,
6709+ } ,
6710+ CaseWhen {
6711+ condition: BinaryOp {
6712+ left: Box :: new( Identifier ( Ident :: new( "bar" ) ) ) ,
6713+ op: GtEq ,
6714+ right: Box :: new( Expr :: Value ( number( "0" ) ) ) ,
6715+ } ,
6716+ result: Expr :: Value ( Value :: SingleQuotedString ( ">=0" . to_string( ) ) ) ,
67086717 } ,
6709- ] ,
6710- results: vec![
6711- Expr :: Value ( Value :: SingleQuotedString ( "null" . to_string( ) ) ) ,
6712- Expr :: Value ( Value :: SingleQuotedString ( "=0" . to_string( ) ) ) ,
6713- Expr :: Value ( Value :: SingleQuotedString ( ">=0" . to_string( ) ) ) ,
67146718 ] ,
67156719 else_result: Some ( Box :: new( Expr :: Value ( Value :: SingleQuotedString (
67166720 "<0" . to_string( )
@@ -6729,8 +6733,10 @@ fn parse_simple_case_expr() {
67296733 assert_eq ! (
67306734 & Case {
67316735 operand: Some ( Box :: new( Identifier ( Ident :: new( "foo" ) ) ) ) ,
6732- conditions: vec![ Expr :: Value ( number( "1" ) ) ] ,
6733- results: vec![ Expr :: Value ( Value :: SingleQuotedString ( "Y" . to_string( ) ) ) ] ,
6736+ conditions: vec![ CaseWhen {
6737+ condition: Expr :: Value ( number( "1" ) ) ,
6738+ result: Expr :: Value ( Value :: SingleQuotedString ( "Y" . to_string( ) ) ) ,
6739+ } ] ,
67346740 else_result: Some ( Box :: new( Expr :: Value ( Value :: SingleQuotedString (
67356741 "N" . to_string( )
67366742 ) ) ) ) ,
@@ -13902,6 +13908,31 @@ fn test_trailing_commas_in_from() {
1390213908 ) ;
1390313909}
1390413910
13911+ #[ test]
13912+ #[ cfg( feature = "visitor" ) ]
13913+ fn test_visit_order ( ) {
13914+ let sql = "SELECT CASE a WHEN 1 THEN 2 WHEN 3 THEN 4 ELSE 5 END" ;
13915+ let stmt = verified_stmt ( sql) ;
13916+ let mut visited = vec ! [ ] ;
13917+ sqlparser:: ast:: visit_expressions ( & stmt, |expr| {
13918+ visited. push ( expr. to_string ( ) ) ;
13919+ core:: ops:: ControlFlow :: < ( ) > :: Continue ( ( ) )
13920+ } ) ;
13921+
13922+ assert_eq ! (
13923+ visited,
13924+ [
13925+ "CASE a WHEN 1 THEN 2 WHEN 3 THEN 4 ELSE 5 END" ,
13926+ "a" ,
13927+ "1" ,
13928+ "2" ,
13929+ "3" ,
13930+ "4" ,
13931+ "5"
13932+ ]
13933+ ) ;
13934+ }
13935+
1390513936#[ test]
1390613937fn test_lambdas ( ) {
1390713938 let dialects = all_dialects_where ( |d| d. supports_lambda_functions ( ) ) ;
@@ -13929,28 +13960,30 @@ fn test_lambdas() {
1392913960 body: Box :: new( Expr :: Case {
1393013961 operand: None ,
1393113962 conditions: vec![
13932- Expr :: BinaryOp {
13933- left: Box :: new( Expr :: Identifier ( Ident :: new( "p1" ) ) ) ,
13934- op: BinaryOperator :: Eq ,
13935- right: Box :: new( Expr :: Identifier ( Ident :: new( "p2" ) ) )
13963+ CaseWhen {
13964+ condition: Expr :: BinaryOp {
13965+ left: Box :: new( Expr :: Identifier ( Ident :: new( "p1" ) ) ) ,
13966+ op: BinaryOperator :: Eq ,
13967+ right: Box :: new( Expr :: Identifier ( Ident :: new( "p2" ) ) )
13968+ } ,
13969+ result: Expr :: Value ( number( "0" ) )
1393613970 } ,
13937- Expr :: BinaryOp {
13938- left: Box :: new( call(
13939- "reverse" ,
13940- [ Expr :: Identifier ( Ident :: new( "p1" ) ) ]
13941- ) ) ,
13942- op: BinaryOperator :: Lt ,
13943- right: Box :: new( call(
13944- "reverse" ,
13945- [ Expr :: Identifier ( Ident :: new( "p2" ) ) ]
13946- ) )
13947- }
13948- ] ,
13949- results: vec![
13950- Expr :: Value ( number( "0" ) ) ,
13951- Expr :: UnaryOp {
13952- op: UnaryOperator :: Minus ,
13953- expr: Box :: new( Expr :: Value ( number( "1" ) ) )
13971+ CaseWhen {
13972+ condition: Expr :: BinaryOp {
13973+ left: Box :: new( call(
13974+ "reverse" ,
13975+ [ Expr :: Identifier ( Ident :: new( "p1" ) ) ]
13976+ ) ) ,
13977+ op: BinaryOperator :: Lt ,
13978+ right: Box :: new( call(
13979+ "reverse" ,
13980+ [ Expr :: Identifier ( Ident :: new( "p2" ) ) ]
13981+ ) )
13982+ } ,
13983+ result: Expr :: UnaryOp {
13984+ op: UnaryOperator :: Minus ,
13985+ expr: Box :: new( Expr :: Value ( number( "1" ) ) )
13986+ }
1395413987 }
1395513988 ] ,
1395613989 else_result: Some ( Box :: new( Expr :: Value ( number( "1" ) ) ) )
0 commit comments