This is an automated email from the ASF dual-hosted git repository.

iffyio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new 7865de01 Fix `limit` in subqueries (#1899)
7865de01 is described below

commit 7865de015f8a45d9545dc7ca0659f37a0c3f7496
Author: Dima <111751109+dimchi...@users.noreply.github.com>
AuthorDate: Sun Jun 22 08:22:45 2025 +0100

    Fix `limit` in subqueries (#1899)
---
 src/ast/mod.rs            |  2 +-
 src/parser/mod.rs         |  2 +-
 tests/sqlparser_common.rs | 11 +++++++++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/ast/mod.rs b/src/ast/mod.rs
index 369489f5..17464f4a 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -748,7 +748,7 @@ pub enum Expr {
     /// `[ NOT ] IN (SELECT ...)`
     InSubquery {
         expr: Box<Expr>,
-        subquery: Box<SetExpr>,
+        subquery: Box<Query>,
         negated: bool,
     },
     /// `[ NOT ] IN UNNEST(array_expression)`
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index f60323b2..44bf58d0 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -3817,7 +3817,7 @@ impl<'a> Parser<'a> {
             });
         }
         self.expect_token(&Token::LParen)?;
-        let in_op = match self.maybe_parse(|p| 
p.parse_query_body(p.dialect.prec_unknown()))? {
+        let in_op = match self.maybe_parse(|p| p.parse_query())? {
             Some(subquery) => Expr::InSubquery {
                 expr: Box::new(expr),
                 subquery,
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index e4363ff6..52054604 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -2225,7 +2225,7 @@ fn parse_in_subquery() {
     assert_eq!(
         Expr::InSubquery {
             expr: Box::new(Expr::Identifier(Ident::new("segment"))),
-            subquery: verified_query("SELECT segm FROM bar").body,
+            subquery: Box::new(verified_query("SELECT segm FROM bar")),
             negated: false,
         },
         select.selection.unwrap()
@@ -2239,7 +2239,9 @@ fn parse_in_union() {
     assert_eq!(
         Expr::InSubquery {
             expr: Box::new(Expr::Identifier(Ident::new("segment"))),
-            subquery: verified_query("(SELECT segm FROM bar) UNION (SELECT 
segm FROM bar2)").body,
+            subquery: Box::new(verified_query(
+                "(SELECT segm FROM bar) UNION (SELECT segm FROM bar2)"
+            )),
             negated: false,
         },
         select.selection.unwrap()
@@ -15303,6 +15305,11 @@ fn parse_return() {
     let _ = all_dialects().verified_stmt("RETURN 1");
 }
 
+#[test]
+fn parse_subquery_limit() {
+    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)");
+}
+
 #[test]
 fn test_open() {
     let open_cursor = "OPEN Employee_Cursor";


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org
For additional commands, e-mail: commits-h...@datafusion.apache.org

Reply via email to