2525import net .sf .jsqlparser .expression .operators .relational .ParenthesedExpressionList ;
2626import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
2727import net .sf .jsqlparser .util .TablesNamesFinder ;
28+ import net .sf .jsqlparser .util .deparser .StatementDeParser ;
2829import org .junit .jupiter .api .Assertions ;
2930import org .junit .jupiter .api .Test ;
3031import org .junit .jupiter .params .ParameterizedTest ;
@@ -397,6 +398,16 @@ public void testAllColumnsExceptStrictIssue2636() throws JSQLParserException {
397398 Assertions .assertFalse (allColumns .getTransformers ().get (1 ).isStrict ());
398399 assertSqlCanBeParsedAndDeparsed (sql , true );
399400
401+ // the transformer survives as the second leg of a set operation
402+ sql = "SELECT 1 UNION SELECT * EXCEPT STRICT (a) FROM t" ;
403+ SetOperationList union = (SetOperationList ) ((Select ) CCJSqlParserUtil .parse (sql ))
404+ .getSelectBody ();
405+ PlainSelect rightLeg = (PlainSelect ) union .getSelects ().get (1 );
406+ AllColumns legColumns = Assertions .assertInstanceOf (AllColumns .class ,
407+ rightLeg .getSelectItems ().get (0 ).getExpression ());
408+ Assertions .assertTrue (legColumns .getTransformers ().get (0 ).isStrict ());
409+ assertSqlCanBeParsedAndDeparsed (sql , true );
410+
400411 // the COLUMNS(...) matcher accepts the same STRICT form
401412 sql = "SELECT COLUMNS('m') EXCEPT STRICT (a) FROM t" ;
402413 select = (Select ) CCJSqlParserUtil .parse (sql );
@@ -420,6 +431,10 @@ public void testAllColumnsReplaceStrictIssue2636() throws JSQLParserException {
420431 Assertions .assertTrue (transformer .isStrict ());
421432 Assertions .assertEquals (2 , transformer .getReplaceItems ().size ());
422433 Assertions .assertEquals ("a" , transformer .getReplaceItems ().get (0 ).getAlias ().getName ());
434+ Assertions .assertEquals (sql , select .toString ());
435+ StatementDeParser statementDeParser = new StatementDeParser (new StringBuilder ());
436+ select .accept (statementDeParser , null );
437+ Assertions .assertEquals (sql , statementDeParser .getBuilder ().toString ());
423438 assertSqlCanBeParsedAndDeparsed (sql , true );
424439
425440 sql = "SELECT COLUMNS('m') REPLACE STRICT(x + 1 AS x) FROM t" ;
0 commit comments