Skip to content

Commit 18e0d57

Browse files
committed
Merge origin/master
2 parents 46424d9 + f6c1741 commit 18e0d57

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

src/main/java/net/sf/jsqlparser/statement/select/PlainSelect.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public class PlainSelect extends ASTNodeAccessImpl implements SelectBody {
5353
private String forXmlPath;
5454
private KSQLWindow ksqlWindow = null;
5555
private boolean noWait = false;
56+
private boolean emitChanges = false;
5657

5758
public boolean isUseBrackets() {
5859
return useBrackets;
@@ -321,6 +322,14 @@ public void setKsqlWindow(KSQLWindow ksqlWindow) {
321322
this.ksqlWindow = ksqlWindow;
322323
}
323324

325+
public void setEmitChanges(boolean emitChanges) {
326+
this.emitChanges = emitChanges;
327+
}
328+
329+
public boolean isEmitChanges() {
330+
return emitChanges;
331+
}
332+
324333
@Override
325334
@SuppressWarnings({"PMD.CyclomaticComplexity" , "PMD.ExcessiveMethodLength", "PMD.NPathComplexity"})
326335
public String toString() {
@@ -400,6 +409,9 @@ public String toString() {
400409
sql.append(" HAVING ").append(having);
401410
}
402411
sql.append(orderByToString(oracleSiblings, orderByElements));
412+
if (emitChanges){
413+
sql.append(" EMIT CHANGES");
414+
}
403415
if (limit != null) {
404416
sql.append(limit);
405417
}

src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,9 @@ public void visit(PlainSelect plainSelect) {
187187
new OrderByDeParser(expressionVisitor, buffer).deParse(plainSelect.isOracleSiblings(),
188188
plainSelect.getOrderByElements());
189189
}
190-
190+
if (plainSelect.isEmitChanges()){
191+
buffer.append(" EMIT CHANGES");
192+
}
191193
if (plainSelect.getLimit() != null) {
192194
new LimitDeparser(buffer).deParse(plainSelect.getLimit());
193195
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
157157
| <K_TRY_CAST: "TRY_CAST">
158158
| <K_CHARACTER:"CHARACTER">
159159
| <K_CHANGE:"CHANGE">
160+
| <K_CHANGES:"CHANGES">
160161
| <K_CHECK:"CHECK">
161162
| <K_CHECKPOINT:"CHECKPOINT">
162163
| <K_CHAR:"CHAR">
@@ -198,6 +199,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
198199
| <K_DUMP:"DUMP">
199200
| <K_DUPLICATE: "DUPLICATE">
200201
| <K_ELSE:"ELSE">
202+
| <K_EMIT : "EMIT">
201203
| <K_ENABLE : "ENABLE">
202204
| <K_END:"END">
203205
| <K_ESCAPE:"ESCAPE">
@@ -1868,10 +1870,10 @@ PlainSelect PlainSelect() #PlainSelect:
18681870
[ having=Having() { plainSelect.setHaving(having); }]
18691871
[LOOKAHEAD(<K_ORDER> <K_SIBLINGS> <K_BY>) orderByElements = OrderByElements() { plainSelect.setOracleSiblings(true); plainSelect.setOrderByElements(orderByElements); } ]
18701872
[LOOKAHEAD(<K_ORDER> <K_BY>) orderByElements = OrderByElements() { plainSelect.setOrderByElements(orderByElements); } ]
1873+
[ <K_EMIT> <K_CHANGES> { plainSelect.setEmitChanges(true); } ]
18711874
[LOOKAHEAD(<K_LIMIT>) limit = LimitWithOffset() { plainSelect.setLimit(limit); } ]
18721875
[LOOKAHEAD(<K_OFFSET>) offset = Offset() { plainSelect.setOffset(offset); } ]
18731876
[LOOKAHEAD(<K_LIMIT>, { limit==null }) limit = LimitWithOffset() { plainSelect.setLimit(limit); } ]
1874-
18751877
[LOOKAHEAD(<K_FETCH>) fetch = Fetch() { plainSelect.setFetch(fetch); } ]
18761878

18771879
[LOOKAHEAD(2) <K_FOR> <K_UPDATE> { plainSelect.setForUpdate(true); }

src/test/java/net/sf/jsqlparser/statement/select/KSQLTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,24 @@ public void testKSQLTumblingWindows() throws Exception {
152152
assertStatementCanBeDeparsedAs(select, sql, true);
153153
assertSqlCanBeParsedAndDeparsed(sql, true);
154154
}
155+
156+
@Test
157+
public void testKSQLEmitChanges() throws Exception {
158+
String sql = "SELECT * FROM table1 t1 GROUP BY region.id EMIT CHANGES";
159+
Statement statement = CCJSqlParserUtil.parse(sql);
160+
Select select = (Select) statement;
161+
PlainSelect selectBody = (PlainSelect) select.getSelectBody();
162+
assertTrue(selectBody.isEmitChanges());
163+
assertSqlCanBeParsedAndDeparsed(sql);
164+
}
165+
166+
@Test
167+
public void testKSQLEmitChangesWithLimit() throws Exception {
168+
String sql = "SELECT * FROM table1 t1 GROUP BY region.id EMIT CHANGES LIMIT 2";
169+
Statement statement = CCJSqlParserUtil.parse(sql);
170+
Select select = (Select) statement;
171+
PlainSelect selectBody = (PlainSelect) select.getSelectBody();
172+
assertTrue(selectBody.isEmitChanges());
173+
assertSqlCanBeParsedAndDeparsed(sql);
174+
}
155175
}

0 commit comments

Comments
 (0)