Skip to content

Commit 22da326

Browse files
authored
Add support CREATE SEQUENCE AS data type (#2400)
* Add support CREATE SEQUENCE AS data type * format cod
1 parent 59dfc3b commit 22da326

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

src/main/java/net/sf/jsqlparser/schema/Sequence.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
*/
1010
package net.sf.jsqlparser.schema;
1111

12-
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
13-
1412
import java.util.ArrayList;
1513
import java.util.Collection;
1614
import java.util.Collections;
1715
import java.util.List;
1816
import java.util.Optional;
17+
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
1918

2019
/**
2120
* Represents the database type for a {@code SEQUENCE}
@@ -29,6 +28,7 @@ public class Sequence extends ASTNodeAccessImpl implements MultiPartName {
2928
private List<String> partItems = new ArrayList<>();
3029

3130
private List<Parameter> parameters;
31+
private String dataType;
3232

3333
public Sequence() {}
3434

@@ -45,6 +45,19 @@ public void setParameters(List<Parameter> parameters) {
4545
this.parameters = parameters;
4646
}
4747

48+
public String getDataType() {
49+
return dataType;
50+
}
51+
52+
public void setDataType(String dataType) {
53+
this.dataType = dataType;
54+
}
55+
56+
public Sequence withDataType(String dataType) {
57+
this.setDataType(dataType);
58+
return this;
59+
}
60+
4861
public Database getDatabase() {
4962
return new Database(getIndex(DATABASE_IDX));
5063
}
@@ -129,6 +142,9 @@ public String getUnquotedName() {
129142
@Override
130143
public String toString() {
131144
StringBuilder sql = new StringBuilder(getFullyQualifiedName());
145+
if (dataType != null) {
146+
sql.append(" AS ").append(dataType);
147+
}
132148
if (parameters != null) {
133149
for (Sequence.Parameter parameter : parameters) {
134150
sql.append(" ").append(parameter.formatParameter());

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11500,9 +11500,11 @@ CreateSequence CreateSequence():
1150011500
CreateSequence createSequence = new CreateSequence();
1150111501
Sequence sequence;
1150211502
List<Sequence.Parameter> sequenceParameters;
11503+
Token dataType = null;
1150311504
}
1150411505
{
1150511506
<K_SEQUENCE> sequence=Sequence() { createSequence.setSequence(sequence); }
11507+
[ <K_AS> ( dataType=<S_IDENTIFIER> | dataType=<DATA_TYPE> ) { sequence.setDataType(dataType.image); } ]
1150611508
sequenceParameters = SequenceParameters()
1150711509
{
1150811510
sequence.setParameters(sequenceParameters);

src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99
*/
1010
package net.sf.jsqlparser.statement.create;
1111

12+
import static net.sf.jsqlparser.test.TestUtils.*;
13+
1214
import net.sf.jsqlparser.JSQLParserException;
1315
import net.sf.jsqlparser.schema.Database;
1416
import net.sf.jsqlparser.schema.Sequence;
1517
import net.sf.jsqlparser.schema.Sequence.Parameter;
1618
import net.sf.jsqlparser.schema.Sequence.ParameterType;
1719
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
18-
import static net.sf.jsqlparser.test.TestUtils.*;
1920
import org.junit.jupiter.api.Test;
2021

2122
public class CreateSequenceTest {
@@ -143,4 +144,20 @@ public void testCreateSequence_preservesParamOrder() throws JSQLParserException
143144
statement);
144145
}
145146

147+
@Test
148+
public void testCreateSequence_withAsDataType() throws JSQLParserException {
149+
String statement =
150+
"CREATE SEQUENCE public.activites_activite_id_seq AS integer START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE CACHE 1";
151+
assertSqlCanBeParsedAndDeparsed(statement);
152+
}
153+
154+
@Test
155+
public void testCreateSequence_withAsDataTypeSimple() throws JSQLParserException {
156+
String statement = "CREATE SEQUENCE my_seq AS integer";
157+
assertSqlCanBeParsedAndDeparsed(statement);
158+
assertDeparse(new CreateSequence().withSequence(
159+
new Sequence().withName("my_seq").withDataType("integer")),
160+
statement);
161+
}
162+
146163
}

0 commit comments

Comments
 (0)