From 09c2fb78ed4e67eb392e5558ad511652cd0714e4 Mon Sep 17 00:00:00 2001 From: Andreas Reichel Date: Thu, 15 Sep 2022 18:21:49 +0700 Subject: [PATCH 1/2] fix: add missing public Getter Add public Getter for `updateSets` Fixes #1630 --- .../jsqlparser/statement/insert/InsertConflictAction.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictAction.java b/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictAction.java index 32d9313eb..efe3161f4 100644 --- a/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictAction.java +++ b/src/main/java/net/sf/jsqlparser/statement/insert/InsertConflictAction.java @@ -32,15 +32,17 @@ */ public class InsertConflictAction { - ConflictActionType conflictActionType; - private final ArrayList updateSets = new ArrayList<>(); + ConflictActionType conflictActionType; Expression whereExpression; - public InsertConflictAction(ConflictActionType conflictActionType) { this.conflictActionType = Objects.requireNonNull(conflictActionType, "The Conflict Action Type is mandatory and must not be Null."); } + public ArrayList getUpdateSets() { + return updateSets; + } + public ConflictActionType getConflictActionType() { return conflictActionType; } From e0471b5d8ee025f031ee0ddfdd38c38a597ffac7 Mon Sep 17 00:00:00 2001 From: Andreas Reichel Date: Mon, 28 Nov 2022 16:57:34 +0700 Subject: [PATCH 2/2] fix: Case within brackets fixes #1673 --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 9 ++++++- .../expression/CaseExpressionTest.java | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index aeb0ae341..f514ed8a1 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -2228,10 +2228,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; diff --git a/src/test/java/net/sf/jsqlparser/expression/CaseExpressionTest.java b/src/test/java/net/sf/jsqlparser/expression/CaseExpressionTest.java index db9ec7d2a..84ab898db 100644 --- a/src/test/java/net/sf/jsqlparser/expression/CaseExpressionTest.java +++ b/src/test/java/net/sf/jsqlparser/expression/CaseExpressionTest.java @@ -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); + } }