Skip to content

Commit 7e39e9e

Browse files
committed
complex with tests included
exists formatting included from fork
1 parent 8731509 commit 7e39e9e

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ public void visit(LikeExpression likeExpression) {
187187

188188
public void visit(ExistsExpression existsExpression) {
189189
if (existsExpression.isNot()) {
190-
buffer.append(" NOT EXISTS ");
190+
buffer.append("NOT EXISTS ");
191191
} else {
192-
buffer.append(" EXISTS ");
192+
buffer.append("EXISTS ");
193193
}
194194
existsExpression.getRightExpression().accept(this);
195195
}

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ public void testHaving() throws JSQLParserException {
348348
}
349349

350350
public void testExists() throws JSQLParserException {
351-
String statement = "SELECT * FROM tab1 WHERE";
352-
String where = " EXISTS (SELECT * FROM tab2)";
351+
String statement = "SELECT * FROM tab1 WHERE ";
352+
String where = "EXISTS (SELECT * FROM tab2)";
353353
statement += where;
354354
Statement parsed = parserManager.parse(new StringReader(statement));
355355

@@ -682,6 +682,36 @@ public void testProblemSqlCombinedSets() throws Exception {
682682
String stmt = "(SELECT * FROM a) INTERSECT (SELECT * FROM b) UNION (SELECT * FROM c)";
683683
assertSqlCanBeParsedAndDeparsed(stmt);
684684
}
685+
686+
public void testWithStatement() throws JSQLParserException {
687+
String stmt = "WITH test AS (SELECT mslink FROM feature) SELECT * FROM feature WHERE mslink IN (SELECT mslink FROM test)";
688+
assertSqlCanBeParsedAndDeparsed(stmt);
689+
}
690+
691+
public void testWithUnionProblem() throws JSQLParserException {
692+
String stmt = "WITH test AS ((SELECT mslink FROM tablea) UNION (SELECT mslink FROM tableb)) SELECT * FROM tablea WHERE mslink IN (SELECT mslink FROM test)";
693+
assertSqlCanBeParsedAndDeparsed(stmt);
694+
}
695+
696+
public void testWithUnionAllProblem() throws JSQLParserException {
697+
String stmt = "WITH test AS ((SELECT mslink FROM tablea) UNION ALL (SELECT mslink FROM tableb)) SELECT * FROM tablea WHERE mslink IN (SELECT mslink FROM test)";
698+
assertSqlCanBeParsedAndDeparsed(stmt);
699+
}
700+
701+
public void testWithUnionProblem3() throws JSQLParserException {
702+
String stmt = "WITH test AS ((SELECT mslink, CAST(tablea.fname AS varchar) FROM tablea INNER JOIN tableb ON tablea.mslink = tableb.mslink AND tableb.deleted = 0 WHERE tablea.fname IS NULL AND 1 = 0) UNION ALL (SELECT mslink FROM tableb)) SELECT * FROM tablea WHERE mslink IN (SELECT mslink FROM test)";
703+
assertSqlCanBeParsedAndDeparsed(stmt);
704+
}
705+
706+
public void testWithUnionProblem4() throws JSQLParserException {
707+
String stmt = "WITH hist AS ((SELECT gl.mslink, ba.gl_name AS txt, ba.gl_nummer AS nr, 0 AS level, CAST(gl.mslink AS VARCHAR) AS path, ae.feature FROM tablea AS gl INNER JOIN tableb AS ba ON gl.mslink = ba.gl_mslink INNER JOIN tablec AS ae ON gl.mslink = ae.mslink AND ae.deleted = 0 WHERE gl.parent IS NULL AND gl.mslink <> 0) UNION ALL (SELECT gl.mslink, ba.gl_name AS txt, ba.gl_nummer AS nr, hist.level + 1 AS level, CAST(hist.path + '.' + CAST(gl.mslink AS VARCHAR) AS VARCHAR) AS path, ae.feature FROM tablea AS gl INNER JOIN tableb AS ba ON gl.mslink = ba.gl_mslink INNER JOIN tablec AS ae ON gl.mslink = ae.mslink AND ae.deleted = 0 INNER JOIN hist ON gl.parent = hist.mslink WHERE gl.mslink <> 0)) SELECT mslink, space(level * 4) + txt AS txt, nr, feature, path FROM hist WHERE EXISTS (SELECT feature FROM tablec WHERE mslink = 0 AND ((feature IN (1, 2) AND hist.feature = 3) OR (feature IN (4) AND hist.feature = 2)))";
708+
assertSqlCanBeParsedAndDeparsed(stmt);
709+
}
710+
711+
public void testWithUnionProblem5() throws JSQLParserException {
712+
String stmt = "WITH hist AS ((SELECT gl.mslink, ba.gl_name AS txt, ba.gl_nummer AS nr, 0 AS level, CAST(gl.mslink AS VARCHAR) AS path, ae.feature FROM tablea AS gl INNER JOIN tableb AS ba ON gl.mslink = ba.gl_mslink INNER JOIN tablec AS ae ON gl.mslink = ae.mslink AND ae.deleted = 0 WHERE gl.parent IS NULL AND gl.mslink <> 0) UNION ALL (SELECT gl.mslink, ba.gl_name AS txt, ba.gl_nummer AS nr, hist.level + 1 AS level, CAST(hist.path + '.' + CAST(gl.mslink AS VARCHAR) AS VARCHAR) AS path, 5 AS feature FROM tablea AS gl INNER JOIN tableb AS ba ON gl.mslink = ba.gl_mslink INNER JOIN tablec AS ae ON gl.mslink = ae.mslink AND ae.deleted = 0 INNER JOIN hist ON gl.parent = hist.mslink WHERE gl.mslink <> 0)) SELECT * FROM hist";
713+
assertSqlCanBeParsedAndDeparsed(stmt);
714+
}
685715

686716
private void assertSqlCanBeParsedAndDeparsed(String statement) throws JSQLParserException {
687717
Statement parsed = parserManager.parse(new StringReader(statement));

0 commit comments

Comments
 (0)