Skip to content

Commit a1c0548

Browse files
committed
feat(parser): model MySQL event statements
1 parent 628e3c1 commit a1c0548

13 files changed

Lines changed: 674 additions & 0 deletions

File tree

‎src/main/java/module-info.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
exports net.sf.jsqlparser.statement.alter.sequence;
2626
exports net.sf.jsqlparser.statement.analyze;
2727
exports net.sf.jsqlparser.statement.comment;
28+
exports net.sf.jsqlparser.statement.create.event;
2829
exports net.sf.jsqlparser.statement.create.function;
2930
exports net.sf.jsqlparser.statement.create.index;
3031
exports net.sf.jsqlparser.statement.create.policy;

‎src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import net.sf.jsqlparser.statement.analyze.Analyze;
1818
import net.sf.jsqlparser.statement.comment.Comment;
1919
import net.sf.jsqlparser.statement.create.database.CreateDatabase;
20+
import net.sf.jsqlparser.statement.create.event.AlterEvent;
21+
import net.sf.jsqlparser.statement.create.event.CreateEvent;
2022
import net.sf.jsqlparser.statement.create.index.CreateIndex;
2123
import net.sf.jsqlparser.statement.create.policy.CreatePolicy;
2224
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -132,6 +134,12 @@ default void visit(CreateUser createUser) {
132134
this.visit(createUser, null);
133135
}
134136

137+
<S> T visit(CreateEvent createEvent, S context);
138+
139+
default void visit(CreateEvent createEvent) {
140+
this.visit(createEvent, null);
141+
}
142+
135143
<S> T visit(CreateTable createTable, S context);
136144

