Skip to content

Commit d2ad3df

Browse files
committed
fixes #299
1 parent dfd2fe5 commit d2ad3df

File tree

5 files changed

+31
-2
lines changed

5 files changed

+31
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Also I would like to know about needed examples or documentation stuff.
4242

4343
## Extensions in the latest SNAPSHOT version 0.9.6
4444

45+
* support for **SELECT UNIQUE**
4546
* first support for date literals like **TIMESTAMP'2004-04-30 04:05:34.56'**
4647
* support for **UPDATE RETURNING**
4748
* support for scalar time function, like **CURRENT_TIMESTAMP**

src/main/java/net/sf/jsqlparser/statement/select/Distinct.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929
public class Distinct {
3030

3131
private List<SelectItem> onSelectItems;
32+
private boolean useUnique = false;
33+
34+
public Distinct() {
35+
}
36+
37+
public Distinct(boolean useUnique) {
38+
this.useUnique = useUnique;
39+
}
3240

3341
/**
3442
* A list of {@link SelectItem}s expressions, as in "select DISTINCT ON
@@ -44,9 +52,17 @@ public void setOnSelectItems(List<SelectItem> list) {
4452
onSelectItems = list;
4553
}
4654

55+
public boolean isUseUnique() {
56+
return useUnique;
57+
}
58+
59+
public void setUseUnique(boolean useUnique) {
60+
this.useUnique = useUnique;
61+
}
62+
4763
@Override
4864
public String toString() {
49-
String sql = "DISTINCT";
65+
String sql = useUnique?"UNIQUE":"DISTINCT";
5066

5167
if (onSelectItems != null && !onSelectItems.isEmpty()) {
5268
sql += " ON (" + PlainSelect.getStringList(onSelectItems) + ")";

src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ public void visit(PlainSelect plainSelect) {
7373
}
7474

7575
if (plainSelect.getDistinct() != null) {
76-
buffer.append("DISTINCT ");
76+
if (plainSelect.getDistinct().isUseUnique()) {
77+
buffer.append("UNIQUE ");
78+
} else {
79+
buffer.append("DISTINCT ");
80+
}
7781
if (plainSelect.getDistinct().getOnSelectItems() != null) {
7882
buffer.append("ON (");
7983
for (Iterator<SelectItem> iter = plainSelect.getDistinct().getOnSelectItems().iterator(); iter.hasNext();) {

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,10 @@ PlainSelect PlainSelect():
874874
<K_DISTINCT> { Distinct distinct = new Distinct(); plainSelect.setDistinct(distinct); }
875875
[ "ON" "(" distinctOn=SelectItemsList() { plainSelect.getDistinct().setOnSelectItems(distinctOn); } ")" ]
876876
)
877+
|
878+
(
879+
<K_UNIQUE> { Distinct distinct = new Distinct(true); plainSelect.setDistinct(distinct); }
880+
)
877881
]
878882

879883
[top = Top() { plainSelect.setTop(top); } ]

src/test/java/net/sf/jsqlparser/test/select/SelectTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2208,4 +2208,8 @@ public void testFunctionIssue284() throws JSQLParserException {
22082208
public void testFunctionDateTimeValues() throws JSQLParserException {
22092209
assertSqlCanBeParsedAndDeparsed("SELECT * FROM tab1 WHERE a > TIMESTAMP '2004-04-30 04:05:34.56'");
22102210
}
2211+
2212+
public void testUniqueInsteadOfDistinctIssue299() throws JSQLParserException {
2213+
assertSqlCanBeParsedAndDeparsed("SELECT UNIQUE trunc(timez(ludate)+ 8/24) bus_dt, j.object j_name , timez(j.starttime) START_TIME , timez(j.endtime) END_TIME FROM TEST_1 j", true);
2214+
}
22112215
}

0 commit comments

Comments
 (0)