File tree Expand file tree Collapse file tree 4 files changed +38
-2
lines changed
jjtree/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/statement/select Expand file tree Collapse file tree 4 files changed +38
-2
lines changed Original file line number Diff line number Diff line change @@ -53,6 +53,7 @@ public class PlainSelect extends ASTNodeAccessImpl implements SelectBody {
53
53
private String forXmlPath ;
54
54
private KSQLWindow ksqlWindow = null ;
55
55
private boolean noWait = false ;
56
+ private boolean emitChanges = false ;
56
57
57
58
public boolean isUseBrackets () {
58
59
return useBrackets ;
@@ -321,6 +322,14 @@ public void setKsqlWindow(KSQLWindow ksqlWindow) {
321
322
this .ksqlWindow = ksqlWindow ;
322
323
}
323
324
325
+ public void setEmitChanges (boolean emitChanges ) {
326
+ this .emitChanges = emitChanges ;
327
+ }
328
+
329
+ public boolean isEmitChanges () {
330
+ return emitChanges ;
331
+ }
332
+
324
333
@ Override
325
334
@ SuppressWarnings ({"PMD.CyclomaticComplexity" , "PMD.ExcessiveMethodLength" , "PMD.NPathComplexity" })
326
335
public String toString () {
@@ -400,6 +409,9 @@ public String toString() {
400
409
sql .append (" HAVING " ).append (having );
401
410
}
402
411
sql .append (orderByToString (oracleSiblings , orderByElements ));
412
+ if (emitChanges ){
413
+ sql .append (" EMIT CHANGES" );
414
+ }
403
415
if (limit != null ) {
404
416
sql .append (limit );
405
417
}
Original file line number Diff line number Diff line change @@ -187,7 +187,9 @@ public void visit(PlainSelect plainSelect) {
187
187
new OrderByDeParser (expressionVisitor , buffer ).deParse (plainSelect .isOracleSiblings (),
188
188
plainSelect .getOrderByElements ());
189
189
}
190
-
190
+ if (plainSelect .isEmitChanges ()){
191
+ buffer .append (" EMIT CHANGES" );
192
+ }
191
193
if (plainSelect .getLimit () != null ) {
192
194
new LimitDeparser (buffer ).deParse (plainSelect .getLimit ());
193
195
}
Original file line number Diff line number Diff line change @@ -157,6 +157,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
157
157
| <K_TRY_CAST: "TRY_CAST">
158
158
| <K_CHARACTER:"CHARACTER">
159
159
| <K_CHANGE:"CHANGE">
160
+ | <K_CHANGES:"CHANGES">
160
161
| <K_CHECK:"CHECK">
161
162
| <K_CHECKPOINT:"CHECKPOINT">
162
163
| <K_CHAR:"CHAR">
@@ -198,6 +199,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
198
199
| <K_DUMP:"DUMP">
199
200
| <K_DUPLICATE: "DUPLICATE">
200
201
| <K_ELSE:"ELSE">
202
+ | <K_EMIT : "EMIT">
201
203
| <K_ENABLE : "ENABLE">
202
204
| <K_END:"END">
203
205
| <K_ESCAPE:"ESCAPE">
@@ -1868,10 +1870,10 @@ PlainSelect PlainSelect() #PlainSelect:
1868
1870
[ having=Having() { plainSelect.setHaving(having); }]
1869
1871
[LOOKAHEAD(<K_ORDER> <K_SIBLINGS> <K_BY>) orderByElements = OrderByElements() { plainSelect.setOracleSiblings(true); plainSelect.setOrderByElements(orderByElements); } ]
1870
1872
[LOOKAHEAD(<K_ORDER> <K_BY>) orderByElements = OrderByElements() { plainSelect.setOrderByElements(orderByElements); } ]
1873
+ [ <K_EMIT> <K_CHANGES> { plainSelect.setEmitChanges(true); } ]
1871
1874
[LOOKAHEAD(<K_LIMIT>) limit = LimitWithOffset() { plainSelect.setLimit(limit); } ]
1872
1875
[LOOKAHEAD(<K_OFFSET>) offset = Offset() { plainSelect.setOffset(offset); } ]
1873
1876
[LOOKAHEAD(<K_LIMIT>, { limit==null }) limit = LimitWithOffset() { plainSelect.setLimit(limit); } ]
1874
-
1875
1877
[LOOKAHEAD(<K_FETCH>) fetch = Fetch() { plainSelect.setFetch(fetch); } ]
1876
1878
1877
1879
[LOOKAHEAD(2) <K_FOR> <K_UPDATE> { plainSelect.setForUpdate(true); }
Original file line number Diff line number Diff line change @@ -152,4 +152,24 @@ public void testKSQLTumblingWindows() throws Exception {
152
152
assertStatementCanBeDeparsedAs (select , sql , true );
153
153
assertSqlCanBeParsedAndDeparsed (sql , true );
154
154
}
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
+ }
155
175
}
You can’t perform that action at this time.
0 commit comments