diff --git a/src/main/java/net/sf/jsqlparser/schema/Sequence.java b/src/main/java/net/sf/jsqlparser/schema/Sequence.java index 083122434..764294db6 100644 --- a/src/main/java/net/sf/jsqlparser/schema/Sequence.java +++ b/src/main/java/net/sf/jsqlparser/schema/Sequence.java @@ -9,13 +9,12 @@ */ package net.sf.jsqlparser.schema; -import net.sf.jsqlparser.parser.ASTNodeAccessImpl; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Optional; +import net.sf.jsqlparser.parser.ASTNodeAccessImpl; /** * Represents the database type for a {@code SEQUENCE} @@ -29,6 +28,7 @@ public class Sequence extends ASTNodeAccessImpl implements MultiPartName { private List partItems = new ArrayList<>(); private List parameters; + private String dataType; public Sequence() {} @@ -45,6 +45,19 @@ public void setParameters(List parameters) { this.parameters = parameters; } + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public Sequence withDataType(String dataType) { + this.setDataType(dataType); + return this; + } + public Database getDatabase() { return new Database(getIndex(DATABASE_IDX)); } @@ -129,6 +142,9 @@ public String getUnquotedName() { @Override public String toString() { StringBuilder sql = new StringBuilder(getFullyQualifiedName()); + if (dataType != null) { + sql.append(" AS ").append(dataType); + } if (parameters != null) { for (Sequence.Parameter parameter : parameters) { sql.append(" ").append(parameter.formatParameter()); diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index e7eca9a78..ac704be70 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -11500,9 +11500,11 @@ CreateSequence CreateSequence(): CreateSequence createSequence = new CreateSequence(); Sequence sequence; List sequenceParameters; + Token dataType = null; } { sequence=Sequence() { createSequence.setSequence(sequence); } + [ ( dataType= | dataType= ) { sequence.setDataType(dataType.image); } ] sequenceParameters = SequenceParameters() { sequence.setParameters(sequenceParameters); diff --git a/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java b/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java index 2ef0de36f..10a37207c 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java @@ -9,13 +9,14 @@ */ package net.sf.jsqlparser.statement.create; +import static net.sf.jsqlparser.test.TestUtils.*; + import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.schema.Database; import net.sf.jsqlparser.schema.Sequence; import net.sf.jsqlparser.schema.Sequence.Parameter; import net.sf.jsqlparser.schema.Sequence.ParameterType; import net.sf.jsqlparser.statement.create.sequence.CreateSequence; -import static net.sf.jsqlparser.test.TestUtils.*; import org.junit.jupiter.api.Test; public class CreateSequenceTest { @@ -143,4 +144,20 @@ public void testCreateSequence_preservesParamOrder() throws JSQLParserException statement); } + @Test + public void testCreateSequence_withAsDataType() throws JSQLParserException { + String statement = + "CREATE SEQUENCE public.activites_activite_id_seq AS integer START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE CACHE 1"; + assertSqlCanBeParsedAndDeparsed(statement); + } + + @Test + public void testCreateSequence_withAsDataTypeSimple() throws JSQLParserException { + String statement = "CREATE SEQUENCE my_seq AS integer"; + assertSqlCanBeParsedAndDeparsed(statement); + assertDeparse(new CreateSequence().withSequence( + new Sequence().withName("my_seq").withDataType("integer")), + statement); + } + }