Skip to content

Commit e170c4f

Browse files
committed
fixes #561
1 parent 964991c commit e170c4f

File tree

10 files changed

+64
-20
lines changed

10 files changed

+64
-20
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@
2121
*/
2222
package net.sf.jsqlparser.statement.select;
2323

24+
import net.sf.jsqlparser.statement.values.ValuesStatement;
25+
2426
public interface SelectVisitor {
2527

2628
void visit(PlainSelect plainSelect);
2729

2830
void visit(SetOperationList setOpList);
2931

3032
void visit(WithItem withItem);
33+
34+
void visit(ValuesStatement aThis);
3135
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
*/
2222
package net.sf.jsqlparser.statement.select;
2323

24+
import net.sf.jsqlparser.statement.values.ValuesStatement;
25+
2426
public class SelectVisitorAdapter implements SelectVisitor {
2527

2628
@Override
@@ -37,4 +39,9 @@ public void visit(SetOperationList setOpList) {
3739
public void visit(WithItem withItem) {
3840

3941
}
42+
43+
@Override
44+
public void visit(ValuesStatement aThis) {
45+
46+
}
4047
}

src/main/java/net/sf/jsqlparser/statement/values/ValuesStatement.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,36 +26,43 @@
2626
import net.sf.jsqlparser.statement.Statement;
2727
import net.sf.jsqlparser.statement.StatementVisitor;
2828
import net.sf.jsqlparser.statement.select.PlainSelect;
29+
import net.sf.jsqlparser.statement.select.SelectBody;
30+
import net.sf.jsqlparser.statement.select.SelectVisitor;
2931

3032
/**
3133
* The replace statement.
3234
*/
33-
public class ValuesStatement implements Statement {
34-
35+
public class ValuesStatement implements Statement, SelectBody {
36+
3537
private List<Expression> expressions;
36-
38+
3739
public ValuesStatement(List<Expression> expressions) {
3840
this.expressions = expressions;
3941
}
40-
42+
4143
@Override
4244
public void accept(StatementVisitor statementVisitor) {
4345
statementVisitor.visit(this);
4446
}
45-
47+
4648
public List<Expression> getExpressions() {
4749
return expressions;
4850
}
49-
51+
5052
public void setExpressions(List<Expression> list) {
5153
expressions = list;
5254
}
53-
55+
5456
@Override
5557
public String toString() {
5658
StringBuilder sql = new StringBuilder();
5759
sql.append("VALUES ");
5860
sql.append(PlainSelect.getStringList(expressions, true, true));
5961
return sql.toString();
6062
}
63+
64+
@Override
65+
public void accept(SelectVisitor selectVisitor) {
66+
selectVisitor.visit(this);
67+
}
6168
}

src/main/java/net/sf/jsqlparser/util/AddAliasesVisitor.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
*/
2222
package net.sf.jsqlparser.util;
2323

24+
import java.util.*;
2425
import net.sf.jsqlparser.expression.*;
2526
import net.sf.jsqlparser.statement.select.*;
26-
27-
import java.util.*;
27+
import net.sf.jsqlparser.statement.values.ValuesStatement;
2828

2929
/**
3030
* Add aliases to every column and expression selected by a select - statement. Existing aliases are
@@ -116,4 +116,9 @@ public void visit(WithItem withItem) {
116116
public void visit(AllColumns allColumns) {
117117
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
118118
}
119+
120+
@Override
121+
public void visit(ValuesStatement aThis) {
122+
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
123+
}
119124
}

src/main/java/net/sf/jsqlparser/util/ConnectExpressionsVisitor.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
*/
2222
package net.sf.jsqlparser.util;
2323

24+
import java.util.*;
2425
import net.sf.jsqlparser.expression.*;
2526
import net.sf.jsqlparser.statement.select.*;
26-
27-
import java.util.*;
27+
import net.sf.jsqlparser.statement.values.ValuesStatement;
2828

2929
/**
3030
* Connect all selected expressions with a binary expression. Out of select a,b from table one gets
@@ -104,4 +104,10 @@ public void visit(AllColumns allColumns) {
104104
public void visit(SelectExpressionItem selectExpressionItem) {
105105
itemsExpr.add(selectExpressionItem);
106106
}
107+
108+
@Override
109+
public void visit(ValuesStatement aThis) {
110+
throw new UnsupportedOperationException("Not supported yet.");
111+
}
112+
107113
}

src/main/java/net/sf/jsqlparser/util/SelectUtils.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import java.util.ArrayList;
2525
import java.util.List;
26-
2726
import net.sf.jsqlparser.JSQLParserException;
2827
import net.sf.jsqlparser.expression.Expression;
2928
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
@@ -37,6 +36,7 @@
3736
import net.sf.jsqlparser.statement.select.SelectVisitor;
3837
import net.sf.jsqlparser.statement.select.SetOperationList;
3938
import net.sf.jsqlparser.statement.select.WithItem;
39+
import net.sf.jsqlparser.statement.values.ValuesStatement;
4040

4141
/**
4242
* Utility function for select statements.
@@ -123,6 +123,11 @@ public void visit(SetOperationList setOpList) {
123123
public void visit(WithItem withItem) {
124124
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
125125
}
126+
127+
@Override
128+
public void visit(ValuesStatement aThis) {
129+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
130+
}
126131
});
127132
}
128133

@@ -175,6 +180,11 @@ public void visit(SetOperationList setOpList) {
175180
public void visit(WithItem withItem) {
176181
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
177182
}
183+
184+
@Override
185+
public void visit(ValuesStatement aThis) {
186+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
187+
}
178188
});
179189
}
180190
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
*/
2222
package net.sf.jsqlparser.util.deparser;
2323

24+
import java.util.*;
2425
import net.sf.jsqlparser.expression.*;
2526
import net.sf.jsqlparser.schema.*;
2627
import net.sf.jsqlparser.statement.select.*;
27-
28-
import java.util.*;
28+
import net.sf.jsqlparser.statement.values.ValuesStatement;
2929

3030
/**
3131
* A class to de-parse (that is, tranform from JSqlParser hierarchy into a string) a
@@ -467,4 +467,9 @@ public void visit(ParenthesisFromItem parenthesis) {
467467
buffer.append(parenthesis.getAlias().toString());
468468
}
469469
}
470+
471+
@Override
472+
public void visit(ValuesStatement values) {
473+
new ValuesStatementDeParser(expressionVisitor, buffer).deParse(values);
474+
}
470475
}

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,15 +1251,15 @@ SelectBody SetOperationList() #SetOperationList:
12511251

12521252
(
12531253
(("(" select=SelectBody() ")" { bracket=true;} )
1254-
| select=PlainSelect() { bracket=false;} ) {selects.add(select);brackets.add(bracket); }
1254+
| ( select=PlainSelect() | select=Values() ) { bracket=false;} ) {selects.add(select);brackets.add(bracket); }
12551255
(
12561256
((<K_UNION> { UnionOp union = new UnionOp();linkAST(union,jjtThis);operations.add(union); } [ <K_ALL> { union.setAll(true); } | <K_DISTINCT> { union.setDistinct(true); } ])
12571257
| <K_INTERSECT> { operations.add(new IntersectOp()); }
12581258
| <K_MINUS> { operations.add(new MinusOp()); }
12591259
| <K_EXCEPT> { operations.add(new ExceptOp()); }
12601260
)
12611261

1262-
(("(" select=SelectBody() ")" { bracket=true;} ) | select=PlainSelect() { bracket=false;} ) {selects.add(select);brackets.add(bracket);}
1262+
(("(" select=SelectBody() ")" { bracket=true;} ) | ( select=PlainSelect() | select=Values() ) { bracket=false;} ) {selects.add(select);brackets.add(bracket);}
12631263
)*
12641264
)
12651265

src/test/java/net/sf/jsqlparser/statement/values/ValuesTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import org.junit.Test;
66

77
public class ValuesTest {
8-
8+
99
@Test
1010
public void testDuplicateKey() throws JSQLParserException {
1111
assertSqlCanBeParsedAndDeparsed("VALUES (1, 2, 'test')");
1212
}
13-
13+
1414
@Test
1515
public void testComplexWithQueryIssue561() throws JSQLParserException {
16-
assertSqlCanBeParsedAndDeparsed("WITH split(word, str, hascomma) AS (values('', 'Auto,A,1234444', 1) UNION ALL SELECT substr(str, 0, case when instr(str, ',') then instr(str, ',') else length(str)+1 end), ltrim(substr(str, instr(str, ',')), ','), instr(str, ',') FROM split WHERE hascomma) SELECT trim(word) FROM split WHERE word!=''");
16+
assertSqlCanBeParsedAndDeparsed("WITH split (word, str, hascomma) AS (VALUES ('', 'Auto,A,1234444', 1) UNION ALL SELECT substr(str, 0, CASE WHEN instr(str, ',') THEN instr(str, ',') ELSE length(str) + 1 END), ltrim(substr(str, instr(str, ',')), ','), instr(str, ',') FROM split WHERE hascomma) SELECT trim(word) FROM split WHERE word != ''");
1717
}
1818
}

src/test/java/net/sf/jsqlparser/util/ConnectExpressionsVisitorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import net.sf.jsqlparser.statement.select.Select;
1010
import org.junit.After;
1111
import org.junit.AfterClass;
12+
import static org.junit.Assert.*;
1213
import org.junit.Before;
1314
import org.junit.BeforeClass;
1415
import org.junit.Test;
15-
import static org.junit.Assert.*;
1616

1717
/**
1818
*

0 commit comments

Comments
 (0)