mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 14:28:22 +00:00
Implement FROM-first selects (#1713)
This commit is contained in:
parent
cad49232c1
commit
46cfcfe8f7
13 changed files with 184 additions and 9 deletions
|
@ -101,6 +101,7 @@ fn parse_map_access_expr() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
},
|
||||
select
|
||||
);
|
||||
|
|
|
@ -461,6 +461,7 @@ fn parse_update_set_from() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -5289,6 +5290,7 @@ fn test_parse_named_window() {
|
|||
window_before_qualify: true,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
};
|
||||
assert_eq!(actual_select_only, expected);
|
||||
}
|
||||
|
@ -5915,6 +5917,7 @@ fn parse_interval_and_or_xor() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -8022,6 +8025,7 @@ fn lateral_function() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
};
|
||||
assert_eq!(actual_select_only, expected);
|
||||
}
|
||||
|
@ -8919,6 +8923,7 @@ fn parse_merge() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -10703,6 +10708,7 @@ fn parse_unload() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
with: None,
|
||||
limit: None,
|
||||
|
@ -10913,6 +10919,7 @@ fn parse_connect_by() {
|
|||
))))),
|
||||
}],
|
||||
}),
|
||||
flavor: SelectFlavor::Standard,
|
||||
};
|
||||
|
||||
let connect_by_1 = concat!(
|
||||
|
@ -10997,6 +11004,7 @@ fn parse_connect_by() {
|
|||
))))),
|
||||
}],
|
||||
}),
|
||||
flavor: SelectFlavor::Standard,
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -11860,6 +11868,7 @@ fn test_extract_seconds_ok() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -13592,3 +13601,65 @@ fn test_lambdas() {
|
|||
);
|
||||
dialects.verified_expr("transform(array(1, 2, 3), x -> x + 1)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_select_from_first() {
|
||||
let dialects = all_dialects_where(|d| d.supports_from_first_select());
|
||||
let q1 = "FROM capitals";
|
||||
let q2 = "FROM capitals SELECT *";
|
||||
|
||||
for (q, flavor, projection) in [
|
||||
(q1, SelectFlavor::FromFirstNoSelect, vec![]),
|
||||
(
|
||||
q2,
|
||||
SelectFlavor::FromFirst,
|
||||
vec![SelectItem::Wildcard(WildcardAdditionalOptions::default())],
|
||||
),
|
||||
] {
|
||||
let ast = dialects.verified_query(q);
|
||||
let expected = Query {
|
||||
with: None,
|
||||
body: Box::new(SetExpr::Select(Box::new(Select {
|
||||
select_token: AttachedToken::empty(),
|
||||
distinct: None,
|
||||
top: None,
|
||||
projection,
|
||||
top_before_distinct: false,
|
||||
into: None,
|
||||
from: vec![TableWithJoins {
|
||||
relation: table_from_name(ObjectName::from(vec![Ident {
|
||||
value: "capitals".to_string(),
|
||||
quote_style: None,
|
||||
span: Span::empty(),
|
||||
}])),
|
||||
joins: vec![],
|
||||
}],
|
||||
lateral_views: vec![],
|
||||
prewhere: None,
|
||||
selection: None,
|
||||
group_by: GroupByExpr::Expressions(vec![], vec![]),
|
||||
cluster_by: vec![],
|
||||
distribute_by: vec![],
|
||||
sort_by: vec![],
|
||||
having: None,
|
||||
named_window: vec![],
|
||||
window_before_qualify: false,
|
||||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
offset: None,
|
||||
fetch: None,
|
||||
locks: vec![],
|
||||
limit_by: vec![],
|
||||
for_clause: None,
|
||||
settings: None,
|
||||
format_clause: None,
|
||||
};
|
||||
assert_eq!(expected, ast);
|
||||
assert_eq!(ast.to_string(), q);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -288,6 +288,7 @@ fn test_select_union_by_name() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
right: Box::<SetExpr>::new(SetExpr::Select(Box::new(Select {
|
||||
select_token: AttachedToken::empty(),
|
||||
|
@ -317,6 +318,7 @@ fn test_select_union_by_name() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
});
|
||||
assert_eq!(ast.body, expected);
|
||||
|
|
|
@ -137,6 +137,7 @@ fn parse_create_procedure() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
})))
|
||||
}))],
|
||||
params: Some(vec![
|
||||
|
@ -1114,6 +1115,7 @@ fn parse_substring_in_select() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -1251,6 +1253,7 @@ fn parse_mssql_declare() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
})))
|
||||
}))
|
||||
],
|
||||
|
|
|
@ -1111,6 +1111,7 @@ fn parse_escaped_quote_identifiers_with_escape() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -1164,6 +1165,7 @@ fn parse_escaped_quote_identifiers_with_no_escape() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -1211,6 +1213,7 @@ fn parse_escaped_backticks_with_escape() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -1262,6 +1265,7 @@ fn parse_escaped_backticks_with_no_escape() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -1931,6 +1935,7 @@ fn parse_select_with_numeric_prefix_column_name() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
})))
|
||||
);
|
||||
}
|
||||
|
@ -1983,6 +1988,7 @@ fn parse_select_with_concatenation_of_exp_number_and_numeric_prefix_column() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
})))
|
||||
);
|
||||
}
|
||||
|
@ -2503,6 +2509,7 @@ fn parse_substring_in_select() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -2799,6 +2806,7 @@ fn parse_hex_string_introducer() {
|
|||
value_table_mode: None,
|
||||
into: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
|
|
@ -1315,6 +1315,7 @@ fn parse_copy_to() {
|
|||
qualify: None,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
order_by: None,
|
||||
limit: None,
|
||||
|
@ -2666,6 +2667,7 @@ fn parse_array_subquery_expr() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
right: Box::new(SetExpr::Select(Box::new(Select {
|
||||
select_token: AttachedToken::empty(),
|
||||
|
@ -2688,6 +2690,7 @@ fn parse_array_subquery_expr() {
|
|||
window_before_qualify: false,
|
||||
value_table_mode: None,
|
||||
connect_by: None,
|
||||
flavor: SelectFlavor::Standard,
|
||||
}))),
|
||||
}),
|
||||
order_by: None,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue