Skip to content

Commit 0c9b80e

Browse files
author
Stefan Steinhauser
committed
feat: Allow IMPORT as FromItem in SELECT
1 parent b0e6276 commit 0c9b80e

File tree

7 files changed

+88
-11
lines changed

7 files changed

+88
-11
lines changed

src/main/java/net/sf/jsqlparser/statement/imprt/Import.java

+36-2
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,23 @@
99
*/
1010
package net.sf.jsqlparser.statement.imprt;
1111

12+
import net.sf.jsqlparser.expression.Alias;
1213
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
14+
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
1315
import net.sf.jsqlparser.schema.Column;
1416
import net.sf.jsqlparser.schema.Table;
1517
import net.sf.jsqlparser.statement.Statement;
1618
import net.sf.jsqlparser.statement.StatementVisitor;
17-
import net.sf.jsqlparser.statement.select.PlainSelect;
19+
import net.sf.jsqlparser.statement.select.*;
1820

1921
import java.util.List;
2022

21-
public class Import implements Statement {
23+
public class Import extends ASTNodeAccessImpl implements FromItem, Statement {
2224
private Table table;
2325
private ExpressionList<Column> columns;
2426
private List<ImportColumn> importColumns;
2527
private ImportFromItem fromItem;
28+
private Alias alias;
2629

2730
public Table getTable() {
2831
return table;
@@ -80,4 +83,35 @@ public String toString() {
8083
public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
8184
return statementVisitor.visit(this, context);
8285
}
86+
87+
@Override
88+
public <T, S> T accept(FromItemVisitor<T> fromItemVisitor, S context) {
89+
return fromItemVisitor.visit(this, context);
90+
}
91+
92+
@Override
93+
public Alias getAlias() {
94+
return alias;
95+
}
96+
97+
@Override
98+
public void setAlias(Alias alias) {
99+
this.alias = alias;
100+
}
101+
102+
@Override
103+
public Pivot getPivot() {
104+
return null;
105+
}
106+
107+
@Override
108+
public void setPivot(Pivot pivot) {}
109+
110+
@Override
111+
public UnPivot getUnPivot() {
112+
return null;
113+
}
114+
115+
@Override
116+
public void setUnPivot(UnPivot unpivot) {}
83117
}

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

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package net.sf.jsqlparser.statement.select;
1111

1212
import net.sf.jsqlparser.schema.Table;
13+
import net.sf.jsqlparser.statement.imprt.Import;
1314

1415
public interface FromItemVisitor<T> {
1516

@@ -66,4 +67,10 @@ default void visit(SetOperationList setOperationList) {
6667
default void visit(TableStatement tableStatement) {
6768
this.visit(tableStatement, null);
6869
}
70+
71+
<S> T visit(Import imprt, S context);
72+
73+
default void visit(Import imprt) {
74+
this.visit(imprt, null);
75+
}
6976
}

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

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package net.sf.jsqlparser.statement.select;
1111

1212
import net.sf.jsqlparser.schema.Table;
13+
import net.sf.jsqlparser.statement.imprt.Import;
1314

1415
@SuppressWarnings({"PMD.UncommentedEmptyMethodBody"})
1516
public class FromItemVisitorAdapter<T> implements FromItemVisitor<T> {
@@ -67,4 +68,10 @@ public <S> T visit(TableStatement tableStatement, S context) {
6768

6869
return null;
6970
}
71+
72+
@Override
73+
public <S> T visit(Import imprt, S context) {
74+
75+
return null;
76+
}
7077
}

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

+5
Original file line numberDiff line numberDiff line change
@@ -1828,4 +1828,9 @@ public <S> Void visit(Import imprt, S context) {
18281828
return null;
18291829
}
18301830

1831+
@Override
1832+
public void visit(Import imprt) {
1833+
StatementVisitor.super.visit(imprt);
1834+
}
1835+
18311836
}

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

+9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import net.sf.jsqlparser.expression.WindowDefinition;
1919
import net.sf.jsqlparser.schema.Column;
2020
import net.sf.jsqlparser.schema.Table;
21+
import net.sf.jsqlparser.statement.imprt.Import;
2122
import net.sf.jsqlparser.statement.select.Distinct;
2223
import net.sf.jsqlparser.statement.select.Fetch;
2324
import net.sf.jsqlparser.statement.select.First;
@@ -755,6 +756,12 @@ public <S> StringBuilder visit(Values values, S context) {
755756
return buffer;
756757
}
757758

759+
@Override
760+
public <S> StringBuilder visit(Import imprt, S context) {
761+
buffer.append(imprt.toString());
762+
return buffer;
763+
}
764+
758765
@Override
759766
public void visit(Values values) {
760767
SelectVisitor.super.visit(values);
@@ -812,6 +819,8 @@ public void visit(ParenthesedFromItem fromItem) {
812819
visit(fromItem, null);
813820
}
814821

822+
public void visit(Import imprt) { visit(imprt, null); }
823+
815824

816825
private void deparseOptimizeFor(OptimizeFor optimizeFor) {
817826
buffer.append(" OPTIMIZE FOR ");

src/main/java/net/sf/jsqlparser/util/validation/validator/SelectValidator.java

+11
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import net.sf.jsqlparser.expression.SQLServerHints;
1717
import net.sf.jsqlparser.parser.feature.Feature;
1818
import net.sf.jsqlparser.schema.Table;
19+
import net.sf.jsqlparser.statement.imprt.Import;
1920
import net.sf.jsqlparser.statement.select.ExceptOp;
2021
import net.sf.jsqlparser.statement.select.Fetch;
2122
import net.sf.jsqlparser.statement.select.ForMode;
@@ -359,6 +360,12 @@ public <S> Void visit(Values values, S context) {
359360
return null;
360361
}
361362

363+
@Override
364+
public <S> Void visit(Import imprt, S context) {
365+
// TODO: not yet implemented
366+
return null;
367+
}
368+
362369
@Override
363370
public void validate(SelectItem<?> statement) {
364371
statement.accept(this, null);
@@ -420,4 +427,8 @@ public void visit(Values values) {
420427
visit(values, null);
421428
}
422429

430+
public void visit(Import imprt) {
431+
visit(imprt, null);
432+
}
433+
423434
}

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

+13-9
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ ImportFromItem ImportFromItem(): {
11421142
importFromItem = DBMSSource()
11431143
| importFromItem = FileSource()
11441144
)
1145-
[errorClause = ErrorClause() { importFromItem.setErrorClause(errorClause); }]
1145+
[ LOOKAHEAD(2) errorClause = ErrorClause() { importFromItem.setErrorClause(errorClause); } ]
11461146
| importFromItem = ScriptSource()
11471147
)
11481148
{
@@ -1236,6 +1236,7 @@ FileSource FileSource() #FileSource: {
12361236
{ connectionFileDefinitions.add(new ConnectionFileDefinition(connectionDefinition, filePaths)); }
12371237

12381238
(
1239+
LOOKAHEAD(2)
12391240
(
12401241
(
12411242
LOOKAHEAD(2) connectionDefinition = ConnectionDefinition()
@@ -1384,12 +1385,14 @@ FileSource FileSource() #FileSource: {
13841385
]
13851386

13861387
[
1388+
LOOKAHEAD(2)
13871389
{
13881390
List<FileOption> fileOptions = new ArrayList<FileOption>();
13891391
fileSource.setFileOptions(fileOptions);
13901392
FileOption fileOption;
13911393
}
13921394
(
1395+
LOOKAHEAD(2)
13931396
(
13941397
(
13951398
token=<K_TRIM>
@@ -1423,7 +1426,7 @@ FileSource FileSource() #FileSource: {
14231426
)+
14241427
]
14251428

1426-
[ certificateVerification = CertificateVerification() { fileSource.setCertificateVerification(certificateVerification); } ]
1429+
[ LOOKAHEAD(2) certificateVerification = CertificateVerification() { fileSource.setCertificateVerification(certificateVerification); } ]
14271430

14281431
{
14291432
return fileSource;
@@ -1441,8 +1444,9 @@ CertificateVerification CertificateVerification(): {
14411444
)
14421445
<K_CERTIFICATE>
14431446
[
1444-
<K_PUBLIC> <K_KEY>
1445-
token = <S_CHAR_LITERAL> { certificateVerification.setPublicKey(new StringValue(token.image)); }
1447+
LOOKAHEAD(2)
1448+
<K_PUBLIC> <K_KEY>
1449+
token = <S_CHAR_LITERAL> { certificateVerification.setPublicKey(new StringValue(token.image)); }
14461450
]
14471451
| <K_PUBLIC> <K_KEY>
14481452
token = <S_CHAR_LITERAL> { certificateVerification.setPublicKey(new StringValue(token.image)); }
@@ -1464,7 +1468,7 @@ ScriptSource ScriptSource(): {
14641468
<K_SCRIPT>
14651469
script = Table() { scriptSource.setScript(script); }
14661470

1467-
[ connectionDefinition = ConnectionDefinition() { scriptSource.setConnectionDefinition(connectionDefinition); } ]
1471+
[ LOOKAHEAD(2) connectionDefinition = ConnectionDefinition() { scriptSource.setConnectionDefinition(connectionDefinition); } ]
14681472

14691473
[
14701474
LOOKAHEAD(2)
@@ -1523,9 +1527,9 @@ ConnectionDefinition ConnectionDefinition(): {
15231527
| token=<S_CHAR_LITERAL> { connectionDefinition.setConnectionDefinition(new StringValue(token.image)); }
15241528
)
15251529

1526-
[ userIdentification = UserIdentification() { connectionDefinition.setUserIdentification(userIdentification); } ]
1530+
[ LOOKAHEAD(2) userIdentification = UserIdentification() { connectionDefinition.setUserIdentification(userIdentification); } ]
15271531

1528-
[ certificateVerification = CertificateVerification() { connectionDefinition.setCertificateVerification(certificateVerification); } ]
1532+
[ LOOKAHEAD(2) certificateVerification = CertificateVerification() { connectionDefinition.setCertificateVerification(certificateVerification); } ]
15291533

15301534
{
15311535
return connectionDefinition;
@@ -1582,7 +1586,7 @@ ErrorClause ErrorClause(): {
15821586
| <K_TRUNCATE> { errorClause.setTruncate(true); }
15831587
)
15841588
]
1585-
[ rejectClause = RejectClause() { errorClause.setRejectClause(rejectClause); } ]
1589+
[ LOOKAHEAD(2) rejectClause = RejectClause() { errorClause.setRejectClause(rejectClause); } ]
15861590
| rejectClause = RejectClause() { errorClause.setRejectClause(rejectClause); }
15871591
)
15881592

@@ -3232,7 +3236,7 @@ PlainSelect PlainSelect() #PlainSelect:
32323236
selectItems=SelectItemsList()
32333237

32343238
[ LOOKAHEAD(2) intoTables = IntoClause() { plainSelect.setIntoTables(intoTables); } ]
3235-
[ LOOKAHEAD(2) <K_FROM> fromItem=FromItem()
3239+
[ LOOKAHEAD(2) <K_FROM> (fromItem=FromItem() | fromItem=Import())
32363240
[ LOOKAHEAD(2) lateralViews=LateralViews() ]
32373241
[ LOOKAHEAD(2) joins=JoinsList() ]
32383242
]

0 commit comments

Comments
 (0)