Skip to content

Commit 6e3099c

Browse files
committed
fixes #605
1 parent 96ea5c6 commit 6e3099c

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

src/main/java/net/sf/jsqlparser/expression/operators/relational/ExpressionList.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
package net.sf.jsqlparser.expression.operators.relational;
2323

24+
import java.util.Arrays;
2425
import java.util.List;
2526

2627
import net.sf.jsqlparser.expression.Expression;
@@ -39,6 +40,10 @@ public ExpressionList() {
3940
public ExpressionList(List<Expression> expressions) {
4041
this.expressions = expressions;
4142
}
43+
44+
public ExpressionList(Expression ... expressions) {
45+
this.expressions = Arrays.asList(expressions);
46+
}
4247

4348
public List<Expression> getExpressions() {
4449
return expressions;

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,9 @@ private void visitBinaryExpression(BinaryExpression binaryExpression, String ope
385385

386386
@Override
387387
public void visit(SubSelect subSelect) {
388-
buffer.append("(");
388+
if (subSelect.isUseBrackets()) {
389+
buffer.append("(");
390+
}
389391
if (selectVisitor != null) {
390392
if (subSelect.getWithItemsList() != null) {
391393
buffer.append("WITH ");
@@ -402,7 +404,9 @@ public void visit(SubSelect subSelect) {
402404

403405
subSelect.getSelectBody().accept(selectVisitor);
404406
}
405-
buffer.append(")");
407+
if (subSelect.isUseBrackets()) {
408+
buffer.append(")");
409+
}
406410
}
407411

408412
@Override

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2840,14 +2840,16 @@ Function Function() #Function:
28402840
String tmp = null;
28412841
ExpressionList expressionList = null;
28422842
KeepExpression keep = null;
2843+
SubSelect expr = null;
28432844
}
28442845
{
28452846
["{fn" { retval.setEscaped(true); } ]
28462847

28472848
funcName=RelObjectNameExt()
28482849

28492850
[ "." tmp=RelObjectNameExt() { funcName+= "." + tmp; } ["." tmp=RelObjectNameExt() { funcName+= "." + tmp; }]]
2850-
"(" [ [<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }] (expressionList=SimpleExpressionList() | "*" { retval.setAllColumns(true); }) ] ")"
2851+
"(" [ [<K_DISTINCT> { retval.setDistinct(true); } | <K_ALL> { retval.setAllColumns(true); }] (LOOKAHEAD(3) expressionList=SimpleExpressionList() | "*" { retval.setAllColumns(true); }
2852+
| expr = SubSelect() { expr.setUseBrackets(false); expressionList = new ExpressionList(expr); } ) ] ")"
28512853

28522854
[ "." tmp=RelObjectName() { retval.setAttribute(tmp); }]
28532855

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2801,4 +2801,12 @@ public void testProblemSqlIssue603() throws JSQLParserException {
28012801
public void testProblemSqlIssue603_2() throws JSQLParserException {
28022802
assertSqlCanBeParsedAndDeparsed("SELECT CAST(col1 AS UNSIGNED INTEGER) FROM mytable");
28032803
}
2804+
2805+
public void testProblemSqlFuncParamIssue605() throws JSQLParserException {
2806+
assertSqlCanBeParsedAndDeparsed("SELECT p.id, pt.name, array_to_string( array( select pc.name from product_category pc ), ',' ) AS categories FROM product p", true);
2807+
}
2808+
2809+
public void testProblemSqlFuncParamIssue605_2() throws JSQLParserException {
2810+
assertSqlCanBeParsedAndDeparsed("SELECT func(SELECT col1 FROM mytable)");
2811+
}
28042812
}

0 commit comments

Comments
 (0)