Skip to content

Commit b378f62

Browse files
Dimchikkkalamb
authored andcommitted
Fix limit in subqueries (apache#1899)
1 parent a5b9821 commit b378f62

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

src/ast/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ pub enum Expr {
729729
/// `[ NOT ] IN (SELECT ...)`
730730
InSubquery {
731731
expr: Box<Expr>,
732-
subquery: Box<SetExpr>,
732+
subquery: Box<Query>,
733733
negated: bool,
734734
},
735735
/// `[ NOT ] IN UNNEST(array_expression)`

src/parser/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3752,7 +3752,7 @@ impl<'a> Parser<'a> {
37523752
});
37533753
}
37543754
self.expect_token(&Token::LParen)?;
3755-
let in_op = match self.maybe_parse(|p| p.parse_query_body(p.dialect.prec_unknown()))? {
3755+
let in_op = match self.maybe_parse(|p| p.parse_query())? {
37563756
Some(subquery) => Expr::InSubquery {
37573757
expr: Box::new(expr),
37583758
subquery,

tests/sqlparser_common.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2224,7 +2224,7 @@ fn parse_in_subquery() {
22242224
assert_eq!(
22252225
Expr::InSubquery {
22262226
expr: Box::new(Expr::Identifier(Ident::new("segment"))),
2227-
subquery: verified_query("SELECT segm FROM bar").body,
2227+
subquery: Box::new(verified_query("SELECT segm FROM bar")),
22282228
negated: false,
22292229
},
22302230
select.selection.unwrap()
@@ -2238,7 +2238,9 @@ fn parse_in_union() {
22382238
assert_eq!(
22392239
Expr::InSubquery {
22402240
expr: Box::new(Expr::Identifier(Ident::new("segment"))),
2241-
subquery: verified_query("(SELECT segm FROM bar) UNION (SELECT segm FROM bar2)").body,
2241+
subquery: Box::new(verified_query(
2242+
"(SELECT segm FROM bar) UNION (SELECT segm FROM bar2)"
2243+
)),
22422244
negated: false,
22432245
},
22442246
select.selection.unwrap()
@@ -15103,3 +15105,8 @@ fn parse_return() {
1510315105

1510415106
let _ = all_dialects().verified_stmt("RETURN 1");
1510515107
}
15108+
15109+
#[test]
15110+
fn parse_subquery_limit() {
15111+
let _ = all_dialects().verified_stmt("SELECT t1_id, t1_name FROM t1 WHERE t1_id IN (SELECT t2_id FROM t2 WHERE t1_name = t2_name LIMIT 10)");
15112+
}

0 commit comments

Comments
 (0)