Skip to content

Commit 2ced7de

Browse files
Issue1673 case within brackets (#1675)
* fix: add missing public Getter Add public Getter for `updateSets` Fixes #1630 * fix: Case within brackets fixes #1673
1 parent a261832 commit 2ced7de

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2251,10 +2251,17 @@ SelectExpressionItem SelectExpressionItem():
22512251
Alias alias = null;
22522252
}
22532253
{
2254-
expression=Expression() { selectExpressionItem = new SelectExpressionItem(); selectExpressionItem.setExpression(expression); }
2254+
(
2255+
LOOKAHEAD( Condition() ) expression = Condition()
2256+
|
2257+
LOOKAHEAD( 3 ) expression = ConcatExpression()
2258+
|
2259+
expression=Expression()
2260+
) { selectExpressionItem = new SelectExpressionItem(); selectExpressionItem.setExpression(expression); }
22552261
[ LOOKAHEAD(2) alias=Alias() { selectExpressionItem.setAlias(alias); }] { return selectExpressionItem; }
22562262
}
22572263

2264+
22582265
SelectItem SelectItem() #SelectItem:
22592266
{
22602267
SelectItem selectItem = null;

src/test/java/net/sf/jsqlparser/expression/CaseExpressionTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,29 @@ public void testCaseAndSwitch() throws JSQLParserException {
8181
public void testCaseOrSwitch() throws JSQLParserException {
8282
TestUtils.assertExpressionCanBeParsedAndDeparsed("CASE true OR false WHEN true THEN 1 ELSE 2 END", true);
8383
}
84+
85+
@Test
86+
public void testCaseInsideBrackets() throws JSQLParserException {
87+
String sqlStr = "SELECT ( CASE\n"
88+
+ " WHEN something\n"
89+
+ " THEN CASE\n"
90+
+ " WHEN something2\n"
91+
+ " THEN 1\n"
92+
+ " ELSE 0\n"
93+
+ " END + 1\n"
94+
+ " ELSE 0\n"
95+
+ " END ) + 1 \n"
96+
+ "FROM test";
97+
98+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
99+
100+
sqlStr = "SELECT\n"
101+
+ "(CASE WHEN FIELD_A=0 THEN FIELD_B\n"
102+
+ "WHEN FIELD_C >FIELD_D THEN (CASE WHEN FIELD_A>0 THEN\n"
103+
+ "(FIELD_B)/(FIELD_A/(DATEDIFF(DAY,:started,:end)+1))\n"
104+
+ "ELSE 0 END)-FIELD_D ELSE 0 END)*FIELD_A/(DATEDIFF(DAY,:started,:end)+1) AS UNNECESSARY_COMPLEX_EXPRESSION\n"
105+
+ "FROM TEST";
106+
107+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
108+
}
84109
}

0 commit comments

Comments
 (0)