Skip to content

Commit a1c4f4a

Browse files
committed
fixes #707
1 parent 6c413b4 commit a1c4f4a

File tree

9 files changed

+82
-6
lines changed

9 files changed

+82
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Also I would like to know about needed examples or documentation stuff.
5555

5656
## Extensions in the latest SNAPSHOT version 2.0
5757

58+
* support for **NEXTVAL FOR**
5859
* changed all source code license headers to reflect the dual license of JSqlParser more correctly
5960
* support of **OPTIMIZE FOR 20 ROWS** like expressions
6061
* allowed conditions within **then** and **else** of a **case** statement

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@
2929
import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
3030
import net.sf.jsqlparser.expression.operators.relational.InExpression;
3131
import net.sf.jsqlparser.expression.operators.relational.IsNullExpression;
32+
import net.sf.jsqlparser.expression.operators.relational.JsonOperator;
3233
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
3334
import net.sf.jsqlparser.expression.operators.relational.Matches;
3435
import net.sf.jsqlparser.expression.operators.relational.MinorThan;
3536
import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals;
3637
import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo;
3738
import net.sf.jsqlparser.expression.operators.relational.RegExpMatchOperator;
3839
import net.sf.jsqlparser.expression.operators.relational.RegExpMySQLOperator;
39-
import net.sf.jsqlparser.expression.operators.relational.JsonOperator;
4040
import net.sf.jsqlparser.schema.Column;
4141
import net.sf.jsqlparser.statement.select.SubSelect;
4242

@@ -155,7 +155,7 @@ public interface ExpressionVisitor {
155155
void visit(KeepExpression aexpr);
156156

157157
void visit(MySQLGroupConcat groupConcat);
158-
158+
159159
void visit(ValueListExpression valueList);
160160

161161
void visit(RowConstructor rowConstructor);
@@ -168,4 +168,6 @@ public interface ExpressionVisitor {
168168

169169
public void visit(NotExpression aThis);
170170

171+
public void visit(NextValExpression aThis);
172+
171173
}

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import net.sf.jsqlparser.expression.operators.arithmetic.*;
1313
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
1414
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
15-
import net.sf.jsqlparser.expression.operators.relational.JsonOperator;
1615
import net.sf.jsqlparser.expression.operators.relational.*;
1716
import net.sf.jsqlparser.schema.Column;
1817
import net.sf.jsqlparser.statement.select.AllColumns;
@@ -341,7 +340,6 @@ public void visit(NamedExpressionList namedExpressionList) {
341340
}
342341
}
343342

