From 1d27f93389a83c260a90f9fc4156c0fbdca30e41 Mon Sep 17 00:00:00 2001 From: Michael Gratton Date: Fri, 21 Nov 2025 13:47:12 +1100 Subject: [PATCH 1/2] Support PostgreSQL-specific [CREATE SEQUENCE name START n ...] I.e. no `START WITH` Fixes #2347 --- src/main/java/net/sf/jsqlparser/schema/Sequence.java | 4 +++- .../jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 9 +++++++-- .../jsqlparser/statement/create/CreateSequenceTest.java | 5 +++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/schema/Sequence.java b/src/main/java/net/sf/jsqlparser/schema/Sequence.java index 2f813c1d7..337d95def 100644 --- a/src/main/java/net/sf/jsqlparser/schema/Sequence.java +++ b/src/main/java/net/sf/jsqlparser/schema/Sequence.java @@ -158,7 +158,7 @@ public Sequence addParameters(Collection parameters) { * The available parameters to a sequence */ public enum ParameterType { - INCREMENT_BY, START_WITH, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL; + INCREMENT_BY, START_WITH, START, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL; public static ParameterType from(String type) { return Enum.valueOf(ParameterType.class, type.toUpperCase()); @@ -191,6 +191,8 @@ public String formatParameter() { return prefix("INCREMENT BY"); case START_WITH: return prefix("START WITH"); + case START: + return prefix("START"); case RESTART_WITH: if (value != null) { return prefix("RESTART WITH"); diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 36f60ed58..3dac27c5a 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -10209,6 +10209,7 @@ List SequenceParameters(): List sequenceParameters = new ArrayList(); Sequence.Parameter parameter = null; Token token = null; + Token withToken = null; } { ( @@ -10223,9 +10224,13 @@ List SequenceParameters(): ) | ( - token= + [ withToken= ] token= { - parameter = new Sequence.Parameter(Sequence.ParameterType.START_WITH); + if (withToken != null) { + parameter = new Sequence.Parameter(Sequence.ParameterType.START_WITH); + } else { + parameter = new Sequence.Parameter(Sequence.ParameterType.START); + } parameter.setValue(Long.parseLong(token.image)); sequenceParameters.add(parameter); } 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 db4e1984d..5b78eeb26 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java @@ -44,6 +44,11 @@ public void testCreateSequence_withStart() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq START WITH 10"); } + @Test + public void testCreateSequence_withStartPostgres() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq START 10"); + } + @Test public void testCreateSequence_withMaxValue() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq MAXVALUE 5"); From d5e7148b2b68f95dad4f1e8c72bb287d93315e03 Mon Sep 17 00:00:00 2001 From: Michael Gratton Date: Fri, 21 Nov 2025 17:25:49 +1100 Subject: [PATCH 2/2] =?UTF-8?q?Support=20PostgreSQL-specific=20[CREATE=20S?= =?UTF-8?q?EQUENCE=20=E2=80=A6=20=20INCREMENT=20=20n=20...]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I.e. no `INCREMENT BY` Fixes #2347 --- src/main/java/net/sf/jsqlparser/schema/Sequence.java | 4 +++- .../jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 9 +++++++-- .../jsqlparser/statement/create/CreateSequenceTest.java | 5 +++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/schema/Sequence.java b/src/main/java/net/sf/jsqlparser/schema/Sequence.java index 337d95def..083122434 100644 --- a/src/main/java/net/sf/jsqlparser/schema/Sequence.java +++ b/src/main/java/net/sf/jsqlparser/schema/Sequence.java @@ -158,7 +158,7 @@ public Sequence addParameters(Collection parameters) { * The available parameters to a sequence */ public enum ParameterType { - INCREMENT_BY, START_WITH, START, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL; + INCREMENT_BY, INCREMENT, START_WITH, START, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL; public static ParameterType from(String type) { return Enum.valueOf(ParameterType.class, type.toUpperCase()); @@ -189,6 +189,8 @@ public String formatParameter() { switch (option) { case INCREMENT_BY: return prefix("INCREMENT BY"); + case INCREMENT: + return prefix("INCREMENT"); case START_WITH: return prefix("START WITH"); case START: diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 3dac27c5a..aaeea09c7 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -10209,15 +10209,20 @@ List SequenceParameters(): List sequenceParameters = new ArrayList(); Sequence.Parameter parameter = null; Token token = null; + Token byToken = null; Token withToken = null; } { ( LOOKAHEAD(2) ( ( - token= + [ byToken= ] token= { - parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT_BY); + if (byToken != null) { + parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT_BY); + } else { + parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT); + } parameter.setValue(Long.parseLong(token.image)); sequenceParameters.add(parameter); } 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 5b78eeb26..2ef0de36f 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/CreateSequenceTest.java @@ -39,6 +39,11 @@ public void testCreateSequence_withIncrement() throws JSQLParserException { statement); } + @Test + public void testCreateSequence_withIncrementPostres() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE db.schema.my_seq INCREMENT 1"); + } + @Test public void testCreateSequence_withStart() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq START WITH 10");