Skip to content

Commit d34c885

Browse files
authored
Support ALTER SEQUENCE (#980)
* support alter sequence * improve coverage
1 parent 38597f3 commit d34c885

File tree

11 files changed

+306
-21
lines changed

11 files changed

+306
-21
lines changed

src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package net.sf.jsqlparser.statement;
1111

1212
import net.sf.jsqlparser.statement.alter.Alter;
13+
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
1314
import net.sf.jsqlparser.statement.comment.Comment;
1415
import net.sf.jsqlparser.statement.create.index.CreateIndex;
1516
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -91,4 +92,6 @@ public interface StatementVisitor {
9192
void visit(Grant grant);
9293

9394
void visit(CreateSequence createSequence);
95+
96+
void visit(AlterSequence alterSequence);
9497
}

src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package net.sf.jsqlparser.statement;
1111

1212
import net.sf.jsqlparser.statement.alter.Alter;
13+
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
1314
import net.sf.jsqlparser.statement.comment.Comment;
1415
import net.sf.jsqlparser.statement.create.index.CreateIndex;
1516
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -170,4 +171,8 @@ public void visit(Grant grant) {
170171
@Override
171172
public void visit(CreateSequence createSequence) {
172173
}
174+
175+
@Override
176+
public void visit(AlterSequence alterSequence) {
177+
}
173178
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2020 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.alter.sequence;
11+
12+
import net.sf.jsqlparser.schema.Sequence;
13+
import net.sf.jsqlparser.statement.Statement;
14+
import net.sf.jsqlparser.statement.StatementVisitor;
15+
16+
/**
17+
* An {@code ALTER SEQUENCE} statement
18+
*/
19+
public class AlterSequence implements Statement {
20+
21+
public Sequence sequence;
22+
23+
public void setSequence(Sequence sequence) {
24+
this.sequence = sequence;
25+
}
26+
27+
public Sequence getSequence() {
28+
return sequence;
29+
}
30+
31+
@Override
32+
public void accept(StatementVisitor statementVisitor) {
33+
statementVisitor.visit(this);
34+
}
35+
36+
@Override
37+
public String toString() {
38+
String sql;
39+
sql = "ALTER SEQUENCE " + sequence;
40+
return sql;
41+
}
42+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import net.sf.jsqlparser.statement.Statements;
7070
import net.sf.jsqlparser.statement.UseStatement;
7171
import net.sf.jsqlparser.statement.alter.Alter;
72+
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
7273
import net.sf.jsqlparser.statement.comment.Comment;
7374
import net.sf.jsqlparser.statement.create.index.CreateIndex;
7475
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -877,6 +878,11 @@ public void visit(ArrayExpression array) {
877878

878879
@Override
879880
public void visit(CreateSequence createSequence) {
881+
throw new UnsupportedOperationException("Finding tables from CreateSequence is not supported");
882+
}
880883

884+
@Override
885+
public void visit(AlterSequence alterSequence) {
886+
throw new UnsupportedOperationException("Finding tables from AlterSequence is not supported");
881887
}
882888
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2020 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.util.deparser;
11+
12+
/**
13+
* A base for a Statement DeParser
14+
* @param <S> the type of statement this DeParser supports
15+
*/
16+
abstract class AbstractDeParser<S> {
17+
protected StringBuilder buffer;
18+
19+
protected AbstractDeParser(StringBuilder buffer) {
20+
this.buffer = buffer;
21+
}
22+
23+
/**
24+
* DeParses the given statement into the buffer
25+
* @param statement the statement to deparse
26+
*/
27+
abstract void deParse(S statement);
28+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2020 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.util.deparser;
11+
12+
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
13+
14+
/**
15+
* A class to de-parse (that is, transform from JSqlParser hierarchy into a string) a
16+
* {@link net.sf.jsqlparser.statement.alter.sequence.AlterSequence}
17+
*/
18+
public class AlterSequenceDeParser extends AbstractDeParser<AlterSequence> {
19+
20+
/**
21+
* @param buffer the buffer that will be filled with the AlterSequence
22+
*/
23+
public AlterSequenceDeParser(StringBuilder buffer) {
24+
super(buffer);
25+
}
26+
27+
@Override
28+
public void deParse(AlterSequence statement) {
29+
buffer.append("ALTER SEQUENCE ");
30+
buffer.append(statement.getSequence());
31+
}
32+
}

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,18 @@
1515
* A class to de-parse (that is, transform from JSqlParser hierarchy into a string) a
1616
* {@link net.sf.jsqlparser.statement.create.sequence.CreateSequence}
1717
*/
18-
public class CreateSequenceDeParser {
19-
20-
private StringBuilder buffer;
18+
public class CreateSequenceDeParser extends AbstractDeParser<CreateSequence>{
2119

2220
/**
23-
* @param buffer the buffer that will be filled with the select
21+
* @param buffer the buffer that will be filled with the CreatSequence
2422
*/
2523
public CreateSequenceDeParser(StringBuilder buffer) {
26-
this.buffer = buffer;
24+
super(buffer);
2725
}
2826

29-
public void deParse(CreateSequence createSequence) {
27+
@Override
28+
public void deParse(CreateSequence statement) {
3029
buffer.append("CREATE SEQUENCE ");
31-
buffer.append(createSequence.getSequence());
30+
buffer.append(statement.getSequence());
3231
}
3332
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import net.sf.jsqlparser.statement.Statements;
2424
import net.sf.jsqlparser.statement.UseStatement;
2525
import net.sf.jsqlparser.statement.alter.Alter;
26+
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
2627
import net.sf.jsqlparser.statement.comment.Comment;
2728
import net.sf.jsqlparser.statement.create.index.CreateIndex;
2829
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -293,4 +294,9 @@ public void visit(CreateSchema aThis) {
293294
public void visit(CreateSequence createSequence) {
294295
new CreateSequenceDeParser(buffer).deParse(createSequence);
295296
}
297+
298+
@Override
299+
public void visit(AlterSequence alterSequence) {
300+
new AlterSequenceDeParser(buffer).deParse(alterSequence);
301+
}
296302
}

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

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import net.sf.jsqlparser.expression.operators.relational.*;
3737
import net.sf.jsqlparser.schema.*;
3838
import net.sf.jsqlparser.statement.*;
3939
import net.sf.jsqlparser.statement.alter.*;
40+
import net.sf.jsqlparser.statement.alter.sequence.*;
4041
import net.sf.jsqlparser.statement.comment.*;
4142
import net.sf.jsqlparser.statement.create.index.*;
4243
import net.sf.jsqlparser.statement.create.schema.*;
@@ -464,8 +465,12 @@ Statement SingleStatement() :
464465
LOOKAHEAD(CreateView())
465466
stm = CreateView()
466467
|
468+
LOOKAHEAD(AlterView())
467469
stm = AlterView()
468470
|
471+
LOOKAHEAD(AlterSequence())
472+
stm = AlterSequence()
473+
|
469474
stm = Drop()
470475
|
471476
stm = Truncate()
@@ -4699,26 +4704,21 @@ Sequence Sequence() #Sequence :
46994704
}
47004705
{
47014706
data = RelObjectNameList()
4702-
47034707
{
47044708
Sequence sequence = new Sequence(data);
47054709
linkAST(sequence,jjtThis);
47064710
return sequence;
47074711
}
47084712
}
47094713

4710-
CreateSequence CreateSequence():
4714+
List<Sequence.Parameter> SequenceParameters():
47114715
{
4712-
CreateSequence createSequence = new CreateSequence();
4713-
Sequence sequence;
47144716
List<Sequence.Parameter> sequenceParameters = new ArrayList<Sequence.Parameter>();
47154717
Sequence.Parameter parameter = null;
47164718
Token token = null;
47174719
}
47184720
{
4719-
<K_CREATE>
4720-
<K_SEQUENCE> sequence=Sequence() { createSequence.setSequence(sequence); }
4721-
(
4721+
(
47224722
(<K_INCREMENT> <K_BY> token=<S_LONG>
47234723
{
47244724
parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT_BY);
@@ -4791,7 +4791,36 @@ CreateSequence CreateSequence():
47914791
)
47924792
)* //zero or many times those productions
47934793
{
4794-
sequence.setParameters(sequenceParameters);
4794+
return sequenceParameters;
4795+
}
4796+
}
4797+
4798+
CreateSequence CreateSequence():
4799+
{
4800+
CreateSequence createSequence = new CreateSequence();
4801+
Sequence sequence;
4802+
List<Sequence.Parameter> sequenceParameters;
4803+
}
4804+
{
4805+
<K_CREATE>
4806+
<K_SEQUENCE> sequence=Sequence() { createSequence.setSequence(sequence); }
4807+
sequenceParameters = SequenceParameters() { sequence.setParameters(sequenceParameters); }
4808+
{
47954809
return createSequence;
47964810
}
47974811
}
4812+
4813+
AlterSequence AlterSequence():
4814+
{
4815+
AlterSequence alterSequence = new AlterSequence();
4816+
Sequence sequence;
4817+
List<Sequence.Parameter> sequenceParameters;
4818+
}
4819+
{
4820+
<K_ALTER>
4821+
<K_SEQUENCE> sequence=Sequence() { alterSequence.setSequence(sequence); }
4822+
sequenceParameters = SequenceParameters() { sequence.setParameters(sequenceParameters); }
4823+
{
4824+
return alterSequence;
4825+
}
4826+
}

0 commit comments

Comments
 (0)