Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,79 @@
*/
public class AlterSequence implements Statement {

public enum Action {
PARAMETERS, RENAME, OWNER, SET_SCHEMA, SET_LOGGED, SET_UNLOGGED
}

public Sequence sequence;
private boolean ifExists;
private Action action = Action.PARAMETERS;
private String newName;
private String owner;
private String schemaName;

public boolean isIfExists() {
return ifExists;
}

public void setIfExists(boolean ifExists) {
this.ifExists = ifExists;
}

public Action getAction() {
return action;
}

public void setAction(Action action) {
this.action = java.util.Objects.requireNonNull(action, "action");
}

public String getNewName() {
return newName;
}

public void setNewName(String newName) {
this.newName = newName;
}

public String getOwner() {
return owner;
}

public void setOwner(String owner) {
this.owner = owner;
}

public String getSchemaName() {
return schemaName;
}

public void setSchemaName(String schemaName) {
this.schemaName = schemaName;
}

public StringBuilder appendTo(StringBuilder builder) {
builder.append("ALTER SEQUENCE ");
if (ifExists) {
builder.append("IF EXISTS ");
}
builder.append(action == Action.PARAMETERS ? sequence : sequence.getFullyQualifiedName());
switch (action) {
case RENAME:
return builder.append(" RENAME TO ").append(newName);
case OWNER:
return builder.append(" OWNER TO ").append(owner);
case SET_SCHEMA:
return builder.append(" SET SCHEMA ").append(schemaName);
case SET_LOGGED:
return builder.append(" SET LOGGED");
case SET_UNLOGGED:
return builder.append(" SET UNLOGGED");
default:
return builder;
}
}


public Sequence getSequence() {
return sequence;
Expand All @@ -35,9 +107,7 @@ public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {

@Override
public String toString() {
String sql;
sql = "ALTER SEQUENCE " + sequence;
return sql;
return appendTo(new StringBuilder()).toString();
}

public AlterSequence withSequence(Sequence sequence) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,42 @@
*/
public class CreateSequence implements Statement {

public enum Persistence {
TEMP, TEMPORARY, UNLOGGED, LOCAL_TEMP, LOCAL_TEMPORARY, GLOBAL_TEMP, GLOBAL_TEMPORARY
}

public Sequence sequence;
private Persistence persistence;
private boolean ifNotExists;

public Persistence getPersistence() {
return persistence;
}

public void setPersistence(Persistence persistence) {
this.persistence = persistence;
}

public boolean isIfNotExists() {
return ifNotExists;
}

public void setIfNotExists(boolean ifNotExists) {
this.ifNotExists = ifNotExists;
}

public StringBuilder appendTo(StringBuilder builder) {
builder.append("CREATE ");
if (persistence != null) {
builder.append(persistence.name().replace('_', ' ')).append(' ');
}
builder.append("SEQUENCE ");
if (ifNotExists) {
builder.append("IF NOT EXISTS ");
}
return builder.append(sequence);
}


public Sequence getSequence() {
return sequence;
Expand All @@ -35,9 +70,7 @@ public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {

@Override
public String toString() {
String sql;
sql = "CREATE SEQUENCE " + sequence;
return sql;
return appendTo(new StringBuilder()).toString();
}

public CreateSequence withSequence(Sequence sequence) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ public AlterSequenceDeParser(StringBuilder buffer) {

@Override
public void deParse(AlterSequence statement) {
builder.append("ALTER SEQUENCE ");
builder.append(statement.getSequence());
statement.appendTo(builder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ public CreateSequenceDeParser(StringBuilder buffer) {

@Override
public void deParse(CreateSequence statement) {
builder.append("CREATE SEQUENCE ");
builder.append(statement.getSequence());
statement.appendTo(builder);
}
}
95 changes: 71 additions & 24 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -18812,40 +18812,86 @@ SequenceOwnership SequenceOwnership():
{ return ownership; }
}

/** AS, ownership and numeric parameters share the same sequence-option boundary. */
void SequenceDefinitionOptions(Sequence sequence):
{
List<Sequence.Parameter> parameters = new ArrayList<Sequence.Parameter>();
Sequence.Parameter parameter;
SequenceOwnership ownership;
Token dataType;
}
{
(
LOOKAHEAD(2)
(
<K_AS> ( dataType=<S_IDENTIFIER> | dataType=<DATA_TYPE> ) {
requireDdlSyntax(sequence.getDataType() == null, "Duplicate sequence AS clause");
sequence.setDataType(dataType.image);
}
|
LOOKAHEAD({ isKeywordAhead("OWNED") }) ownership=SequenceOwnership() {
requireDdlSyntax(sequence.getOwnership() == null, "Duplicate sequence OWNED BY clause");
sequence.setOwnership(ownership);
}
|
parameter=SequenceParameter() { parameters.add(parameter); }
)
)*
{ sequence.setParameters(parameters); }
}

CreateSequence CreateSequence():
{
CreateSequence createSequence = new CreateSequence();
Sequence sequence;
List<Sequence.Parameter> sequenceParameters;
Token dataType = null;
SequenceOwnership ownership;
CreateSequence result = new CreateSequence();
Sequence sequence;
Token persistence;
Token scope = null;
}
{
<K_SEQUENCE> sequence=Sequence() { createSequence.setSequence(sequence); }
[ <K_AS> ( dataType=<S_IDENTIFIER> | dataType=<DATA_TYPE> ) { sequence.setDataType(dataType.image); } ]
sequenceParameters = SequenceParameters()
[ LOOKAHEAD({ isKeywordAhead("OWNED") }) ownership=SequenceOwnership() { sequence.setOwnership(ownership); } ]
{
sequence.setParameters(sequenceParameters);
return createSequence;
}
[
( <K_UNLOGGED> { result.setPersistence(CreateSequence.Persistence.UNLOGGED); }
|
[ ( scope=<K_LOCAL> | scope=<K_GLOBAL> ) ]
( persistence=<K_TEMP> | persistence=<K_TEMPORARY> ) {
result.setPersistence(CreateSequence.Persistence.valueOf(
(scope == null ? "" : scope.image.toUpperCase(Locale.ROOT) + "_")
+ persistence.image.toUpperCase(Locale.ROOT)));
} )
]
<K_SEQUENCE>
[ LOOKAHEAD(3) <K_IF> <K_NOT> <K_EXISTS> { result.setIfNotExists(true); } ]
sequence=Sequence() { result.setSequence(sequence); }
SequenceDefinitionOptions(sequence)
{ return result; }
}

AlterSequence AlterSequence():
{
AlterSequence alterSequence = new AlterSequence();
Sequence sequence;
List<Sequence.Parameter> sequenceParameters;
SequenceOwnership ownership;
AlterSequence result = new AlterSequence();
Sequence sequence;
String name;
}
{
<K_SEQUENCE> sequence=Sequence() { alterSequence.setSequence(sequence); }
sequenceParameters = SequenceParameters()
[ LOOKAHEAD({ isKeywordAhead("OWNED") }) ownership=SequenceOwnership() { sequence.setOwnership(ownership); } ]
{
sequence.setParameters(sequenceParameters);
return alterSequence;
}
<K_SEQUENCE> [ LOOKAHEAD(2) <K_IF> <K_EXISTS> { result.setIfExists(true); } ]
sequence=Sequence() { result.setSequence(sequence); }
(
<K_RENAME> <K_TO> name=RelObjectName()
{ result.setAction(AlterSequence.Action.RENAME); result.setNewName(name); }
|
LOOKAHEAD({ isKeywordAhead("OWNER") }) ContextualKeyword("OWNER") <K_TO> name=RelObjectName()
{ result.setAction(AlterSequence.Action.OWNER); result.setOwner(name); }
|
<K_SET>
(
<K_SCHEMA> name=RelObjectName()
{ result.setAction(AlterSequence.Action.SET_SCHEMA); result.setSchemaName(name); }
| <K_UNLOGGED> { result.setAction(AlterSequence.Action.SET_UNLOGGED); }
| ContextualKeyword("LOGGED") { result.setAction(AlterSequence.Action.SET_LOGGED); }
)
|
SequenceDefinitionOptions(sequence)
)
{ return result; }
}

Statement Create():
Expand Down Expand Up @@ -18897,6 +18943,7 @@ Statement Create():
|
statement = CreateDatabase()
|
LOOKAHEAD([ <K_UNLOGGED> | [ <K_LOCAL> | <K_GLOBAL> ] ( <K_TEMP> | <K_TEMPORARY> ) ] <K_SEQUENCE>)
statement = CreateSequence()
|
statement = CreateSynonym(isUsingOrReplace)
Expand Down
Loading
Loading