Skip to content

Commit 95ad908

Browse files
authored
fix: default wildcard exclusions to EXCEPT (#2652)
Signed-off-by: Jake Wang <jake.wang@argonlabs.tech>
1 parent 60c8dc2 commit 95ad908

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

‎src/test/java/net/sf/jsqlparser/statement/select/AllColumnsTest.java‎

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,17 @@
99
*/
1010
package 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+
1216
import 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;
1323
import net.sf.jsqlparser.test.TestUtils;
1424
import 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

Comments
 (0)