Skip to content

Commit

Permalink
fixes #99
Browse files Browse the repository at this point in the history
  • Loading branch information
wumpz committed Jan 10, 2015
1 parent e475666 commit 5ac27a7
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
36 changes: 33 additions & 3 deletions src/main/java/net/sf/jsqlparser/statement/select/SubSelect.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
*/
package net.sf.jsqlparser.statement.select;

import java.util.Iterator;
import java.util.List;
import net.sf.jsqlparser.expression.Alias;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
Expand All @@ -35,6 +37,7 @@ public class SubSelect implements FromItem, Expression, ItemsList {
private SelectBody selectBody;
private Alias alias;
private boolean useBrackets = true;
private List<WithItem> withItemsList;

private Pivot pivot;

Expand Down Expand Up @@ -83,6 +86,14 @@ public boolean isUseBrackets() {
public void setUseBrackets(boolean useBrackets) {
this.useBrackets = useBrackets;
}

public List<WithItem> getWithItemsList() {
return withItemsList;
}

public void setWithItemsList(List<WithItem> withItemsList) {
this.withItemsList = withItemsList;
}

@Override
public void accept(ItemsListVisitor itemsListVisitor) {
Expand All @@ -91,8 +102,27 @@ public void accept(ItemsListVisitor itemsListVisitor) {

@Override
public String toString() {
return (useBrackets?"(":"") + selectBody + (useBrackets?")":"")
+ ((pivot != null) ? " " + pivot : "")
+ ((alias != null) ? alias.toString() : "");
StringBuilder retval = new StringBuilder();
if (useBrackets)
retval.append("(");
if (withItemsList != null && !withItemsList.isEmpty()) {
retval.append("WITH ");
for (Iterator<WithItem> iter = withItemsList.iterator(); iter.hasNext();) {
WithItem withItem = (WithItem) iter.next();
retval.append(withItem);
if (iter.hasNext()) {
retval.append(",");
}
retval.append(" ");
}
}
retval.append(selectBody);
if (useBrackets)
retval.append(")");

if (pivot != null) retval.append(" ").append(pivot);
if (alias != null) retval.append(alias.toString());

return retval.toString();
}
}
11 changes: 11 additions & 0 deletions src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,17 @@ public void visit(SelectExpressionItem selectExpressionItem) {
@Override
public void visit(SubSelect subSelect) {
buffer.append("(");
if (subSelect.getWithItemsList() != null && !subSelect.getWithItemsList().isEmpty()) {
buffer.append("WITH ");
for (Iterator<WithItem> iter = subSelect.getWithItemsList().iterator(); iter.hasNext();) {
WithItem withItem = iter.next();
withItem.accept(this);
if (iter.hasNext()) {
buffer.append(",");
}
buffer.append(" ");
}
}
subSelect.getSelectBody().accept(this);
buffer.append(")");
Pivot pivot = subSelect.getPivot();
Expand Down
4 changes: 3 additions & 1 deletion src/main/javacc/net/sf/jsqlparser/parser/JSqlParserCC.jj
Original file line number Diff line number Diff line change
Expand Up @@ -2030,11 +2030,13 @@ Function Function():
SubSelect SubSelect():
{
SelectBody selectBody = null;
SubSelect subSelect = new SubSelect();
List<WithItem> with = null;
}
{
[ with=WithList() { subSelect.setWithItemsList(with); } ]
selectBody=SelectBody()
{
SubSelect subSelect = new SubSelect();
subSelect.setSelectBody(selectBody);
return subSelect;
}
Expand Down
5 changes: 4 additions & 1 deletion src/test/java/net/sf/jsqlparser/test/select/SelectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1636,5 +1636,8 @@ public void testSelectJoin2() throws JSQLParserException {
public void testSelectOracleColl() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("SELECT * FROM the_table tt WHERE TT.COL1 = lines(idx).COL1");
}


public void testSelectInnerWith() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("SELECT * FROM (WITH actor AS (SELECT 'a' aid FROM DUAL) SELECT aid FROM actor)");
}
}

0 comments on commit 5ac27a7

Please sign in to comment.