@@ -10568,49 +10568,47 @@ fn parse_unpivot_table() {
1056810568 "SELECT * FROM sales AS s " ,
1056910569 "UNPIVOT(quantity FOR quarter IN (Q1, Q2, Q3, Q4)) AS u (product, quarter, quantity)"
1057010570 ) ;
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 ! [ ] ,
1058910577 } ) ,
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+ include_nulls : None ,
10588+ value : Ident {
10589+ value : "quantity" . to_string ( ) ,
10590+ quote_style : None ,
10591+ span : Span :: empty ( ) ,
10592+ } ,
1059510593
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" ]
1060210606 . into_iter ( )
10603- . map( Ident :: new )
10607+ . map ( TableAliasColumnDef :: from_name )
1060410608 . 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) ;
1061410612 assert_eq ! ( verified_stmt( sql) . to_string( ) , sql) ;
1061510613
1061610614 let sql_without_aliases = concat ! (
@@ -10630,6 +10628,38 @@ fn parse_unpivot_table() {
1063010628 verified_stmt( sql_without_aliases) . to_string( ) ,
1063110629 sql_without_aliases
1063210630 ) ;
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 { include_nulls, .. } =
10638+ & verified_only_select ( sql_unpivot_exclude_nulls) . from [ 0 ] . relation
10639+ {
10640+ assert_eq ! ( * include_nulls, Some ( false ) ) ;
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 { include_nulls, .. } =
10654+ & verified_only_select ( sql_unpivot_include_nulls) . from [ 0 ] . relation
10655+ {
10656+ assert_eq ! ( * include_nulls, Some ( true ) ) ;
10657+ }
10658+
10659+ assert_eq ! (
10660+ verified_stmt( sql_unpivot_include_nulls) . to_string( ) ,
10661+ sql_unpivot_include_nulls
10662+ ) ;
1063310663}
1063410664
1063510665#[ test]
@@ -10726,6 +10756,7 @@ fn parse_pivot_unpivot_table() {
1072610756 sample: None ,
1072710757 index_hints: vec![ ] ,
1072810758 } ) ,
10759+ include_nulls: None ,
1072910760 value: Ident {
1073010761 value: "population" . to_string( ) ,
1073110762 quote_style: None ,
0 commit comments