@@ -461,6 +461,7 @@ fn parse_update_set_from() {
461461 window_before_qualify: false ,
462462 value_table_mode: None ,
463463 connect_by: None ,
464+ flavor: SelectFlavor :: Standard ,
464465 } ) ) ) ,
465466 order_by: None ,
466467 limit: None ,
@@ -5289,6 +5290,7 @@ fn test_parse_named_window() {
52895290 window_before_qualify : true ,
52905291 value_table_mode : None ,
52915292 connect_by : None ,
5293+ flavor : SelectFlavor :: Standard ,
52925294 } ;
52935295 assert_eq ! ( actual_select_only, expected) ;
52945296}
@@ -5915,6 +5917,7 @@ fn parse_interval_and_or_xor() {
59155917 window_before_qualify: false ,
59165918 value_table_mode: None ,
59175919 connect_by: None ,
5920+ flavor: SelectFlavor :: Standard ,
59185921 } ) ) ) ,
59195922 order_by: None ,
59205923 limit: None ,
@@ -8022,6 +8025,7 @@ fn lateral_function() {
80228025 window_before_qualify : false ,
80238026 value_table_mode : None ,
80248027 connect_by : None ,
8028+ flavor : SelectFlavor :: Standard ,
80258029 } ;
80268030 assert_eq ! ( actual_select_only, expected) ;
80278031}
@@ -8919,6 +8923,7 @@ fn parse_merge() {
89198923 qualify: None ,
89208924 value_table_mode: None ,
89218925 connect_by: None ,
8926+ flavor: SelectFlavor :: Standard ,
89228927 } ) ) ) ,
89238928 order_by: None ,
89248929 limit: None ,
@@ -10703,6 +10708,7 @@ fn parse_unload() {
1070310708 qualify: None ,
1070410709 value_table_mode: None ,
1070510710 connect_by: None ,
10711+ flavor: SelectFlavor :: Standard ,
1070610712 } ) ) ) ,
1070710713 with: None ,
1070810714 limit: None ,
@@ -10913,6 +10919,7 @@ fn parse_connect_by() {
1091310919 ) ) ) ) ) ,
1091410920 } ] ,
1091510921 } ) ,
10922+ flavor : SelectFlavor :: Standard ,
1091610923 } ;
1091710924
1091810925 let connect_by_1 = concat ! (
@@ -10997,6 +11004,7 @@ fn parse_connect_by() {
1099711004 ) ) ) ) ) ,
1099811005 } ] ,
1099911006 } ) ,
11007+ flavor: SelectFlavor :: Standard ,
1100011008 }
1100111009 ) ;
1100211010
@@ -11860,6 +11868,7 @@ fn test_extract_seconds_ok() {
1186011868 window_before_qualify: false ,
1186111869 value_table_mode: None ,
1186211870 connect_by: None ,
11871+ flavor: SelectFlavor :: Standard ,
1186311872 } ) ) ) ,
1186411873 order_by: None ,
1186511874 limit: None ,
@@ -13592,3 +13601,65 @@ fn test_lambdas() {
1359213601 ) ;
1359313602 dialects. verified_expr ( "transform(array(1, 2, 3), x -> x + 1)" ) ;
1359413603}
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