From 51c92d89389f780e01d30ce4424f8cd681c0b568 Mon Sep 17 00:00:00 2001 From: wumpz Date: Wed, 16 Oct 2019 23:40:42 +0200 Subject: [PATCH] fixes #862 --- README.md | 1 + src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 2 +- .../java/net/sf/jsqlparser/statement/select/SelectTest.java | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b9bbe532..4f59614d0 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ Also I would like to know about needed examples or documentation stuff. ## Extensions in the latest SNAPSHOT version 3.1 +* allow more complex expressions for **CASE**. * allowed **start** as object name as column name or table name * introduced more positions for **!** instead of **NOT** * allowed more complex expressions within **if** function diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index f9be8c8e3..3c84de397 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -3234,7 +3234,7 @@ Expression CaseWhenExpression() #CaseWhenExpression: ( ( clause=WhenThenSearchCondition() { whenClauses.add(clause); } )+ | - (LOOKAHEAD(RegularCondition()) switchExp=RegularCondition() | switchExp=BitwiseAndOr()) + switchExp=Condition() ( clause=WhenThenValue() { whenClauses.add(clause); } )+ ) [ elseExp=Condition()] diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java index 3d09cbf92..d5b2ca36d 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -1297,6 +1297,11 @@ public void testIssue235SimplifiedCase3() throws JSQLParserException { public void testIssue235SimplifiedCase4() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("SELECT CASE WHEN (CASE WHEN (CASE WHEN (CASE WHEN (1) THEN 0 END) THEN 0 END) THEN 0 END) THEN 0 END FROM a"); } + + @Test + public void testIssue862CaseWhenConcat() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("SELECT c1, CASE c1 || c2 WHEN '091' THEN '2' ELSE '1' END AS c11 FROM T2"); + } @Test public void testReplaceAsFunction() throws JSQLParserException {