Skip to content

Commit 82e2f78

Browse files
author
Stefan Steinhauser
committed
feat: Implement EXASOL dialect feature flag
1 parent 140a6f1 commit 82e2f78

File tree

4 files changed

+65
-34
lines changed

4 files changed

+65
-34
lines changed

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,9 +1014,7 @@ Statement SingleStatement() :
10141014
|
10151015
stm = SessionStatement()
10161016
|
1017-
stm = Import()
1018-
|
1019-
stm = Export()
1017+
LOOKAHEAD({ Dialect.EXASOL.name().equals(getAsString(Feature.dialect)) }) ( stm = Import() | stm = Export() )
10201018
)
10211019
{ return stm; }
10221020
}
@@ -4663,7 +4661,7 @@ FromItem FromItem() #FromItem:
46634661
|
46644662
fromItem=LateralSubSelect()
46654663
|
4666-
LOOKAHEAD(2) fromItem=SubImport() { fromItem = new ParenthesedFromItem(fromItem); }
4664+
LOOKAHEAD(2, { Dialect.EXASOL.name().equals(getAsString(Feature.dialect)) }) fromItem=SubImport() { fromItem = new ParenthesedFromItem(fromItem); }
46674665
|
46684666
LOOKAHEAD({ getAsBoolean(Feature.allowUnparenthesizedSubSelects) }) fromItem=Select()
46694667
)

src/test/java/net/sf/jsqlparser/statement/export/ExportTest.java

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package net.sf.jsqlparser.statement.export;
1111

1212
import net.sf.jsqlparser.JSQLParserException;
13+
import net.sf.jsqlparser.parser.AbstractJSqlParser.Dialect;
1314
import net.sf.jsqlparser.test.TestUtils;
1415
import org.junit.jupiter.api.parallel.Execution;
1516
import org.junit.jupiter.api.parallel.ExecutionMode;
@@ -27,7 +28,8 @@ public class ExportTest {
2728
"EXPORT ( select 1 ) INTO LOCAL CSV FILE 'file.csv'",
2829
})
2930
public void testExport(String sqlStr) throws JSQLParserException {
30-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
31+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
32+
parser -> parser.withDialect(Dialect.EXASOL));
3133
}
3234

3335
@ParameterizedTest
@@ -39,7 +41,8 @@ public void testExport(String sqlStr) throws JSQLParserException {
3941
"EXPORT schemaName.tableName INTO LOCAL SECURE CSV FILE 'file1.csv' FILE 'file2.csv'"
4042
})
4143
public void testExportIntoFileCSV(String sqlStr) throws JSQLParserException {
42-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
44+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
45+
parser -> parser.withDialect(Dialect.EXASOL));
4346
}
4447

4548
@ParameterizedTest
@@ -57,7 +60,8 @@ public void testExportIntoFileCSV(String sqlStr) throws JSQLParserException {
5760
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' ( 1, 1 .. 2, 3 )"
5861
})
5962
public void testExportIntoFileCSVCols(String sqlStr) throws JSQLParserException {
60-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
63+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
64+
parser -> parser.withDialect(Dialect.EXASOL));
6165
}
6266

6367
@ParameterizedTest
@@ -69,7 +73,8 @@ public void testExportIntoFileCSVCols(String sqlStr) throws JSQLParserException
6973
"EXPORT schemaName.tableName INTO LOCAL SECURE FBV FILE 'file1.fbv' FILE 'file2.fbv'"
7074
})
7175
public void testExportIntoFileFBV(String sqlStr) throws JSQLParserException {
72-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
76+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
77+
parser -> parser.withDialect(Dialect.EXASOL));
7378
}
7479

7580
@ParameterizedTest
@@ -85,7 +90,8 @@ public void testExportIntoFileFBV(String sqlStr) throws JSQLParserException {
8590
"EXPORT schemaName.tableName INTO LOCAL FBV FILE 'file.fbv' ( SIZE = 1 PADDING = '0', FORMAT = 'format' )"
8691
})
8792
public void testExportIntoFileFBVCols(String sqlStr) throws JSQLParserException {
88-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
93+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
94+
parser -> parser.withDialect(Dialect.EXASOL));
8995
}
9096

9197
@ParameterizedTest
@@ -107,7 +113,8 @@ public void testExportIntoFileFBVCols(String sqlStr) throws JSQLParserException
107113
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' ENCODING = 'UTF-8' REPLACE WITH COLUMN NAMES"
108114
})
109115
public void testExportIntoFileFileOpts(String sqlStr) throws JSQLParserException {
110-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
116+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
117+
parser -> parser.withDialect(Dialect.EXASOL));
111118
}
112119

113120
@ParameterizedTest
@@ -120,7 +127,8 @@ public void testExportIntoFileFileOpts(String sqlStr) throws JSQLParserException
120127
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' IGNORE CERTIFICATE PUBLIC KEY 'publicKey'"
121128
})
122129
public void testExportIntoFileCertVerification(String sqlStr) throws JSQLParserException {
123-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
130+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
131+
parser -> parser.withDialect(Dialect.EXASOL));
124132
}
125133

126134
@ParameterizedTest
@@ -149,7 +157,8 @@ public void testExportIntoFileCertVerification(String sqlStr) throws JSQLParserE
149157
"EXPORT schemaName.tableName INTO CSV AT '127.0.0.1' USER 'user' IDENTIFIED BY 'password' VERIFY CERTIFICATE PUBLIC KEY 'publicKey' FILE 'file.csv'"
150158
})
151159
public void testExportIntoConnectionDef(String sqlStr) throws JSQLParserException {
152-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
160+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
161+
parser -> parser.withDialect(Dialect.EXASOL));
153162
}
154163

155164
@ParameterizedTest
@@ -164,7 +173,8 @@ public void testExportIntoConnectionDef(String sqlStr) throws JSQLParserExceptio
164173
"EXPORT schemaName.tableName INTO CSV AT CLOUD AZURE BLOBSTORAGE '127.0.0.1' USER 'user' IDENTIFIED BY 'password' FILE 'file.csv'"
165174
})
166175
public void testExportIntoCloudConnectionDef(String sqlStr) throws JSQLParserException {
167-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
176+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
177+
parser -> parser.withDialect(Dialect.EXASOL));
168178
}
169179

170180
@ParameterizedTest
@@ -184,7 +194,8 @@ public void testExportIntoCloudConnectionDef(String sqlStr) throws JSQLParserExc
184194
"EXPORT schemaName.tableName INTO EXA AT connectionName STATEMENT 'insert into schemaName.tableName ( columnName ) values ( ? )'"
185195
})
186196
public void testExportIntoDBMSEXA(String sqlStr) throws JSQLParserException {
187-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
197+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
198+
parser -> parser.withDialect(Dialect.EXASOL));
188199
}
189200

190201
@ParameterizedTest
@@ -196,7 +207,8 @@ public void testExportIntoDBMSEXA(String sqlStr) throws JSQLParserException {
196207
"EXPORT schemaName.tableName INTO ORA AT connectionName STATEMENT 'insert into schemaName.tableName ( columnName ) values ( ? )'"
197208
})
198209
public void testExportIntoDBMSORA(String sqlStr) throws JSQLParserException {
199-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
210+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
211+
parser -> parser.withDialect(Dialect.EXASOL));
200212
}
201213

202214
@ParameterizedTest
@@ -205,7 +217,8 @@ public void testExportIntoDBMSORA(String sqlStr) throws JSQLParserException {
205217
"EXPORT schemaName.tableName INTO JDBC DRIVER = 'driverName' AT connectionName TABLE tableName"
206218
})
207219
public void testExportIntoDBMSJDBC(String sqlStr) throws JSQLParserException {
208-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
220+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
221+
parser -> parser.withDialect(Dialect.EXASOL));
209222
}
210223

211224
@ParameterizedTest
@@ -217,7 +230,8 @@ public void testExportIntoDBMSJDBC(String sqlStr) throws JSQLParserException {
217230
"EXPORT schemaName.tableName INTO SCRIPT scriptName AT connectionName WITH propertyName = 'value' propertyName2 = 'value2'"
218231
})
219232
public void testExportIntoScript(String sqlStr) throws JSQLParserException {
220-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
233+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
234+
parser -> parser.withDialect(Dialect.EXASOL));
221235
}
222236

223237
@ParameterizedTest
@@ -252,6 +266,7 @@ public void testExportIntoScript(String sqlStr) throws JSQLParserException {
252266
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' ERRORS INTO schemaName.tableName REJECT LIMIT UNLIMITED ERRORS"
253267
})
254268
public void testImportErrorClause(String sqlStr) throws JSQLParserException {
255-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
269+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
270+
parser -> parser.withDialect(Dialect.EXASOL));
256271
}
257272
}

src/test/java/net/sf/jsqlparser/statement/imprt/ImportTest.java

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package net.sf.jsqlparser.statement.imprt;
1111

