Skip to content

Commit 21a0df9

Browse files
committed
fixes #334
1 parent 8e22953 commit 21a0df9

File tree

3 files changed

+51
-27
lines changed

3 files changed

+51
-27
lines changed

src/main/java/net/sf/jsqlparser/statement/select/Limit.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,18 @@ public void setLimitAll(boolean b) {
8686

8787
@Override
8888
public String toString() {
89-
String retVal = "";
89+
String retVal = " LIMIT ";
9090
if (limitNull) {
91-
retVal += " LIMIT NULL";
92-
} else if (rowCount >= 0 || rowCountJdbcParameter) {
93-
retVal += " LIMIT " + (rowCountJdbcParameter ? "?" : Long.toString(rowCount));
94-
}
95-
if (offset > 0 || offsetJdbcParameter) {
96-
retVal += " OFFSET " + (offsetJdbcParameter ? "?" : Long.toString(offset));
97-
}
91+
retVal += "NULL";
92+
} else {
93+
if (offset > 0 || offsetJdbcParameter) {
94+
retVal += (offsetJdbcParameter ? "?" : Long.toString(offset)) + ", ";
95+
}
96+
if ( rowCount >= 0 || rowCountJdbcParameter) {
97+
retVal += (rowCountJdbcParameter ? "?" : Long.toString(rowCount));
98+
}
99+
}
100+
98101
return retVal;
99102
}
100103
}

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

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,20 @@ public LimitDeparser(StringBuilder buffer) {
3232
}
3333

3434
public void deParse(Limit limit) {
35-
if (limit.isRowCountJdbcParameter()) {
36-
buffer.append(" LIMIT ");
37-
buffer.append("?");
38-
} else if (limit.getRowCount() >= 0) {
39-
buffer.append(" LIMIT ");
40-
buffer.append(limit.getRowCount());
41-
} else if (limit.isLimitNull()) {
42-
buffer.append(" LIMIT NULL");
35+
buffer.append(" LIMIT ");
36+
if (limit.isLimitNull()) {
37+
buffer.append("NULL");
38+
} else {
39+
if (limit.isOffsetJdbcParameter()) {
40+
buffer.append("?, ");
41+
} else if (limit.getOffset() != 0) {
42+
buffer.append(limit.getOffset()).append(", ");
43+
}
44+
45+
if (limit.isRowCountJdbcParameter()) {
46+
buffer.append("?");
47+
} else if (limit.getRowCount() >= 0) {
48+
buffer.append(limit.getRowCount());
49+
}
4350
}
44-
45-
if (limit.isOffsetJdbcParameter()) {
46-
buffer.append(" OFFSET ?");
47-
} else if (limit.getOffset() != 0) {
48-
buffer.append(" OFFSET ").append(limit.getOffset());
49-
}
50-
}
51-
52-
}
51+
}}

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

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ public void testSelectItems() throws JSQLParserException {
579579

580580
public void testUnion() throws JSQLParserException {
581581
String statement = "SELECT * FROM mytable WHERE mytable.col = 9 UNION "
582-
+ "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION " + "SELECT * FROM mytable2 LIMIT 3,4";
582+
+ "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION " + "SELECT * FROM mytable2 LIMIT 3, 4";
583583

584584
Select select = (Select) parserManager.parse(new StringReader(statement));
585585
SetOperationList setList = (SetOperationList) select.getSelectBody();
@@ -593,9 +593,31 @@ public void testUnion() throws JSQLParserException {
593593
// use standard limit syntax
594594
String statementToString = "SELECT * FROM mytable WHERE mytable.col = 9 UNION "
595595
+ "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION "
596-
+ "SELECT * FROM mytable2 LIMIT 4 OFFSET 3";
596+
+ "SELECT * FROM mytable2 LIMIT 3, 4";
597597
assertStatementCanBeDeparsedAs(select, statementToString);
598598
}
599+
600+
public void testUnion2() throws JSQLParserException {
601+
String statement = "SELECT * FROM mytable WHERE mytable.col = 9 UNION "
602+
+ "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION " + "SELECT * FROM mytable2 LIMIT 3 OFFSET 4";
603+
604+
Select select = (Select) parserManager.parse(new StringReader(statement));
605+
SetOperationList setList = (SetOperationList) select.getSelectBody();
606+
assertEquals(3, setList.getSelects().size());
607+
assertEquals("mytable", ((Table) ((PlainSelect) setList.getSelects().get(0)).getFromItem()).getName());
608+
assertEquals("mytable3", ((Table) ((PlainSelect) setList.getSelects().get(1)).getFromItem()).getName());
609+
assertEquals("mytable2", ((Table) ((PlainSelect) setList.getSelects().get(2)).getFromItem()).getName());
610+
assertEquals(0, ((PlainSelect) setList.getSelects().get(2)).getLimit().getOffset());
611+
assertEquals(4, ((PlainSelect) setList.getSelects().get(2)).getOffset().getOffset());
612+
613+
// use brakets for toString
614+
// use standard limit syntax
615+
String statementToString = "SELECT * FROM mytable WHERE mytable.col = 9 UNION "
616+
+ "SELECT * FROM mytable3 WHERE mytable3.col = ? UNION "
617+
+ "SELECT * FROM mytable2 LIMIT 3 OFFSET 4";
618+
assertStatementCanBeDeparsedAs(select, statementToString);
619+
}
620+
599621

600622
public void testDistinct() throws JSQLParserException {
601623
String statement = "SELECT DISTINCT ON (myid) myid, mycol FROM mytable WHERE mytable.col = 9";

0 commit comments

Comments
 (0)