Skip to content

Commit 40ccf4b

Browse files
authored
Support PostgreSQL-specific [CREATE SEQUENCE name START n ...] (#2348)
* Support PostgreSQL-specific [CREATE SEQUENCE name START n ...] I.e. no `START WITH` Fixes #2347 * Support PostgreSQL-specific [CREATE SEQUENCE … INCREMENT n ...] I.e. no `INCREMENT BY` Fixes #2347
1 parent 2d83cea commit 40ccf4b

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public Sequence addParameters(Collection<? extends Parameter> parameters) {
158158
* The available parameters to a sequence
159159
*/
160160
public enum ParameterType {
161-
INCREMENT_BY, START_WITH, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL;
161+
INCREMENT_BY, INCREMENT, START_WITH, START, RESTART_WITH, MAXVALUE, NOMAXVALUE, MINVALUE, NOMINVALUE, CYCLE, NOCYCLE, CACHE, NOCACHE, ORDER, NOORDER, KEEP, NOKEEP, SESSION, GLOBAL;
162162

163163
public static ParameterType from(String type) {
164164
return Enum.valueOf(ParameterType.class, type.toUpperCase());
@@ -189,8 +189,12 @@ public String formatParameter() {
189189
switch (option) {
190190
case INCREMENT_BY:
191191
return prefix("INCREMENT BY");
192+
case INCREMENT:
193+
return prefix("INCREMENT");
192194
case START_WITH:
193195
return prefix("START WITH");
196+
case START:
197+
return prefix("START");
194198
case RESTART_WITH:
195199
if (value != null) {
196200
return prefix("RESTART WITH");

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10217,23 +10217,33 @@ List<Sequence.Parameter> SequenceParameters():
1021710217
List<Sequence.Parameter> sequenceParameters = new ArrayList<Sequence.Parameter>();
1021810218
Sequence.Parameter parameter = null;
1021910219
Token token = null;
10220+
Token byToken = null;
10221+
Token withToken = null;
1022010222
}
1022110223
{
1022210224
(
1022310225
LOOKAHEAD(2) (
1022410226
(
10225-
<K_INCREMENT> <K_BY> token=<S_LONG>
10227+
<K_INCREMENT> [ byToken=<K_BY> ] token=<S_LONG>
1022610228
{
10227-
parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT_BY);
10229+
if (byToken != null) {
10230+
parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT_BY);
10231+
} else {
10232+
parameter = new Sequence.Parameter(Sequence.ParameterType.INCREMENT);
10233+
}
1022810234
parameter.setValue(Long.parseLong(token.image));
1022910235
sequenceParameters.add(parameter);
1023010236
}
1023110237
)
1023210238
|
1023310239
(
10234-
<K_START> <K_WITH> token=<S_LONG>
10240+
<K_START> [ withToken=<K_WITH> ] token=<S_LONG>
1023510241
{
10236-
parameter = new Sequence.Parameter(Sequence.ParameterType.START_WITH);
10242+
if (withToken != null) {
10243+
parameter = new Sequence.Parameter(Sequence.ParameterType.START_WITH);
10244+
} else {
10245+
parameter = new Sequence.Parameter(Sequence.ParameterType.START);
10246+
}
1023710247
parameter.setValue(Long.parseLong(token.image));
1023810248
sequenceParameters.add(parameter);
1023910249
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,21 @@ public void testCreateSequence_withIncrement() throws JSQLParserException {
3939
statement);
4040
}
4141

42+
@Test
43+
public void testCreateSequence_withIncrementPostres() throws JSQLParserException {
44+
assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE db.schema.my_seq INCREMENT 1");
45+
}
46+
4247
@Test
4348
public void testCreateSequence_withStart() throws JSQLParserException {
4449
assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq START WITH 10");
4550
}
4651

52+
@Test
53+
public void testCreateSequence_withStartPostgres() throws JSQLParserException {
54+
assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq START 10");
55+
}
56+
4757
@Test
4858
public void testCreateSequence_withMaxValue() throws JSQLParserException {
4959
assertSqlCanBeParsedAndDeparsed("CREATE SEQUENCE my_seq MAXVALUE 5");

0 commit comments

Comments
 (0)