Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix: Case within brackets
fixes #1673
  • Loading branch information
manticore-projects committed Nov 28, 2022
commit e0471b5d8ee025f031ee0ddfdd38c38a597ffac7
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 @@ -2228,10 +2228,17 @@ SelectExpressionItem SelectExpressionItem():
Alias alias = null;
}
{
expression=Expression() { selectExpressionItem = new SelectExpressionItem(); selectExpressionItem.setExpression(expression); }
(
LOOKAHEAD( Condition() ) expression = Condition()
Comment thread
manticore-projects marked this conversation as resolved.
|
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);
}
}