@@ -461,6 +461,7 @@ fn parse_update_set_from() {
461
461
window_before_qualify: false ,
462
462
value_table_mode: None ,
463
463
connect_by: None ,
464
+ flavor: SelectFlavor :: Standard ,
464
465
} ) ) ) ,
465
466
order_by: None ,
466
467
limit: None ,
@@ -5289,6 +5290,7 @@ fn test_parse_named_window() {
5289
5290
window_before_qualify : true ,
5290
5291
value_table_mode : None ,
5291
5292
connect_by : None ,
5293
+ flavor : SelectFlavor :: Standard ,
5292
5294
} ;
5293
5295
assert_eq ! ( actual_select_only, expected) ;
5294
5296
}
@@ -5915,6 +5917,7 @@ fn parse_interval_and_or_xor() {
5915
5917
window_before_qualify: false ,
5916
5918
value_table_mode: None ,
5917
5919
connect_by: None ,
5920
+ flavor: SelectFlavor :: Standard ,
5918
5921
} ) ) ) ,
5919
5922
order_by: None ,
5920
5923
limit: None ,
@@ -8022,6 +8025,7 @@ fn lateral_function() {
8022
8025
window_before_qualify : false ,
8023
8026
value_table_mode : None ,
8024
8027
connect_by : None ,
8028
+ flavor : SelectFlavor :: Standard ,
8025
8029
} ;
8026
8030
assert_eq ! ( actual_select_only, expected) ;
8027
8031
}
@@ -8919,6 +8923,7 @@ fn parse_merge() {
8919
8923
qualify: None ,
8920
8924
value_table_mode: None ,
8921
8925
connect_by: None ,
8926
+ flavor: SelectFlavor :: Standard ,
8922
8927
} ) ) ) ,
8923
8928
order_by: None ,
8924
8929
limit: None ,
@@ -10703,6 +10708,7 @@ fn parse_unload() {
10703
10708
qualify: None ,
10704
10709
value_table_mode: None ,
10705
10710
connect_by: None ,
10711
+ flavor: SelectFlavor :: Standard ,
10706
10712
} ) ) ) ,
10707
10713
with: None ,
10708
10714
limit: None ,
@@ -10913,6 +10919,7 @@ fn parse_connect_by() {
10913
10919
) ) ) ) ) ,
10914
10920
} ] ,
10915
10921
} ) ,
10922
+ flavor : SelectFlavor :: Standard ,
10916
10923
} ;
10917
10924
10918
10925
let connect_by_1 = concat ! (
@@ -10997,6 +11004,7 @@ fn parse_connect_by() {
10997
11004
) ) ) ) ) ,
10998
11005
} ] ,
10999
11006
} ) ,
11007
+ flavor: SelectFlavor :: Standard ,
11000
11008
}
11001
11009
) ;
11002
11010
@@ -11860,6 +11868,7 @@ fn test_extract_seconds_ok() {
11860
11868
window_before_qualify: false ,
11861
11869
value_table_mode: None ,
11862
11870
connect_by: None ,
11871
+ flavor: SelectFlavor :: Standard ,
11863
11872
} ) ) ) ,
11864
11873
order_by: None ,
11865
11874
limit: None ,
@@ -13592,3 +13601,65 @@ fn test_lambdas() {
13592
13601
) ;
13593
13602
dialects. verified_expr ( "transform(array(1, 2, 3), x -> x + 1)" ) ;
13594
13603
}
13604
+
13605
+ #[ test]
13606
+ fn test_select_from_first ( ) {
13607
+ let dialects = all_dialects_where ( |d| d. supports_from_first_select ( ) ) ;
13608
+ let q1 = "FROM capitals" ;
13609
+ let q2 = "FROM capitals SELECT *" ;
13610
+
13611
+ for ( q, flavor, projection) in [
13612
+ ( q1, SelectFlavor :: FromFirstNoSelect , vec ! [ ] ) ,
13613
+ (
13614
+ q2,
13615
+ SelectFlavor :: FromFirst ,
13616
+ vec ! [ SelectItem :: Wildcard ( WildcardAdditionalOptions :: default ( ) ) ] ,
13617
+ ) ,
13618
+ ] {
13619
+ let ast = dialects. verified_query ( q) ;
13620
+ let expected = Query {
13621
+ with : None ,
13622
+ body : Box :: new ( SetExpr :: Select ( Box :: new ( Select {
13623
+ select_token : AttachedToken :: empty ( ) ,
13624
+ distinct : None ,
13625
+ top : None ,
13626
+ projection,
13627
+ top_before_distinct : false ,
13628
+ into : None ,
13629
+ from : vec ! [ TableWithJoins {
13630
+ relation: table_from_name( ObjectName :: from( vec![ Ident {
13631
+ value: "capitals" . to_string( ) ,
13632
+ quote_style: None ,
13633
+ span: Span :: empty( ) ,
13634
+ } ] ) ) ,
13635
+ joins: vec![ ] ,
13636
+ } ] ,
13637
+ lateral_views : vec ! [ ] ,
13638
+ prewhere : None ,
13639
+ selection : None ,
13640
+ group_by : GroupByExpr :: Expressions ( vec ! [ ] , vec ! [ ] ) ,
13641
+ cluster_by : vec ! [ ] ,
13642
+ distribute_by : vec ! [ ] ,
13643
+ sort_by : vec ! [ ] ,
13644
+ having : None ,
13645
+ named_window : vec ! [ ] ,
13646
+ window_before_qualify : false ,
13647
+ qualify : None ,
13648
+ value_table_mode : None ,
13649
+ connect_by : None ,
13650
+ flavor,
13651
+ } ) ) ) ,
13652
+ order_by : None ,
13653
+ limit : None ,
13654
+ offset : None ,
13655
+ fetch : None ,
13656
+ locks : vec ! [ ] ,
13657
+ limit_by : vec ! [ ] ,
13658
+ for_clause : None ,
13659
+ settings : None ,
13660
+ format_clause : None ,
13661
+ } ;
13662
+ assert_eq ! ( expected, ast) ;
13663
+ assert_eq ! ( ast. to_string( ) , q) ;
13664
+ }
13665
+ }
0 commit comments