diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
index 7339e68ba..c3c20a018 100644
--- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
+++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
@@ -9475,7 +9475,6 @@ PlainSelect PlainSelect() #PlainSelect:
OracleHierarchicalExpression oracleHierarchicalQueryClause = null;
PreferringClause preferringClause = null;
ExpressionList expressionList = null;
- boolean partitionByBrackets = false;
List
intoTables = null;
MySqlSelectIntoClause mySqlSelectIntoClause = null;
MySqlProcedureAnalyse mySqlProcedureAnalyse = null;
@@ -9581,13 +9580,9 @@ PlainSelect PlainSelect() #PlainSelect:
[ LOOKAHEAD(2) oracleHierarchicalQueryClause=OracleHierarchicalQueryClause() { plainSelect.setOracleHierarchical(oracleHierarchicalQueryClause); } ]
[ LOOKAHEAD(2) preferringClause=PreferringClause() { plainSelect.setPreferringClause(preferringClause); }
[LOOKAHEAD(2)
- (
- LOOKAHEAD(2) expressionList=ComplexExpressionList()
- |
- "(" {partitionByBrackets = true;} expressionList=ComplexExpressionList() ")"
- )
+ expressionList=ComplexExpressionList()
{
- preferringClause.setPartitionExpressionList(expressionList, partitionByBrackets);
+ preferringClause.setPartitionExpressionList(expressionList, false);
}
]
]
@@ -14463,7 +14458,6 @@ JsonAggregateFunction JsonAggregateFunction() : {
ExpressionList expressionList = null;
List olist = null;
WindowElement windowElement = null;
- boolean partitionByBrackets = false;
}
{
(
@@ -14550,13 +14544,12 @@ JsonAggregateFunction JsonAggregateFunction() : {
{result.setAnalyticType(AnalyticType.OVER);}
"("
[
- (LOOKAHEAD(3) expressionList=ComplexExpressionList()
- | "(" {partitionByBrackets = true;} expressionList=ComplexExpressionList() ")" )
+ expressionList=ComplexExpressionList()
]
[olist=OrderByElements() ]
[windowElement = WindowElement() ]
{
- result.setPartitionExpressionList(expressionList, partitionByBrackets);
+ result.setPartitionExpressionList(expressionList, false);
result.setOrderByElements(olist);
result.setWindowElement(windowElement);
}
@@ -14698,7 +14691,6 @@ KeepExpression KeepExpression() : {
void windowFun(AnalyticExpression retval):{
ExpressionList expressionList = null;
- boolean partitionByBrackets = false;
String windowName = null;
WindowDefinition winDef;
} {
@@ -14722,10 +14714,9 @@ void windowFun(AnalyticExpression retval):{
[
LOOKAHEAD(2) "("
[
- (LOOKAHEAD(3) expressionList=ComplexExpressionList()
- | "(" {partitionByBrackets = true;} expressionList=ComplexExpressionList() ")" )
+ expressionList=ComplexExpressionList()
]
- ")" { winDef.setPartitionExpressionList(expressionList, partitionByBrackets); retval.setType(AnalyticType.WITHIN_GROUP_OVER); }
+ ")" { winDef.setPartitionExpressionList(expressionList, false); retval.setType(AnalyticType.WITHIN_GROUP_OVER); }
]
)
}
@@ -14734,7 +14725,6 @@ WindowDefinition windowDefinition() : {
ExpressionList expressionList = null;
List olist = null;
WindowElement windowElement = null;
- boolean partitionByBrackets = false;
WindowDefinition winDef = new WindowDefinition();
String baseWindowName;
} {
@@ -14748,13 +14738,12 @@ WindowDefinition windowDefinition() : {
{}
)
[
- (LOOKAHEAD(3) expressionList=ComplexExpressionList()
- | "(" {partitionByBrackets = true;} expressionList=ComplexExpressionList() ")" )
+ expressionList=ComplexExpressionList()
]
[olist=OrderByElements() ]
[windowElement = WindowElement() ]
{
- winDef.setPartitionExpressionList(expressionList, partitionByBrackets);
+ winDef.setPartitionExpressionList(expressionList, false);
winDef.setOrderByElements(olist);
winDef.setWindowElement(windowElement);
}
diff --git a/src/test/java/net/sf/jsqlparser/expression/AnalyticExpressionTest.java b/src/test/java/net/sf/jsqlparser/expression/AnalyticExpressionTest.java
index df4ef1eba..b1a7b059f 100644
--- a/src/test/java/net/sf/jsqlparser/expression/AnalyticExpressionTest.java
+++ b/src/test/java/net/sf/jsqlparser/expression/AnalyticExpressionTest.java
@@ -43,4 +43,23 @@ void testDatabricks() throws JSQLParserException {
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
}
+
+ @Test
+ void testPartitionByBracketedOperand() throws JSQLParserException {
+ TestUtils.assertSqlCanBeParsedAndDeparsed(
+ "SELECT SUM(x) OVER (PARTITION BY (1 + a) / 2 ORDER BY b) FROM t", true);
+
+ TestUtils.assertSqlCanBeParsedAndDeparsed(
+ "SELECT SUM(x) OVER w FROM t WINDOW w AS (PARTITION BY (1 + a) / 2)", true);
+
+ TestUtils.assertSqlCanBeParsedAndDeparsed(
+ "SELECT LISTAGG(x, ',') WITHIN GROUP (ORDER BY y) OVER (PARTITION BY (1 + a) / 2) FROM t",
+ true);
+
+ TestUtils.assertSqlCanBeParsedAndDeparsed(
+ "SELECT * FROM t PREFERRING HIGH x PARTITION BY (1 + a) / 2", true);
+
+ TestUtils.assertSqlCanBeParsedAndDeparsed(
+ "SELECT SUM(x) OVER (PARTITION BY (a, b), c) FROM t", true);
+ }
}