|
27 | 27 | import net.sf.jsqlparser.statement.select.PlainSelect; |
28 | 28 | import net.sf.jsqlparser.statement.select.Select; |
29 | 29 | import net.sf.jsqlparser.statement.select.SelectExpressionItem; |
| 30 | +import net.sf.jsqlparser.statement.select.SetOperationList; |
30 | 31 | import net.sf.jsqlparser.statement.select.Union; |
31 | 32 | import net.sf.jsqlparser.util.deparser.ExpressionDeParser; |
32 | 33 | import net.sf.jsqlparser.util.deparser.SelectDeParser; |
@@ -64,9 +65,9 @@ public void testLimit() throws JSQLParserException { |
64 | 65 | statement = "(SELECT * FROM mytable WHERE mytable.col = 9 OFFSET ?) UNION " |
65 | 66 | + "(SELECT * FROM mytable2 WHERE mytable2.col = 9 OFFSET ?) LIMIT 3, 4"; |
66 | 67 | select = (Select) parserManager.parse(new StringReader(statement)); |
67 | | - Union union = (Union) select.getSelectBody(); |
68 | | - assertEquals(3, union.getLimit().getOffset()); |
69 | | - assertEquals(4, union.getLimit().getRowCount()); |
| 68 | + SetOperationList setList = (SetOperationList) select.getSelectBody(); |
| 69 | + assertEquals(3, setList.getLimit().getOffset()); |
| 70 | + assertEquals(4, setList.getLimit().getRowCount()); |
70 | 71 |
|
71 | 72 | // toString uses standard syntax |
72 | 73 | statement = "(SELECT * FROM mytable WHERE mytable.col = 9 OFFSET ?) UNION " |
@@ -134,12 +135,12 @@ public void testUnion() throws JSQLParserException { |
134 | 135 | + "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION " + "SELECT * FROM mytable2 LIMIT 3,4"; |
135 | 136 |
|
136 | 137 | Select select = (Select) parserManager.parse(new StringReader(statement)); |
137 | | - Union union = (Union) select.getSelectBody(); |
138 | | - assertEquals(3, union.getPlainSelects().size()); |
139 | | - assertEquals("mytable", ((Table) ((PlainSelect) union.getPlainSelects().get(0)).getFromItem()).getName()); |
140 | | - assertEquals("mytable3", ((Table) ((PlainSelect) union.getPlainSelects().get(1)).getFromItem()).getName()); |
141 | | - assertEquals("mytable2", ((Table) ((PlainSelect) union.getPlainSelects().get(2)).getFromItem()).getName()); |
142 | | - assertEquals(3, ((PlainSelect) union.getPlainSelects().get(2)).getLimit().getOffset()); |
| 138 | + SetOperationList setList = (SetOperationList) select.getSelectBody(); |
| 139 | + assertEquals(3, setList.getPlainSelects().size()); |
| 140 | + assertEquals("mytable", ((Table) ((PlainSelect) setList.getPlainSelects().get(0)).getFromItem()).getName()); |
| 141 | + assertEquals("mytable3", ((Table) ((PlainSelect) setList.getPlainSelects().get(1)).getFromItem()).getName()); |
| 142 | + assertEquals("mytable2", ((Table) ((PlainSelect) setList.getPlainSelects().get(2)).getFromItem()).getName()); |
| 143 | + assertEquals(3, ((PlainSelect) setList.getPlainSelects().get(2)).getLimit().getOffset()); |
143 | 144 |
|
144 | 145 | // use brakets for toString |
145 | 146 | // use standard limit syntax |
@@ -660,38 +661,27 @@ public void testProblemSqlIntersect() throws Exception { |
660 | 661 | assertStatementCanBeDeparsedAs(parsed,"(SELECT * FROM a) INTERSECT (SELECT * FROM b)"); |
661 | 662 | } |
662 | 663 |
|
663 | | - @Test |
664 | 664 | public void testProblemSqlExcept() throws Exception { |
665 | 665 | String stmt = "(SELECT * FROM a) EXCEPT (SELECT * FROM b)"; |
666 | | - Statement parsed = parserManager.parse(new StringReader(stmt)); |
667 | | - assertStatementCanBeDeparsedAs(parsed,"(SELECT * FROM a) INTERSECT (SELECT * FROM b)"); |
| 666 | + assertSqlCanBeParsedAndDeparsed(stmt); |
668 | 667 |
|
669 | | - stmt = "SELECT * FROM a INTERSECT SELECT * FROM b"; |
670 | | - parsed = parserManager.parse(new StringReader(stmt)); |
671 | | - assertStatementCanBeDeparsedAs(parsed,"(SELECT * FROM a) INTERSECT (SELECT * FROM b)"); |
672 | | - //Left ist ein Schlüsselwort und darf so nicht verwendet werden. |
673 | | - //Fehler SQLServer, OK Oracle, OK Postgresql |
674 | | - Statement stmt = JSqlParserUtils.parseSqlStatement("select * from a except select * from b"); |
675 | | - System.out.println(stmt.toString()); |
676 | | - assertEquals("(SELECT * FROM a) EXCEPT (SELECT * FROM b)", stmt.toString()); |
| 668 | + stmt = "SELECT * FROM a EXCEPT SELECT * FROM b"; |
| 669 | + Statement parsed = parserManager.parse(new StringReader(stmt)); |
| 670 | + assertStatementCanBeDeparsedAs(parsed,"(SELECT * FROM a) EXCEPT (SELECT * FROM b)"); |
677 | 671 | } |
678 | 672 |
|
679 | | - @Test |
680 | 673 | public void testProblemSqlMinus() throws Exception { |
681 | | - //Left ist ein Schlüsselwort und darf so nicht verwendet werden. |
682 | | - //Fehler SQLServer, OK Oracle, OK Postgresql |
683 | | - Statement stmt = JSqlParserUtils.parseSqlStatement("select * from a minus select * from b"); |
684 | | - System.out.println(stmt.toString()); |
685 | | - assertEquals("(SELECT * FROM a) MINUS (SELECT * FROM b)", stmt.toString()); |
| 674 | + String stmt = "(SELECT * FROM a) MINUS (SELECT * FROM b)"; |
| 675 | + assertSqlCanBeParsedAndDeparsed(stmt); |
| 676 | + |
| 677 | + stmt = "SELECT * FROM a MINUS SELECT * FROM b"; |
| 678 | + Statement parsed = parserManager.parse(new StringReader(stmt)); |
| 679 | + assertStatementCanBeDeparsedAs(parsed,"(SELECT * FROM a) MINUS (SELECT * FROM b)"); |
686 | 680 | } |
687 | 681 |
|
688 | | - @Test |
689 | 682 | public void testProblemSqlCombinedSets() throws Exception { |
690 | | - //Left ist ein Schlüsselwort und darf so nicht verwendet werden. |
691 | | - //Fehler SQLServer, OK Oracle, OK Postgresql |
692 | | - Statement stmt = JSqlParserUtils.parseSqlStatement("select * from a intersect select * from b union select * from c"); |
693 | | - System.out.println(stmt.toString()); |
694 | | - assertEquals("(SELECT * FROM a) INTERSECT (SELECT * FROM b) UNION (SELECT * FROM c)", stmt.toString()); |
| 683 | + String stmt = "(SELECT * FROM a) INTERSECT (SELECT * FROM b) UNION (SELECT * FROM c)"; |
| 684 | + assertSqlCanBeParsedAndDeparsed(stmt); |
695 | 685 | } |
696 | 686 |
|
697 | 687 | private void assertSqlCanBeParsedAndDeparsed(String statement) throws JSQLParserException { |
|
0 commit comments