Skip to content

Commit 750f3d1

Browse files
Fixes Function Parameter List Brackets issue #1239 (#1240)
1 parent f7ea4a5 commit 750f3d1

File tree

3 files changed

+13
-26
lines changed

3 files changed

+13
-26
lines changed

src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ public class ExpressionDeParser extends AbstractDeParser<Expression>
112112

113113
private static final String NOT = "NOT ";
114114
private SelectVisitor selectVisitor;
115-
private boolean useBracketsInExprList = true;
116115
private OrderByDeParser orderByDeParser = new OrderByDeParser();
117116

118117
public ExpressionDeParser() {
@@ -487,20 +486,13 @@ public void visit(Function function) {
487486
} else if (function.getParameters() == null && function.getNamedParameters() == null) {
488487
buffer.append("()");
489488
} else {
490-
boolean oldUseBracketsInExprList = useBracketsInExprList;
491-
useBracketsInExprList = !function.isDistinct() &&
492-
!function.isAllColumns() &&
493-
function.getOrderByElements() == null;
494-
if (!useBracketsInExprList) {
495-
buffer.append("(");
496-
}
489+
buffer.append("(");
497490
if (function.isDistinct()) {
498491
buffer.append("DISTINCT ");
499492
} else if (function.isAllColumns()) {
500493
buffer.append("ALL ");
501494
} else if (function.isUnique()) {
502-
useBracketsInExprList = false;
503-
buffer.append("(UNIQUE ");
495+
buffer.append("UNIQUE ");
504496
}
505497
if (function.getNamedParameters() != null) {
506498
visit(function.getNamedParameters());
@@ -522,11 +514,7 @@ public void visit(Function function) {
522514
orderByDeParser.deParseElement(orderByElement);
523515
}
524516
}
525-
if (!useBracketsInExprList) {
526-
buffer.append(")");
527-
}
528-
useBracketsInExprList = oldUseBracketsInExprList;
529-
517+
buffer.append(")");
530518
}
531519

532520
if (function.getAttribute() != null) {
@@ -545,7 +533,7 @@ public void visit(Function function) {
545533

546534
@Override
547535
public void visit(ExpressionList expressionList) {
548-
if (useBracketsInExprList) {
536+
if (expressionList.isUsingBrackets()) {
549537
buffer.append("(");
550538
}
551539
for (Iterator<Expression> iter = expressionList.getExpressions().iterator(); iter.hasNext();) {
@@ -555,16 +543,13 @@ public void visit(ExpressionList expressionList) {
555543
buffer.append(", ");
556544
}
557545
}
558-
if (useBracketsInExprList) {
546+
if (expressionList.isUsingBrackets()) {
559547
buffer.append(")");
560548
}
561549
}
562550

563551
@Override
564552
public void visit(NamedExpressionList namedExpressionList) {
565-
if (useBracketsInExprList) {
566-
buffer.append("(");
567-
}
568553
List<String> names = namedExpressionList.getNames();
569554
List<Expression> expressions = namedExpressionList.getExpressions();
570555
for (int i = 0; i < names.size(); i++) {
@@ -578,9 +563,6 @@ public void visit(NamedExpressionList namedExpressionList) {
578563
}
579564
expressions.get(i).accept(this);
580565
}
581-
if (useBracketsInExprList) {
582-
buffer.append(")");
583-
}
584566
}
585567

586568
public SelectVisitor getSelectVisitor() {

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4029,11 +4029,11 @@ Function InternalFunction(Function retval) :
40294029
|
40304030
LOOKAHEAD(NamedExpressionListExprFirst(), { getAsBoolean(Feature.allowComplexParsing) }) namedExpressionList = NamedExpressionListExprFirst()
40314031
|
4032-
LOOKAHEAD(3, { getAsBoolean(Feature.allowComplexParsing) }) (expressionList=ComplexExpressionList() [ orderByList = OrderByElements() { retval.setOrderByElements(orderByList); } ])
4032+
LOOKAHEAD(3, { getAsBoolean(Feature.allowComplexParsing) }) (expressionList=ComplexExpressionList() {expressionList.setUsingBrackets(false);} [ orderByList = OrderByElements() { retval.setOrderByElements(orderByList); } ])
40334033
|
4034-
LOOKAHEAD(3) (expressionList=SimpleExpressionList(true) [ orderByList = OrderByElements() { retval.setOrderByElements(orderByList); } ])
4034+
LOOKAHEAD(3) (expressionList=SimpleExpressionList(false) [ orderByList = OrderByElements() { retval.setOrderByElements(orderByList); } ])
40354035
|
4036-
expr = SubSelect() { expr.setUseBrackets(false); expressionList = new ExpressionList(expr); }
4036+
expr = SubSelect() { expr.setUseBrackets(false); expressionList = new ExpressionList(expr).withUsingBrackets(false); }
40374037

40384038
)]
40394039
[ <K_IGNORE> <K_NULLS> {retval.setIgnoreNulls(true); }]

src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4615,5 +4615,10 @@ public void testGroupedByWithExtraBracketsIssue1168() throws JSQLParserException
46154615
public void testSelectRowElement() throws JSQLParserException {
46164616
assertSqlCanBeParsedAndDeparsed("SELECT (t.tup).id, (tup).name FROM t WHERE (t.tup).id IN (1, 2, 3)");
46174617
}
4618+
4619+
@Test
4620+
public void testMissinBracketsNestedInIssue() throws JSQLParserException {
4621+
assertSqlCanBeParsedAndDeparsed("SELECT COUNT(DISTINCT CASE WHEN room IN (11167, 12074, 4484, 4483, 6314, 11168, 10336, 16445, 13176, 13177, 13178) THEN uid END) AS uidCount from tableName", true);
4622+
}
46184623

46194624
}

0 commit comments

Comments
 (0)