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 .operators .relational .ExpressionList ;
18+ import net .sf .jsqlparser .parser .CCJSqlParserUtil ;
19+ import net .sf .jsqlparser .schema .Column ;
20+ import net .sf .jsqlparser .schema .Table ;
1321import net .sf .jsqlparser .test .TestUtils ;
1422import org .junit .jupiter .api .Test ;
1523
@@ -31,4 +39,52 @@ void testDuckDBQuerySyntax() throws JSQLParserException {
3139 + "FROM orders" ;
3240 TestUtils .assertSqlCanBeParsedAndDeparsed (sqlStr , true );
3341 }
42+
43+ @ Test
44+ void addExceptColumnToNewWildcard () throws JSQLParserException {
45+ AllColumns columns = new AllColumns ();
46+ columns .addExceptColumn (new Column ("hidden" ));
47+ PlainSelect select = new PlainSelect ().addSelectItem (columns ).withFromItem (new Table ("t" ));
48+
49+ String expected = "SELECT * EXCEPT( hidden ) FROM t" ;
50+ assertEquals (expected , select .toString ());
51+ assertDeparse (select , expected );
52+ assertSqlCanBeParsedAndDeparsed (expected );
53+ }
54+
55+ @ Test
56+ void setExceptColumnsOnParsedWildcard () throws JSQLParserException {
57+ PlainSelect select = (PlainSelect ) CCJSqlParserUtil .parse ("SELECT * FROM t" );
58+ AllColumns columns = select .getSelectItem (0 ).getExpression (AllColumns .class );
59+ columns .setExceptColumns (new ExpressionList <>(new Column ("hidden" )));
60+
61+ String expected = "SELECT * EXCEPT( hidden ) FROM t" ;
62+ assertEquals (expected , select .toString ());
63+ assertDeparse (select , expected );
64+ assertSqlCanBeParsedAndDeparsed (expected );
65+ }
66+
67+ @ Test
68+ void addExceptColumnToParsedTableWildcard () throws JSQLParserException {
69+ PlainSelect select = (PlainSelect ) CCJSqlParserUtil .parse ("SELECT t.* FROM t" );
70+ AllTableColumns columns = select .getSelectItem (0 ).getExpression (AllTableColumns .class );
71+ columns .addExceptColumn (new Column ("hidden" ));
72+
73+ String expected = "SELECT t.* EXCEPT( hidden ) FROM t" ;
74+ assertEquals (expected , select .toString ());
75+ assertDeparse (select , expected );
76+ assertSqlCanBeParsedAndDeparsed (expected );
77+ }
78+
79+ @ Test
80+ void preserveExplicitExceptKeywordAndEmptyColumns () {
81+ AllColumns columns = new AllColumns ().setExceptKeyword ("EXCLUDE" );
82+ columns .addExceptColumn (new Column ("hidden" ));
83+ assertEquals ("* EXCLUDE( hidden )" , columns .toString ());
84+
85+ columns .setExceptColumns (new ExpressionList <>());
86+ assertEquals ("*" , columns .toString ());
87+ columns .setExceptColumns (null );
88+ assertEquals ("*" , columns .toString ());
89+ }
3490}
0 commit comments