344-
345343
@Override
346344
public void visit(MultiExpressionList multiExprList) {
347345
for (ExpressionList list : multiExprList.getExprList()) {
@@ -412,7 +410,7 @@ public void visit(MySQLGroupConcat groupConcat) {
412410
}
413411
}
414412
}
415-
413+
416414
@Override
417415
public void visit(ValueListExpression valueListExpression) {
418416
for (Expression expr : valueListExpression.getExpressionList().getExpressions()) {
@@ -493,7 +491,10 @@ public void visit(TimeKeyExpression timeKeyExpression) {
493491

494492
@Override
495493
public void visit(DateTimeLiteralExpression literal) {
494+
}
496495

496+
@Override
497+
public void visit(NextValExpression nextVal) {
497498
}
498499

499500
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.expression;
11+
12+
import java.util.List;
13+
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
14+
15+
public class NextValExpression extends ASTNodeAccessImpl implements Expression {
16+
17+
private List<String> nameList;
18+
19+
public NextValExpression(List<String> nameList) {
20+
this.nameList = nameList;
21+
}
22+
23+
public String getName() {
24+
StringBuilder b = new StringBuilder();
25+
for (String name : nameList) {
26+
if (b.length() > 0) {
27+
b.append(".");
28+
}
29+
b.append(name);
30+
}
31+
return b.toString();
32+
}
33+
34+
@Override
35+
public String toString() {
36+
return "NEXTVAL FOR " + getName();
37+
}
38+
39+
@Override
40+
public void accept(ExpressionVisitor expressionVisitor) {
41+
expressionVisitor.visit(this);
42+
}
43+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import net.sf.jsqlparser.expression.KeepExpression;
3333
import net.sf.jsqlparser.expression.LongValue;
3434
import net.sf.jsqlparser.expression.MySQLGroupConcat;
35+
import net.sf.jsqlparser.expression.NextValExpression;
3536
import net.sf.jsqlparser.expression.NotExpression;
3637
import net.sf.jsqlparser.expression.NullValue;
3738
import net.sf.jsqlparser.expression.NumericBind;
@@ -835,4 +836,8 @@ public void visit(DescribeStatement describe) {
835836
public void visit(ExplainStatement explain) {
836837
explain.getStatement().accept(this);
837838
}
839+
840+
@Override
841+
public void visit(NextValExpression arg0) {
842+
}
838843
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import net.sf.jsqlparser.expression.KeepExpression;
3333
import net.sf.jsqlparser.expression.LongValue;
3434
import net.sf.jsqlparser.expression.MySQLGroupConcat;
35+
import net.sf.jsqlparser.expression.NextValExpression;
3536
import net.sf.jsqlparser.expression.NotExpression;
3637
import net.sf.jsqlparser.expression.NullValue;
3738
import net.sf.jsqlparser.expression.NumericBind;
@@ -781,4 +782,9 @@ public void visit(DateTimeLiteralExpression literal) {
781782
buffer.append(literal.toString());
782783
}
783784

785+
@Override
786+
public void visit(NextValExpression nextVal) {
787+
buffer.append("NEXTVAL FOR ").append(nextVal.getName());
788+
}
789+
784790
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
203203
| <K_MODIFY: "MODIFY">
204204
| <K_NATURAL:"NATURAL">
205205
| <K_NEXT:"NEXT">
206+
| <K_NEXTVAL:"NEXTVAL">
206207
| <K_NO:"NO">
207208
| <K_NOCYCLE:"NOCYCLE">
208209
| <K_NOT:"NOT">
@@ -2695,6 +2696,8 @@ Expression PrimaryExpression() #PrimaryExpression:
26952696

26962697
| LOOKAHEAD(2) retval = IntervalExpression()
26972698

2699+
| retval = NextValExpression()
2700+
26982701
| retval=Column()
26992702

27002703
| LOOKAHEAD("(" SimpleExpression() ")") "(" retval=SimpleExpression() ")" {retval = new Parenthesis(retval); }
@@ -2726,6 +2729,16 @@ Expression PrimaryExpression() #PrimaryExpression:
27262729
}
27272730
}
27282731

2732+
NextValExpression NextValExpression() : {
2733+
List<String> data = new ArrayList<String>();
2734+
}
2735+
{
2736+
<K_NEXTVAL> <K_FOR> data = RelObjectNameList()
2737+
{
2738+
return new NextValExpression(data);
2739+
}
2740+
}
2741+
27292742
JdbcNamedParameter JdbcNamedParameter() : {
27302743
JdbcNamedParameter parameter = new JdbcNamedParameter();
27312744
String name;

src/test/java/net/sf/jsqlparser/statement/insert/InsertTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,4 +293,9 @@ public void testInsertKeyWordIntervalIssue682() throws JSQLParserException {
293293
public void testWithAtFront() throws JSQLParserException {
294294
assertSqlCanBeParsedAndDeparsed("WITH foo AS ( SELECT attr FROM bar ) INSERT INTO lalelu (attr) SELECT attr FROM foo");
295295
}
296+
297+
@Test
298+
public void testNextVal() throws JSQLParserException {
299+
assertSqlCanBeParsedAndDeparsed("INSERT INTO tracker (monitor_id, user_id, module_name, item_id, item_summary, team_id, date_modified, action, visible, id) VALUES (?, ?, ?, ?, ?, ?, to_date(?, 'YYYY-MM-DD HH24:MI:SS'), ?, ?, NEXTVAL FOR TRACKER_ID_SEQ)");
300+
}
296301
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class SelectTest {
4141

4242
@Before
4343
public void setup() {
44-
System.out.println(name.getMethodName());
44+
// System.out.println(name.getMethodName());
4545
}
4646

4747
// From statement multipart

0 commit comments

Comments
 (0)