1212
import net.sf.jsqlparser.JSQLParserException;
13+
import net.sf.jsqlparser.parser.AbstractJSqlParser.Dialect;
1314
import net.sf.jsqlparser.test.TestUtils;
1415
import org.junit.jupiter.api.parallel.Execution;
1516
import org.junit.jupiter.api.parallel.ExecutionMode;
@@ -25,7 +26,8 @@ public class ImportTest {
2526
"IMPORT INTO schemaName.tableName ( columnName1, columnName2 ) FROM LOCAL CSV FILE 'file.csv'"
2627
})
2728
public void testImportIntoTable(String sqlStr) throws JSQLParserException {
28-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
29+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
30+
parser -> parser.withDialect(Dialect.EXASOL));
2931
}
3032

3133
@ParameterizedTest
@@ -41,7 +43,8 @@ public void testImportIntoTable(String sqlStr) throws JSQLParserException {
4143
"IMPORT INTO ( LIKE schemaName.tableName ( columnName1 AS aliasName2, columnName2 AS aliasName2 ) ) FROM LOCAL CSV FILE 'file.csv'"
4244
})
4345
public void testImportIntoImportColumns(String sqlStr) throws JSQLParserException {
44-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
46+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
47+
parser -> parser.withDialect(Dialect.EXASOL));
4548
}
4649

4750
@ParameterizedTest
@@ -53,7 +56,8 @@ public void testImportIntoImportColumns(String sqlStr) throws JSQLParserExceptio
5356
"IMPORT FROM LOCAL SECURE CSV FILE 'file1.csv' FILE 'file2.csv'"
5457
})
5558
public void testImportFromFileCSV(String sqlStr) throws JSQLParserException {
56-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
59+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
60+
parser -> parser.withDialect(Dialect.EXASOL));
5761
}
5862

5963
@ParameterizedTest
@@ -67,7 +71,8 @@ public void testImportFromFileCSV(String sqlStr) throws JSQLParserException {
6771
"IMPORT FROM LOCAL CSV FILE 'file.csv' ( 1, 1 .. 2, 3 )"
6872
})
6973
public void testImportFromFileCSVCols(String sqlStr) throws JSQLParserException {
70-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
74+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
75+
parser -> parser.withDialect(Dialect.EXASOL));
7176
}
7277

7378
@ParameterizedTest
@@ -79,7 +84,8 @@ public void testImportFromFileCSVCols(String sqlStr) throws JSQLParserException
7984
"IMPORT FROM LOCAL SECURE FBV FILE 'file1.fbv' FILE 'file2.fbv'"
8085
})
8186
public void testImportFromFileFBV(String sqlStr) throws JSQLParserException {
82-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
87+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
88+
parser -> parser.withDialect(Dialect.EXASOL));
8389
}
8490

8591
@ParameterizedTest
@@ -96,7 +102,8 @@ public void testImportFromFileFBV(String sqlStr) throws JSQLParserException {
96102
"IMPORT FROM LOCAL FBV FILE 'file.fbv' ( SIZE = 1 START = 1, FORMAT = 'format' )"
97103
})
98104
public void testImportFromFileFBVCols(String sqlStr) throws JSQLParserException {
99-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
105+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
106+
parser -> parser.withDialect(Dialect.EXASOL));
100107
}
101108

102109
@ParameterizedTest
@@ -116,7 +123,8 @@ public void testImportFromFileFBVCols(String sqlStr) throws JSQLParserException
116123
"IMPORT FROM LOCAL CSV FILE 'file.csv' ENCODING = 'UTF-8' SKIP = 1 TRIM"
117124
})
118125
public void testImportFromFileFileOpts(String sqlStr) throws JSQLParserException {
119-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
126+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
127+
parser -> parser.withDialect(Dialect.EXASOL));
120128
}
121129

122130
@ParameterizedTest
@@ -129,7 +137,8 @@ public void testImportFromFileFileOpts(String sqlStr) throws JSQLParserException
129137
"IMPORT FROM LOCAL CSV FILE 'file.csv' IGNORE CERTIFICATE PUBLIC KEY 'publicKey'"
130138
})
131139
public void testImportFromFileCertVerification(String sqlStr) throws JSQLParserException {
132-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
140+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
141+
parser -> parser.withDialect(Dialect.EXASOL));
133142
}
134143

