@@ -10568,49 +10568,47 @@ fn parse_unpivot_table() {
10568
10568
"SELECT * FROM sales AS s " ,
10569
10569
"UNPIVOT(quantity FOR quarter IN (Q1, Q2, Q3, Q4)) AS u (product, quarter, quantity)"
10570
10570
) ;
10571
-
10572
- pretty_assertions:: assert_eq!(
10573
- verified_only_select( sql) . from[ 0 ] . relation,
10574
- Unpivot {
10575
- table: Box :: new( TableFactor :: Table {
10576
- name: ObjectName :: from( vec![ Ident :: new( "sales" ) ] ) ,
10577
- alias: Some ( TableAlias {
10578
- name: Ident :: new( "s" ) ,
10579
- columns: vec![ ]
10580
- } ) ,
10581
- args: None ,
10582
- with_hints: vec![ ] ,
10583
- version: None ,
10584
- partitions: vec![ ] ,
10585
- with_ordinality: false ,
10586
- json_path: None ,
10587
- sample: None ,
10588
- index_hints: vec![ ] ,
10571
+ let base_unpivot = Unpivot {
10572
+ table : Box :: new ( TableFactor :: Table {
10573
+ name : ObjectName :: from ( vec ! [ Ident :: new( "sales" ) ] ) ,
10574
+ alias : Some ( TableAlias {
10575
+ name : Ident :: new ( "s" ) ,
10576
+ columns : vec ! [ ] ,
10589
10577
} ) ,
10590
- value: Ident {
10591
- value: "quantity" . to_string( ) ,
10592
- quote_style: None ,
10593
- span: Span :: empty( )
10594
- } ,
10578
+ args : None ,
10579
+ with_hints : vec ! [ ] ,
10580
+ version : None ,
10581
+ partitions : vec ! [ ] ,
10582
+ with_ordinality : false ,
10583
+ json_path : None ,
10584
+ sample : None ,
10585
+ index_hints : vec ! [ ] ,
10586
+ } ) ,
10587
+ null_inclusion : None ,
10588
+ value : Ident {
10589
+ value : "quantity" . to_string ( ) ,
10590
+ quote_style : None ,
10591
+ span : Span :: empty ( ) ,
10592
+ } ,
10595
10593
10596
- name: Ident {
10597
- value: "quarter" . to_string( ) ,
10598
- quote_style: None ,
10599
- span: Span :: empty( )
10600
- } ,
10601
- columns: [ "Q1" , "Q2" , "Q3" , "Q4" ]
10594
+ name : Ident {
10595
+ value : "quarter" . to_string ( ) ,
10596
+ quote_style : None ,
10597
+ span : Span :: empty ( ) ,
10598
+ } ,
10599
+ columns : [ "Q1" , "Q2" , "Q3" , "Q4" ]
10600
+ . into_iter ( )
10601
+ . map ( Ident :: new)
10602
+ . collect ( ) ,
10603
+ alias : Some ( TableAlias {
10604
+ name : Ident :: new ( "u" ) ,
10605
+ columns : [ "product" , "quarter" , "quantity" ]
10602
10606
. into_iter ( )
10603
- . map( Ident :: new )
10607
+ . map ( TableAliasColumnDef :: from_name )
10604
10608
. collect ( ) ,
10605
- alias: Some ( TableAlias {
10606
- name: Ident :: new( "u" ) ,
10607
- columns: [ "product" , "quarter" , "quantity" ]
10608
- . into_iter( )
10609
- . map( TableAliasColumnDef :: from_name)
10610
- . collect( ) ,
10611
- } ) ,
10612
- }
10613
- ) ;
10609
+ } ) ,
10610
+ } ;
10611
+ pretty_assertions:: assert_eq!( verified_only_select( sql) . from[ 0 ] . relation, base_unpivot) ;
10614
10612
assert_eq ! ( verified_stmt( sql) . to_string( ) , sql) ;
10615
10613
10616
10614
let sql_without_aliases = concat ! (
@@ -10630,6 +10628,38 @@ fn parse_unpivot_table() {
10630
10628
verified_stmt( sql_without_aliases) . to_string( ) ,
10631
10629
sql_without_aliases
10632
10630
) ;
10631
+
10632
+ let sql_unpivot_exclude_nulls = concat ! (
10633
+ "SELECT * FROM sales AS s " ,
10634
+ "UNPIVOT EXCLUDE NULLS (quantity FOR quarter IN (Q1, Q2, Q3, Q4)) AS u (product, quarter, quantity)"
10635
+ ) ;
10636
+
10637
+ if let Unpivot { null_inclusion, .. } =
10638
+ & verified_only_select ( sql_unpivot_exclude_nulls) . from [ 0 ] . relation
10639
+ {
10640
+ assert_eq ! ( * null_inclusion, Some ( NullInclusion :: ExcludeNulls ) ) ;
10641
+ }
10642
+
10643
+ assert_eq ! (
10644
+ verified_stmt( sql_unpivot_exclude_nulls) . to_string( ) ,
10645
+ sql_unpivot_exclude_nulls
10646
+ ) ;
10647
+
10648
+ let sql_unpivot_include_nulls = concat ! (
10649
+ "SELECT * FROM sales AS s " ,
10650
+ "UNPIVOT INCLUDE NULLS (quantity FOR quarter IN (Q1, Q2, Q3, Q4)) AS u (product, quarter, quantity)"
10651
+ ) ;
10652
+
10653
+ if let Unpivot { null_inclusion, .. } =
10654
+ & verified_only_select ( sql_unpivot_include_nulls) . from [ 0 ] . relation
10655
+ {
10656
+ assert_eq ! ( * null_inclusion, Some ( NullInclusion :: IncludeNulls ) ) ;
10657
+ }
10658
+
10659
+ assert_eq ! (
10660
+ verified_stmt( sql_unpivot_include_nulls) . to_string( ) ,
10661
+ sql_unpivot_include_nulls
10662
+ ) ;
10633
10663
}
10634
10664
10635
10665
#[ test]
@@ -10726,6 +10756,7 @@ fn parse_pivot_unpivot_table() {
10726
10756
sample: None ,
10727
10757
index_hints: vec![ ] ,
10728
10758
} ) ,
10759
+ null_inclusion: None ,
10729
10760
value: Ident {
10730
10761
value: "population" . to_string( ) ,
10731
10762
quote_style: None ,
0 commit comments