From dfda5f1f00a5c9e2de69fc34d8dc6499e12540e1 Mon Sep 17 00:00:00 2001 From: Tomer S Date: Thu, 11 Mar 2021 16:44:36 +0200 Subject: [PATCH 1/2] add support for union without brackets and with limit --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 13 +++++++------ .../sf/jsqlparser/statement/select/SelectTest.java | 6 ++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 278ce9b3b1..48e8c075fa 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -1607,12 +1607,13 @@ SelectBody SetOperationList() #SetOperationList: { ((PlainSelect)selects.get(0)).setUseBrackets(true); return selects.get(0); } else { - if (selects.size()>1 && selects.get(selects.size()-1) instanceof PlainSelect) { - PlainSelect ps = (PlainSelect)selects.get(selects.size()-1); - if (ps.getOrderByElements() != null) { - list.setOrderByElements(ps.getOrderByElements()); - ps.setOrderByElements(null); - } + if (ps.getOrderByElements() != null && !brackets.get(brackets.size() - 1)) { + list.setOrderByElements(ps.getOrderByElements()); + list.setLimit(ps.getLimit()); + list.setOffset(ps.getOffset()); + ps.setOrderByElements(null); + ps.setLimit(null); + ps.setOffset(null); } list.setBracketsOpsAndSelects(brackets,selects,operations); return list; 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 519abc91d1..729941af6c 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -882,6 +882,12 @@ public void testSelectItems() throws JSQLParserException { assertStatementCanBeDeparsedAs(select, statement); } + @Test + public void testUnionWithOrderByAndLimitAndNoBrackets() throws JSQLParserException { + String stmt = "SELECT id FROM table1 UNION SELECT id FROM table2 ORDER BY id ASC LIMIT 55"; + assertSqlCanBeParsedAndDeparsed(stmt); + } + @Test public void testUnion() throws JSQLParserException { String statement = "SELECT * FROM mytable WHERE mytable.col = 9 UNION " From e86b7adb7046a386820c7bbfaba1370cba84949f Mon Sep 17 00:00:00 2001 From: Tomer S Date: Thu, 11 Mar 2021 17:10:12 +0200 Subject: [PATCH 2/2] Fixing the last commit. --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 48e8c075fa..4c309df917 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -1607,13 +1607,16 @@ SelectBody SetOperationList() #SetOperationList: { ((PlainSelect)selects.get(0)).setUseBrackets(true); return selects.get(0); } else { - if (ps.getOrderByElements() != null && !brackets.get(brackets.size() - 1)) { - list.setOrderByElements(ps.getOrderByElements()); - list.setLimit(ps.getLimit()); - list.setOffset(ps.getOffset()); - ps.setOrderByElements(null); - ps.setLimit(null); - ps.setOffset(null); + if (selects.size()>1 && selects.get(selects.size()-1) instanceof PlainSelect) { + PlainSelect ps = (PlainSelect)selects.get(selects.size()-1); + if (ps.getOrderByElements() != null && !brackets.get(brackets.size() - 1)) { + list.setOrderByElements(ps.getOrderByElements()); + list.setLimit(ps.getLimit()); + list.setOffset(ps.getOffset()); + ps.setOrderByElements(null); + ps.setLimit(null); + ps.setOffset(null); + } } list.setBracketsOpsAndSelects(brackets,selects,operations); return list;