Skip to content

Commit

Permalink
Issue1673 case within brackets (#1675)
Browse files Browse the repository at this point in the history
* fix: add missing public Getter

Add public Getter for `updateSets`
Fixes #1630

* fix: Case within brackets

fixes #1673
  • Loading branch information
manticore-projects authored Jan 31, 2023
1 parent a261832 commit 2ced7de
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -2251,10 +2251,17 @@ SelectExpressionItem SelectExpressionItem():
Alias alias = null;
}
{
expression=Expression() { selectExpressionItem = new SelectExpressionItem(); selectExpressionItem.setExpression(expression); }
(
LOOKAHEAD( Condition() ) expression = Condition()
|
LOOKAHEAD( 3 ) expression = ConcatExpression()
|
expression=Expression()
) { selectExpressionItem = new SelectExpressionItem(); selectExpressionItem.setExpression(expression); }
[ LOOKAHEAD(2) alias=Alias() { selectExpressionItem.setAlias(alias); }] { return selectExpressionItem; }
}


SelectItem SelectItem() #SelectItem:
{
SelectItem selectItem = null;
Expand Down
25 changes: 25 additions & 0 deletions src/test/java/net/sf/jsqlparser/expression/CaseExpressionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,29 @@ public void testCaseAndSwitch() throws JSQLParserException {
public void testCaseOrSwitch() throws JSQLParserException {
TestUtils.assertExpressionCanBeParsedAndDeparsed("CASE true OR false WHEN true THEN 1 ELSE 2 END", true);
}

@Test
public void testCaseInsideBrackets() throws JSQLParserException {
String sqlStr = "SELECT ( CASE\n"
+ " WHEN something\n"
+ " THEN CASE\n"
+ " WHEN something2\n"
+ " THEN 1\n"
+ " ELSE 0\n"
+ " END + 1\n"
+ " ELSE 0\n"
+ " END ) + 1 \n"
+ "FROM test";

TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);

sqlStr = "SELECT\n"
+ "(CASE WHEN FIELD_A=0 THEN FIELD_B\n"
+ "WHEN FIELD_C >FIELD_D THEN (CASE WHEN FIELD_A>0 THEN\n"
+ "(FIELD_B)/(FIELD_A/(DATEDIFF(DAY,:started,:end)+1))\n"
+ "ELSE 0 END)-FIELD_D ELSE 0 END)*FIELD_A/(DATEDIFF(DAY,:started,:end)+1) AS UNNECESSARY_COMPLEX_EXPRESSION\n"
+ "FROM TEST";

TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true);
}
}

0 comments on commit 2ced7de

Please sign in to comment.