Skip to content

Commit f1676dd

Browse files
SheldonKubormjh
and
mjh
authored
feat: support keyword "only" for postgresql (#1952)
Co-authored-by: mjh <[email protected]>
1 parent bc16618 commit f1676dd

File tree

4 files changed

+34
-1
lines changed

4 files changed

+34
-1
lines changed

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

+20-1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ public class PlainSelect extends Select {
6565
*/
6666
private boolean isUsingFinal = false;
6767

68+
private boolean isUsingOnly = false;
69+
6870
@Deprecated
6971
public boolean isUseBrackets() {
7072
return false;
@@ -213,6 +215,19 @@ public PlainSelect withUsingFinal(boolean usingFinal) {
213215
return this;
214216
}
215217

218+
public boolean isUsingOnly() {
219+
return isUsingOnly;
220+
}
221+
222+
public void setUsingOnly(boolean usingOnly) {
223+
isUsingOnly = usingOnly;
224+
}
225+
226+
public PlainSelect withUsingOnly(boolean usingOnly) {
227+
this.setUsingOnly(usingOnly);
228+
return this;
229+
}
230+
216231
@Override
217232
public void accept(SelectVisitor selectVisitor) {
218233
selectVisitor.visit(this);
@@ -439,7 +454,11 @@ public StringBuilder appendSelectBodyTo(StringBuilder builder) {
439454
}
440455

441456
if (fromItem != null) {
442-
builder.append(" FROM ").append(fromItem);
457+
builder.append(" FROM ");
458+
if (isUsingOnly) {
459+
builder.append("ONLY ");
460+
}
461+
builder.append(fromItem);
443462
if (lateralViews != null) {
444463
for (LateralView lateralView : lateralViews) {
445464
builder.append(" ").append(lateralView);

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

+3
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ public void visit(PlainSelect plainSelect) {
210210

211211
if (plainSelect.getFromItem() != null) {
212212
buffer.append(" FROM ");
213+
if (plainSelect.isUsingOnly()) {
214+
buffer.append("ONLY ");
215+
}
213216
plainSelect.getFromItem().accept(this);
214217

215218
if (plainSelect.getFromItem() instanceof Table) {

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

+4
Original file line numberDiff line numberDiff line change
@@ -2277,6 +2277,10 @@ PlainSelect PlainSelect() #PlainSelect:
22772277
[ lateralViews=LateralViews() ]
22782278
[ LOOKAHEAD(2) joins=JoinsList() ]
22792279
]
2280+
[ LOOKAHEAD(3) <K_FROM> <K_ONLY> { plainSelect.setUsingOnly(true); } fromItem=FromItem()
2281+
[ lateralViews=LateralViews() ]
2282+
[ LOOKAHEAD(2) joins=JoinsList() ]
2283+
]
22802284

22812285
// Clickhouse FINAL as shown at https://clickhouse.com/docs/en/operations/settings/settings#final
22822286
[ LOOKAHEAD(2) <K_FINAL> { plainSelect.setUsingFinal(true); } ]

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

+7
Original file line numberDiff line numberDiff line change
@@ -5806,4 +5806,11 @@ public void testIssue1907() throws JSQLParserException {
58065806
"SELECT * FROM (SELECT year, person, SUM(amount) FROM rentals GROUP BY year, person) t1 ORDER BY year DESC WITH ROLLUP";
58075807
assertSqlCanBeParsedAndDeparsed(stmt2);
58085808
}
5809+
5810+
@Test
5811+
public void testIssue1908() throws JSQLParserException {
5812+
// postgresql14
5813+
String stmt = "SELECT * FROM ONLY sys_business_rule";
5814+
assertSqlCanBeParsedAndDeparsed(stmt);
5815+
}
58095816
}

0 commit comments

Comments
 (0)