@@ -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 ,
@@ -5290,6 +5291,7 @@ fn test_parse_named_window() {
52905291 window_before_qualify : true ,
52915292 value_table_mode : None ,
52925293 connect_by : None ,
5294+ flavor : SelectFlavor :: Standard ,
52935295 } ;
52945296 assert_eq ! ( actual_select_only, expected) ;
52955297}
@@ -5916,6 +5918,7 @@ fn parse_interval_and_or_xor() {
59165918 window_before_qualify: false ,
59175919 value_table_mode: None ,
59185920 connect_by: None ,
5921+ flavor: SelectFlavor :: Standard ,
59195922 } ) ) ) ,
59205923 order_by: None ,
59215924 limit: None ,
@@ -8023,6 +8026,7 @@ fn lateral_function() {
80238026 window_before_qualify : false ,
80248027 value_table_mode : None ,
80258028 connect_by : None ,
8029+ flavor : SelectFlavor :: Standard ,
80268030 } ;
80278031 assert_eq ! ( actual_select_only, expected) ;
80288032}
@@ -8920,6 +8924,7 @@ fn parse_merge() {
89208924 qualify: None ,
89218925 value_table_mode: None ,
89228926 connect_by: None ,
8927+ flavor: SelectFlavor :: Standard ,
89238928 } ) ) ) ,
89248929 order_by: None ,
89258930 limit: None ,
@@ -10706,6 +10711,7 @@ fn parse_unload() {
1070610711 qualify: None ,
1070710712 value_table_mode: None ,
1070810713 connect_by: None ,
10714+ flavor: SelectFlavor :: Standard ,
1070910715 } ) ) ) ,
1071010716 with: None ,
1071110717 limit: None ,
@@ -10916,6 +10922,7 @@ fn parse_connect_by() {
1091610922 ) ) ) ) ) ,
1091710923 } ] ,
1091810924 } ) ,
10925+ flavor : SelectFlavor :: Standard ,
1091910926 } ;
1092010927
1092110928 let connect_by_1 = concat ! (
@@ -11000,6 +11007,7 @@ fn parse_connect_by() {
1100011007 ) ) ) ) ) ,
1100111008 } ] ,
1100211009 } ) ,
11010+ flavor: SelectFlavor :: Standard ,
1100311011 }
1100411012 ) ;
1100511013
@@ -11863,6 +11871,7 @@ fn test_extract_seconds_ok() {
1186311871 window_before_qualify: false ,
1186411872 value_table_mode: None ,
1186511873 connect_by: None ,
11874+ flavor: SelectFlavor :: Standard ,
1186611875 } ) ) ) ,
1186711876 order_by: None ,
1186811877 limit: None ,
@@ -13595,3 +13604,65 @@ fn test_lambdas() {
1359513604 ) ;
1359613605 dialects. verified_expr ( "transform(array(1, 2, 3), x -> x + 1)" ) ;
1359713606}
13607+
13608+ #[ test]
13609+ fn test_select_from_first ( ) {
13610+ let dialects = all_dialects_where ( |d| d. supports_from_first_select ( ) ) ;
13611+ let q1 = "FROM capitals" ;
13612+ let q2 = "FROM capitals SELECT *" ;
13613+
13614+ for ( q, flavor, projection) in [
13615+ ( q1, SelectFlavor :: FromFirstNoSelect , vec ! [ ] ) ,
13616+ (
13617+ q2,
13618+ SelectFlavor :: FromFirst ,
13619+ vec ! [ SelectItem :: Wildcard ( WildcardAdditionalOptions :: default ( ) ) ] ,
13620+ ) ,
13621+ ] {
13622+ let ast = dialects. verified_query ( q) ;
13623+ let expected = Query {
13624+ with : None ,
13625+ body : Box :: new ( SetExpr :: Select ( Box :: new ( Select {
13626+ select_token : AttachedToken :: empty ( ) ,
13627+ distinct : None ,
13628+ top : None ,
13629+ projection,
13630+ top_before_distinct : false ,
13631+ into : None ,
13632+ from : vec ! [ TableWithJoins {
13633+ relation: table_from_name( ObjectName :: from( vec![ Ident {
13634+ value: "capitals" . to_string( ) ,
13635+ quote_style: None ,
13636+ span: Span :: empty( ) ,
13637+ } ] ) ) ,
13638+ joins: vec![ ] ,
13639+ } ] ,
13640+ lateral_views : vec ! [ ] ,
13641+ prewhere : None ,
13642+ selection : None ,
13643+ group_by : GroupByExpr :: Expressions ( vec ! [ ] , vec ! [ ] ) ,
13644+ cluster_by : vec ! [ ] ,
13645+ distribute_by : vec ! [ ] ,
13646+ sort_by : vec ! [ ] ,
13647+ having : None ,
13648+ named_window : vec ! [ ] ,
13649+ window_before_qualify : false ,
13650+ qualify : None ,
13651+ value_table_mode : None ,
13652+ connect_by : None ,
13653+ flavor,
13654+ } ) ) ) ,
13655+ order_by : None ,
13656+ limit : None ,
13657+ offset : None ,
13658+ fetch : None ,
13659+ locks : vec ! [ ] ,
13660+ limit_by : vec ! [ ] ,
13661+ for_clause : None ,
13662+ settings : None ,
13663+ format_clause : None ,
13664+ } ;
13665+ assert_eq ! ( expected, ast) ;
13666+ assert_eq ! ( ast. to_string( ) , q) ;
13667+ }
13668+ }
0 commit comments