137145
default void visit(CreateTable createTable) {
@@ -162,6 +170,12 @@ default void visit(Alter alter) {
162170
this.visit(alter, null);
163171
}
164172

173+
<S> T visit(AlterEvent alterEvent, S context);
174+
175+
default void visit(AlterEvent alterEvent) {
176+
this.visit(alterEvent, null);
177+
}
178+
165179
<S> T visit(Statements statements, S context);
166180

167181
default void visit(Statements statements) {

‎src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import net.sf.jsqlparser.statement.analyze.Analyze;
2222
import net.sf.jsqlparser.statement.comment.Comment;
2323
import net.sf.jsqlparser.statement.create.database.CreateDatabase;
24+
import net.sf.jsqlparser.statement.create.event.AlterEvent;
25+
import net.sf.jsqlparser.statement.create.event.CreateEvent;
2426
import net.sf.jsqlparser.statement.create.index.CreateIndex;
2527
import net.sf.jsqlparser.statement.create.policy.CreatePolicy;
2628
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -273,6 +275,11 @@ public <S> T visit(CreateUser createUser, S context) {
273275
return null;
274276
}
275277

278+
@Override
279+
public <S> T visit(CreateEvent createEvent, S context) {
280+
return null;
281+
}
282+
276283
@Override
277284
public <S> T visit(CreateTable createTable, S context) {
278285
return createTable.getTable().accept(fromItemVisitor, context);
@@ -289,6 +296,11 @@ public <S> T visit(Alter alter, S context) {
289296
return null;
290297
}
291298

299+
@Override
300+
public <S> T visit(AlterEvent alterEvent, S context) {
301+
return null;
302+
}
303+
292304
@Override
293305
public <S> T visit(Statements statements, S context) {
294306
for (Statement statement : statements) {
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2026 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.create.event;
11+
12+
import net.sf.jsqlparser.schema.Table;
13+
import net.sf.jsqlparser.statement.StatementVisitor;
14+
15+
/** MySQL {@code ALTER EVENT} statement. */
16+
public class AlterEvent extends EventStatement {
17+
18+
private Table renameTo;
19+
20+
public Table getRenameTo() {
21+
return renameTo;
22+
}
23+
24+
public void setRenameTo(Table renameTo) {
25+
this.renameTo = renameTo;
26+
}
27+
28+
@Override
29+
public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
30+
return statementVisitor.visit(this, context);
31+
}
32+
33+
@Override
34+
public String toString() {
35+
StringBuilder builder = new StringBuilder("ALTER EVENT ").append(getEvent());
36+
appendScheduleAndCompletion(builder);
37+
if (renameTo != null) {
38+
builder.append(" RENAME TO ").append(renameTo);
39+
}
40+
appendStatusAndComment(builder);
41+
if (getBody() != null) {
42+
builder.append(" DO ").append(getBody());
43+
}
44+
return builder.toString();
45+
}
46+
47+
public AlterEvent withRenameTo(Table renameTo) {
48+
setRenameTo(renameTo);
49+
return this;
50+
}
51+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2026 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.create.event;
11+
12+
import net.sf.jsqlparser.statement.StatementVisitor;
13+
14+
/** MySQL {@code CREATE EVENT} statement. */
15+
public class CreateEvent extends EventStatement {
16+
17+
private boolean ifNotExists;
18+
19+
public boolean isIfNotExists() {
20+
return ifNotExists;
21+
}
22+
23+
public void setIfNotExists(boolean ifNotExists) {
24+
this.ifNotExists = ifNotExists;
25+
}
26+
27+
@Override
28+
public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
29+
return statementVisitor.visit(this, context);
30+
}
31+
32+
@Override
33+
public String toString() {
34+
StringBuilder builder = new StringBuilder("CREATE EVENT ");
35+
if (ifNotExists) {
36+
builder.append("IF NOT EXISTS ");
37+
}
38+
builder.append(getEvent());
39+
appendScheduleAndCompletion(builder);
40+
appendStatusAndComment(builder);
41+
builder.append(" DO ").append(getBody());
42+
return builder.toString();
43+
}
44+
45+
public CreateEvent withIfNotExists(boolean ifNotExists) {
46+
setIfNotExists(ifNotExists);
47+
return this;
48+
}
49+
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2026 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.create.event;
11+
12+
import java.io.Serializable;
13+
import net.sf.jsqlparser.expression.Expression;
14+
15+
/** Structured {@code ON SCHEDULE} clause of a MySQL event. */
16+
public class EventSchedule implements Serializable {
17+
18+
public enum Type {
19+
AT, EVERY
20+
}
21+
22+
private Type type;
23+
private Expression executeAt;
24+
private Expression interval;
25+
private String intervalUnit;
26+
private Expression starts;
27+
private Expression ends;
28+
29+
public Type getType() {
30+
return type;
31+
}
32+
33+
public void setType(Type type) {
34+
this.type = type;
35+
}
36+
37+
public Expression getExecuteAt() {
38+
return executeAt;
39+
}
40+
41+
public void setExecuteAt(Expression executeAt) {
42+
this.executeAt = executeAt;
43+
}
44+
45+
public Expression getInterval() {
46+
return interval;
47+
}
48+
49+
public void setInterval(Expression interval) {
50+
this.interval = interval;
51+
}
52+
53+
public String getIntervalUnit() {
54+
return intervalUnit;
55+
}
56+
57+
public void setIntervalUnit(String intervalUnit) {
58+
this.intervalUnit = intervalUnit;
59+
}
60+
61+
public Expression getStarts() {
62+
return starts;
63+
}
64+
65+
public void setStarts(Expression starts) {
66+
this.starts = starts;
67+
}
68+
69+
public Expression getEnds() {
70+
return ends;
71+
}
72+
73+
public void setEnds(Expression ends) {
74+
this.ends = ends;
75+
}
76+
77+
@Override
78+
public String toString() {
79+
StringBuilder builder = new StringBuilder();
80+
if (type == Type.AT) {
81+
builder.append("AT ").append(executeAt);
82+
} else if (type == Type.EVERY) {
83+
builder.append("EVERY ").append(interval).append(" ").append(intervalUnit);
84+
if (starts != null) {
85+
builder.append(" STARTS ").append(starts);
86+
}
87+
if (ends != null) {
88+
builder.append(" ENDS ").append(ends);
89+
}
90+
}
91+
return builder.toString();
92+
}
93+
94+
public EventSchedule withType(Type type) {
95+
setType(type);
96+
return this;
97+
}
98+
99+
public EventSchedule withExecuteAt(Expression executeAt) {
100+
setExecuteAt(executeAt);
101+
return this;
102+
}
103+
104+
public EventSchedule withInterval(Expression interval) {
105+
setInterval(interval);
106+
return this;
107+
}
108+
109+
public EventSchedule withIntervalUnit(String intervalUnit) {
110+
setIntervalUnit(intervalUnit);
111+
return this;
112+
}
113+
114+
public EventSchedule withStarts(Expression starts) {
115+
setStarts(starts);
116+
return this;
117+
}
118+
119+
public EventSchedule withEnds(Expression ends) {
120+
setEnds(ends);
121+
return this;
122+
}
123+
}

0 commit comments

Comments
 (0)