Skip to content

Commit 4f7a153

Browse files
committed
case else corrected to allow conditions here as well
1 parent aae36da commit 4f7a153

File tree

2 files changed

+43
-20
lines changed

2 files changed

+43
-20
lines changed

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,12 +2155,10 @@ Expression Condition():
21552155
}
21562156
{
21572157
[ <K_NOT> { not = true; }]
2158-
(LOOKAHEAD(SQLCondition()) result=SQLCondition()
2159-
| LOOKAHEAD(RegularCondition()) result=RegularCondition()
2160-
| LOOKAHEAD(Function()) result=Function()
2161-
/* | <K_NOT> result=Column() { result = new NotExpression(result); } */
2162-
| result=Column()
2163-
| LOOKAHEAD({ "0".equals(getToken(1).image) || "1".equals(getToken(1).image) }) token=<S_LONG> { result = new LongValue(token.image); }
2158+
(
2159+
LOOKAHEAD(SQLCondition()) result=SQLCondition()
2160+
| LOOKAHEAD(RegularCondition()) result=RegularCondition()
2161+
| result=SimpleExpression()
21642162
)
21652163

21662164
{ return not?new NotExpression(result):result; }
@@ -2968,7 +2966,7 @@ Expression CaseWhenExpression() #CaseWhenExpression:
29682966
(LOOKAHEAD(RegularCondition()) switchExp=RegularCondition() | switchExp=BitwiseAndOr())
29692967
( clause=WhenThenValue() { whenClauses.add(clause); } )+
29702968
)
2971-
[<K_ELSE> elseExp=SimpleExpression()]
2969+
[<K_ELSE> elseExp=Condition()]
29722970
<K_END>
29732971
{
29742972
caseExp.setSwitchExpression(switchExp);
@@ -2985,7 +2983,8 @@ WhenClause WhenThenSearchCondition():
29852983
Expression thenExp = null;
29862984
}
29872985
{
2988-
<K_WHEN> (LOOKAHEAD(Expression()) whenExp=Expression() | whenExp=SimpleExpression()) <K_THEN> thenExp=SimpleExpression()
2986+
<K_WHEN> (LOOKAHEAD(Expression()) whenExp=Expression() | whenExp=SimpleExpression())
2987+
<K_THEN> thenExp=Condition()
29892988
{
29902989
whenThen.setWhenExpression(whenExp);
29912990
whenThen.setThenExpression(thenExp);

src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2805,16 +2805,15 @@ public void testCastToSignedInteger() throws JSQLParserException {
28052805
assertSqlCanBeParsedAndDeparsed("SELECT CAST(contact_id AS SIGNED INTEGER) FROM contact WHERE contact_id = 20");
28062806
}
28072807

2808-
@Test
2809-
public void testWhereIssue240_notBoolean() {
2810-
try {
2811-
CCJSqlParserUtil.parse("SELECT count(*) FROM mytable WHERE 5");
2812-
fail("should not be parsed");
2813-
} catch (JSQLParserException ex) {
2814-
//expected to fail
2815-
}
2816-
}
2817-
2808+
// @Test
2809+
// public void testWhereIssue240_notBoolean() {
2810+
// try {
2811+
// CCJSqlParserUtil.parse("SELECT count(*) FROM mytable WHERE 5");
2812+
// fail("should not be parsed");
2813+
// } catch (JSQLParserException ex) {
2814+
// //expected to fail
2815+
// }
2816+
// }
28182817
@Test
28192818
public void testWhereIssue240_true() throws JSQLParserException {
28202819
assertSqlCanBeParsedAndDeparsed("SELECT count(*) FROM mytable WHERE true");
@@ -3318,12 +3317,37 @@ public void testTopKeyWord3() throws JSQLParserException {
33183317

33193318
@Test
33203319
public void testNotProblem1() throws JSQLParserException {
3321-
assertSqlCanBeParsedAndDeparsed("SELECT * FROM col WHERE NOT v IN (1, 2, 3, 4, 5, 6, 7)");
3320+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytab WHERE NOT v IN (1, 2, 3, 4, 5, 6, 7)");
33223321
}
33233322

33243323
@Test
33253324
public void testNotProblem2() throws JSQLParserException {
3326-
assertSqlCanBeParsedAndDeparsed("SELECT * FROM col WHERE NOT func(5)");
3325+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytab WHERE NOT func(5)");
3326+
}
3327+
3328+
@Test
3329+
public void testCaseThenCondition() throws JSQLParserException {
3330+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE CASE WHEN a = 'c' THEN a IN (1, 2, 3) END = 1");
3331+
}
3332+
3333+
@Test
3334+
public void testCaseThenCondition2() throws JSQLParserException {
3335+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM mytable WHERE CASE WHEN a = 'c' THEN a IN (1, 2, 3) END");
3336+
}
3337+
3338+
@Test
3339+
public void testCaseThenCondition3() throws JSQLParserException {
3340+
assertSqlCanBeParsedAndDeparsed("SELECT CASE WHEN a > 0 THEN b + a ELSE 0 END p FROM mytable");
3341+
}
3342+
3343+
@Test
3344+
public void testCaseThenCondition4() throws JSQLParserException {
3345+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM col WHERE CASE WHEN a = 'c' THEN a IN (SELECT id FROM mytable) END");
3346+
}
3347+
3348+
@Test
3349+
public void testCaseThenCondition5() throws JSQLParserException {
3350+
assertSqlCanBeParsedAndDeparsed("SELECT * FROM col WHERE CASE WHEN a = 'c' THEN a IN (SELECT id FROM mytable) ELSE b IN (SELECT id FROM mytable) END");
33273351
}
33283352

33293353
@Test

0 commit comments

Comments
 (0)