135144
@ParameterizedTest
@@ -158,7 +167,8 @@ public void testImportFromFileCertVerification(String sqlStr) throws JSQLParserE
158167
"IMPORT FROM CSV AT '127.0.0.1' USER 'user' IDENTIFIED BY 'password' VERIFY CERTIFICATE PUBLIC KEY 'publicKey' FILE 'file.csv'"
159168
})
160169
public void testImportFromConnectionDef(String sqlStr) throws JSQLParserException {
161-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
170+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
171+
parser -> parser.withDialect(Dialect.EXASOL));
162172
}
163173

164174
@ParameterizedTest
@@ -173,7 +183,8 @@ public void testImportFromConnectionDef(String sqlStr) throws JSQLParserExceptio
173183
"IMPORT FROM CSV AT CLOUD AZURE BLOBSTORAGE '127.0.0.1' USER 'user' IDENTIFIED BY 'password' FILE 'file.csv'"
174184
})
175185
public void testImportFromCloudConnectionDef(String sqlStr) throws JSQLParserException {
176-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
186+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
187+
parser -> parser.withDialect(Dialect.EXASOL));
177188
}
178189

179190
@ParameterizedTest
@@ -186,7 +197,8 @@ public void testImportFromCloudConnectionDef(String sqlStr) throws JSQLParserExc
186197
"IMPORT FROM EXA AT connectionName STATEMENT 'select 1' STATEMENT 'select 2'"
187198
})
188199
public void testImportFromDBMSEXA(String sqlStr) throws JSQLParserException {
189-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
200+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
201+
parser -> parser.withDialect(Dialect.EXASOL));
190202
}
191203

192204
@ParameterizedTest
@@ -199,7 +211,8 @@ public void testImportFromDBMSEXA(String sqlStr) throws JSQLParserException {
199211
"IMPORT FROM ORA AT connectionName STATEMENT 'select 1' STATEMENT 'select 2'"
200212
})
201213
public void testImportFromDBMSORA(String sqlStr) throws JSQLParserException {
202-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
214+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
215+
parser -> parser.withDialect(Dialect.EXASOL));
203216
}
204217

205218
@ParameterizedTest
@@ -213,7 +226,8 @@ public void testImportFromDBMSORA(String sqlStr) throws JSQLParserException {
213226
"IMPORT FROM JDBC DRIVER = 'driverName' AT connectionName STATEMENT 'select 1' STATEMENT 'select 2'"
214227
})
215228
public void testImportFromDBMSJDBC(String sqlStr) throws JSQLParserException {
216-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
229+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
230+
parser -> parser.withDialect(Dialect.EXASOL));
217231
}
218232

219233
@ParameterizedTest
@@ -225,7 +239,8 @@ public void testImportFromDBMSJDBC(String sqlStr) throws JSQLParserException {
225239
"IMPORT FROM SCRIPT scriptName AT connectionName WITH propertyName = 'value' propertyName2 = 'value2'"
226240
})
227241
public void testImportFromScript(String sqlStr) throws JSQLParserException {
228-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
242+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
243+
parser -> parser.withDialect(Dialect.EXASOL));
229244
}
230245

231246
@ParameterizedTest
@@ -260,6 +275,7 @@ public void testImportFromScript(String sqlStr) throws JSQLParserException {
260275
"IMPORT FROM LOCAL CSV FILE 'file.csv' ERRORS INTO schemaName.tableName REJECT LIMIT UNLIMITED ERRORS"
261276
})
262277
public void testImportErrorClause(String sqlStr) throws JSQLParserException {
263-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
278+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
279+
parser -> parser.withDialect(Dialect.EXASOL));
264280
}
265281
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import net.sf.jsqlparser.expression.operators.relational.GreaterThan;
5959
import net.sf.jsqlparser.expression.operators.relational.InExpression;
6060
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
61+
import net.sf.jsqlparser.parser.AbstractJSqlParser.Dialect;
6162
import net.sf.jsqlparser.parser.CCJSqlParserManager;
6263
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
6364
import net.sf.jsqlparser.schema.Column;
@@ -6402,7 +6403,8 @@ void testQuotedStringValueIssue2258() throws JSQLParserException {
64026403
"SELECT * FROM schemaName.tableName JOIN ( IMPORT FROM EXA AT connectionName STATEMENT 'select 1' ) USING ( columnName )"
64036404
})
64046405
public void testSelectWithSubImport(String sqlStr) throws JSQLParserException {
6405-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
6406+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true,
6407+
parser -> parser.withDialect(Dialect.EXASOL));
64066408
}
64076409

64086410
}

0 commit comments

Comments
 (0)