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 {
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 }
Original file line number Diff line number Diff 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 }
Original file line number Diff line number Diff 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); }
Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments