1010package net .sf .jsqlparser .expression ;
1111
1212import net .sf .jsqlparser .expression .operators .relational .ExpressionList ;
13+ import net .sf .jsqlparser .expression .operators .relational .ParenthesedExpressionList ;
1314import net .sf .jsqlparser .parser .ASTNodeAccessImpl ;
1415
1516import java .util .ArrayList ;
1617import java .util .Collections ;
1718import java .util .List ;
19+ import java .util .function .Consumer ;
1820
1921public class LambdaExpression extends ASTNodeAccessImpl implements Expression {
2022 private List <String > identifiers ;
2123 private Expression expression ;
24+ private boolean parenthesized ;
2225
2326 public LambdaExpression (String identifier , Expression expression ) {
2427 this .identifiers = Collections .singletonList (identifier );
@@ -36,7 +39,18 @@ public static LambdaExpression from(ExpressionList<? extends Expression> express
3639 for (Expression variable : expressionList ) {
3740 identifiers .add (variable .toString ());
3841 }
39- return new LambdaExpression (identifiers , expression );
42+ return new LambdaExpression (identifiers , expression )
43+ .setParenthesized (expressionList instanceof ParenthesedExpressionList );
44+ }
45+
46+ /** Whether the parameter list was explicitly parenthesized, including a single parameter. */
47+ public boolean isParenthesized () {
48+ return parenthesized ;
49+ }
50+
51+ public LambdaExpression setParenthesized (boolean parenthesized ) {
52+ this .parenthesized = parenthesized ;
53+ return this ;
4054 }
4155
4256 public List <String > getIdentifiers () {
@@ -58,7 +72,11 @@ public LambdaExpression setExpression(Expression expression) {
5872 }
5973
6074 public StringBuilder appendTo (StringBuilder builder ) {
61- if (identifiers .size () == 1 ) {
75+ return appendTo (builder , builder ::append );
76+ }
77+
78+ public StringBuilder appendTo (StringBuilder builder , Consumer <Expression > expressionPrinter ) {
79+ if (identifiers .size () == 1 && !parenthesized ) {
6280 builder .append (identifiers .get (0 ));
6381 } else {
6482 int i = 0 ;
@@ -68,7 +86,9 @@ public StringBuilder appendTo(StringBuilder builder) {
6886 }
6987 builder .append (" )" );
7088 }
71- return builder .append (" -> " ).append (expression );
89+ builder .append (" -> " );
90+ expressionPrinter .accept (expression );
91+ return builder ;
7292 }
7393
7494 @ Override
0 commit comments