@@ -1567,18 +1567,24 @@ impl Spanned for Expr {
15671567 ) ,
15681568 Expr :: Prefixed { value, .. } => value. span ( ) ,
15691569 Expr :: Case {
1570+ case_token,
1571+ end_token,
15701572 operand,
15711573 conditions,
15721574 else_result,
15731575 } => union_spans (
1574- operand
1575- . as_ref ( )
1576- . map ( |i| i. span ( ) )
1577- . into_iter ( )
1578- . chain ( conditions. iter ( ) . flat_map ( |case_when| {
1579- [ case_when. condition . span ( ) , case_when. result . span ( ) ]
1580- } ) )
1581- . chain ( else_result. as_ref ( ) . map ( |i| i. span ( ) ) ) ,
1576+ iter:: once ( case_token. 0 . span )
1577+ . chain (
1578+ operand
1579+ . as_ref ( )
1580+ . map ( |i| i. span ( ) )
1581+ . into_iter ( )
1582+ . chain ( conditions. iter ( ) . flat_map ( |case_when| {
1583+ [ case_when. condition . span ( ) , case_when. result . span ( ) ]
1584+ } ) )
1585+ . chain ( else_result. as_ref ( ) . map ( |i| i. span ( ) ) ) ,
1586+ )
1587+ . chain ( iter:: once ( end_token. 0 . span ) ) ,
15821588 ) ,
15831589 Expr :: Exists { subquery, .. } => subquery. span ( ) ,
15841590 Expr :: Subquery ( query) => query. span ( ) ,
@@ -2464,4 +2470,16 @@ pub mod tests {
24642470
24652471 assert_eq ! ( test. get_source( body_span) , "SELECT cte.* FROM cte" ) ;
24662472 }
2473+
2474+ #[ test]
2475+ fn test_case_expr_span ( ) {
2476+ let dialect = & GenericDialect ;
2477+ let mut test = SpanTest :: new ( dialect, "CASE 1 WHEN 2 THEN 3 ELSE 4 END" ) ;
2478+ let expr = test. 0 . parse_expr ( ) . unwrap ( ) ;
2479+ let expr_span = expr. span ( ) ;
2480+ assert_eq ! (
2481+ test. get_source( expr_span) ,
2482+ "CASE 1 WHEN 2 THEN 3 ELSE 4 END"
2483+ ) ;
2484+ }
24672485}
0 commit comments