99 */
1010package net .sf .jsqlparser .statement .select ;
1111
12+ import static net .sf .jsqlparser .test .TestUtils .assertDeparse ;
13+ import static net .sf .jsqlparser .test .TestUtils .assertSqlCanBeParsedAndDeparsed ;
14+ import static org .junit .jupiter .api .Assertions .assertEquals ;
15+
1216import net .sf .jsqlparser .JSQLParserException ;
17+ import net .sf .jsqlparser .expression .ColumnsTransformer ;
18+ import net .sf .jsqlparser .expression .ColumnsTransformer .ColumnsTransformerType ;
19+ import net .sf .jsqlparser .expression .operators .relational .ParenthesedExpressionList ;
20+ import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
21+ import net .sf .jsqlparser .schema .Column ;
22+ import net .sf .jsqlparser .schema .Table ;
1323import net .sf .jsqlparser .test .TestUtils ;
1424import org .junit .jupiter .api .Test ;
1525
@@ -31,4 +41,56 @@ void testDuckDBQuerySyntax() throws JSQLParserException {
3141 + "FROM orders" ;
3242 TestUtils .assertSqlCanBeParsedAndDeparsed (sqlStr , true );
3343 }
44+
45+ @ Test
46+ void addExceptColumnToNewWildcard () throws JSQLParserException {
47+ AllColumns columns = new AllColumns ();
48+ columns .addTransformer (new ColumnsTransformer (ColumnsTransformerType .EXCEPT )
49+ .setExceptColumns (new ParenthesedExpressionList <>(new Column ("hidden" ))));
50+ PlainSelect select = new PlainSelect ().addSelectItem (columns ).withFromItem (new Table ("t" ));
51+
52+ String expected = "SELECT * EXCEPT (hidden) FROM t" ;
53+ assertEquals (expected , select .toString ());
54+ assertDeparse (select , expected );
55+ assertSqlCanBeParsedAndDeparsed (expected );
56+ }
57+
58+ @ Test
59+ void setExceptColumnsOnParsedWildcard () throws JSQLParserException {
60+ PlainSelect select = (PlainSelect ) CCJSqlParserUtil .parse ("SELECT * FROM t" );
61+ AllColumns columns = select .getSelectItem (0 ).getExpression (AllColumns .class );
62+ columns .addTransformer (new ColumnsTransformer (ColumnsTransformerType .EXCEPT )
63+ .setExceptColumns (new ParenthesedExpressionList <>(new Column ("hidden" ))));
64+
65+ String expected = "SELECT * EXCEPT (hidden) FROM t" ;
66+ assertEquals (expected , select .toString ());
67+ assertDeparse (select , expected );
68+ assertSqlCanBeParsedAndDeparsed (expected );
69+ }
70+
71+ @ Test
72+ void addExceptColumnToParsedTableWildcard () throws JSQLParserException {
73+ PlainSelect select = (PlainSelect ) CCJSqlParserUtil .parse ("SELECT t.* FROM t" );
74+ AllTableColumns columns = select .getSelectItem (0 ).getExpression (AllTableColumns .class );
75+ columns .addTransformer (new ColumnsTransformer (ColumnsTransformerType .EXCEPT )
76+ .setExceptColumns (new ParenthesedExpressionList <>(new Column ("hidden" ))));
77+
78+ String expected = "SELECT t.* EXCEPT (hidden) FROM t" ;
79+ assertEquals (expected , select .toString ());
80+ assertDeparse (select , expected );
81+ assertSqlCanBeParsedAndDeparsed (expected );
82+ }
83+
84+ @ Test
85+ void preserveExplicitExcludeTransformer () throws JSQLParserException {
86+ AllColumns columns = new AllColumns ();
87+ columns .addTransformer (new ColumnsTransformer (ColumnsTransformerType .EXCLUDE )
88+ .setExceptColumns (new ParenthesedExpressionList <>(new Column ("hidden" ))));
89+ PlainSelect select = new PlainSelect ().addSelectItem (columns ).withFromItem (new Table ("t" ));
90+
91+ String expected = "SELECT * EXCLUDE (hidden) FROM t" ;
92+ assertEquals (expected , select .toString ());
93+ assertDeparse (select , expected );
94+ assertSqlCanBeParsedAndDeparsed (expected );
95+ }
3496}
0 commit comments