From 53297f85fb663429bce06e7c1ac65649647490e4 Mon Sep 17 00:00:00 2001 From: David Hayes Date: Tue, 5 Aug 2025 14:44:11 +0100 Subject: [PATCH] Fix[2288] - Support parenthesed expressions within Between Supports the SQL of the form: ```sql SELECT * FROM tbl WHERE day BETWEEN CAST(CAST((NOW() + INTERVAL '-30 day') AS date) AS timestamptz) AND CAST(CAST((NOW() + INTERVAL '-1 day') AS date) AS timestamptz); ``` --- src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 8 ++++---- src/test/resources/simple_parsing.txt | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 35238b44e..fb9e42c6a 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -5746,18 +5746,18 @@ Expression Between(Expression leftExpression) : ) ] ( - LOOKAHEAD( 3 ) betweenExpressionStart = ParenthesedSelect() + LOOKAHEAD( ParenthesedSelect() ) betweenExpressionStart = ParenthesedSelect() | - LOOKAHEAD( 11 ) betweenExpressionStart = RegularCondition() + LOOKAHEAD( RegularCondition() ) betweenExpressionStart = RegularCondition() | betweenExpressionStart = SimpleExpression() ) ( - LOOKAHEAD( 3 ) betweenExpressionEnd = ParenthesedSelect() + LOOKAHEAD( ParenthesedSelect() ) betweenExpressionEnd = ParenthesedSelect() | - LOOKAHEAD( 11 ) betweenExpressionEnd = RegularCondition() + LOOKAHEAD( RegularCondition() ) betweenExpressionEnd = RegularCondition() | betweenExpressionEnd = SimpleExpression() ) diff --git a/src/test/resources/simple_parsing.txt b/src/test/resources/simple_parsing.txt index 40824e8f2..7ae242dfc 100644 --- a/src/test/resources/simple_parsing.txt +++ b/src/test/resources/simple_parsing.txt @@ -210,4 +210,10 @@ AND THIS_EMP.WORKDEPT = DINFO.DEPTNO select * from Person where deptname='it' AND NOT (age=24) -select * from unnest(array[4,5,6]) with ordinality; \ No newline at end of file +select * from unnest(array[4,5,6]) with ordinality; + +SELECT * FROM tbl WHERE +day BETWEEN + CAST(CAST((NOW() + INTERVAL '-30 day') AS date) AS timestamptz) +AND + CAST(CAST((NOW() + INTERVAL '-1 day') AS date) AS timestamptz); \ No newline at end of file