Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue1673 case within brackets #1675

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
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
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()
manticore-projects marked this conversation as resolved.
Show resolved Hide 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);
}
}