Skip to content

Commit 3a0438c

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

File tree

4 files changed

+35
-34
lines changed

4 files changed

+35
-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: 15 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,7 @@ 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, parser -> parser.withDialect(Dialect.EXASOL));
3132
}
3233

3334
@ParameterizedTest
@@ -39,7 +40,7 @@ public void testExport(String sqlStr) throws JSQLParserException {
3940
"EXPORT schemaName.tableName INTO LOCAL SECURE CSV FILE 'file1.csv' FILE 'file2.csv'"
4041
})
4142
public void testExportIntoFileCSV(String sqlStr) throws JSQLParserException {
42-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
43+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
4344
}
4445

4546
@ParameterizedTest
@@ -57,7 +58,7 @@ public void testExportIntoFileCSV(String sqlStr) throws JSQLParserException {
5758
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' ( 1, 1 .. 2, 3 )"
5859
})
5960
public void testExportIntoFileCSVCols(String sqlStr) throws JSQLParserException {
60-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
61+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
6162
}
6263

6364
@ParameterizedTest
@@ -69,7 +70,7 @@ public void testExportIntoFileCSVCols(String sqlStr) throws JSQLParserException
6970
"EXPORT schemaName.tableName INTO LOCAL SECURE FBV FILE 'file1.fbv' FILE 'file2.fbv'"
7071
})
7172
public void testExportIntoFileFBV(String sqlStr) throws JSQLParserException {
72-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
73+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
7374
}
7475

7576
@ParameterizedTest
@@ -85,7 +86,7 @@ public void testExportIntoFileFBV(String sqlStr) throws JSQLParserException {
8586
"EXPORT schemaName.tableName INTO LOCAL FBV FILE 'file.fbv' ( SIZE = 1 PADDING = '0', FORMAT = 'format' )"
8687
})
8788
public void testExportIntoFileFBVCols(String sqlStr) throws JSQLParserException {
88-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
89+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
8990
}
9091

9192
@ParameterizedTest
@@ -107,7 +108,7 @@ public void testExportIntoFileFBVCols(String sqlStr) throws JSQLParserException
107108
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' ENCODING = 'UTF-8' REPLACE WITH COLUMN NAMES"
108109
})
109110
public void testExportIntoFileFileOpts(String sqlStr) throws JSQLParserException {
110-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
111+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
111112
}
112113

113114
@ParameterizedTest
@@ -120,7 +121,7 @@ public void testExportIntoFileFileOpts(String sqlStr) throws JSQLParserException
120121
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' IGNORE CERTIFICATE PUBLIC KEY 'publicKey'"
121122
})
122123
public void testExportIntoFileCertVerification(String sqlStr) throws JSQLParserException {
123-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
124+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
124125
}
125126

126127
@ParameterizedTest
@@ -149,7 +150,7 @@ public void testExportIntoFileCertVerification(String sqlStr) throws JSQLParserE
149150
"EXPORT schemaName.tableName INTO CSV AT '127.0.0.1' USER 'user' IDENTIFIED BY 'password' VERIFY CERTIFICATE PUBLIC KEY 'publicKey' FILE 'file.csv'"
150151
})
151152
public void testExportIntoConnectionDef(String sqlStr) throws JSQLParserException {
152-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
153+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
153154
}
154155

155156
@ParameterizedTest
@@ -164,7 +165,7 @@ public void testExportIntoConnectionDef(String sqlStr) throws JSQLParserExceptio
164165
"EXPORT schemaName.tableName INTO CSV AT CLOUD AZURE BLOBSTORAGE '127.0.0.1' USER 'user' IDENTIFIED BY 'password' FILE 'file.csv'"
165166
})
166167
public void testExportIntoCloudConnectionDef(String sqlStr) throws JSQLParserException {
167-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
168+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
168169
}
169170

170171
@ParameterizedTest
@@ -184,7 +185,7 @@ public void testExportIntoCloudConnectionDef(String sqlStr) throws JSQLParserExc
184185
"EXPORT schemaName.tableName INTO EXA AT connectionName STATEMENT 'insert into schemaName.tableName ( columnName ) values ( ? )'"
185186
})
186187
public void testExportIntoDBMSEXA(String sqlStr) throws JSQLParserException {
187-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
188+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
188189
}
189190

190191
@ParameterizedTest
@@ -196,7 +197,7 @@ public void testExportIntoDBMSEXA(String sqlStr) throws JSQLParserException {
196197
"EXPORT schemaName.tableName INTO ORA AT connectionName STATEMENT 'insert into schemaName.tableName ( columnName ) values ( ? )'"
197198
})
198199
public void testExportIntoDBMSORA(String sqlStr) throws JSQLParserException {
199-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
200+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
200201
}
201202

202203
@ParameterizedTest
@@ -205,7 +206,7 @@ public void testExportIntoDBMSORA(String sqlStr) throws JSQLParserException {
205206
"EXPORT schemaName.tableName INTO JDBC DRIVER = 'driverName' AT connectionName TABLE tableName"
206207
})
207208
public void testExportIntoDBMSJDBC(String sqlStr) throws JSQLParserException {
208-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
209+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
209210
}
210211

211212
@ParameterizedTest
@@ -217,7 +218,7 @@ public void testExportIntoDBMSJDBC(String sqlStr) throws JSQLParserException {
217218
"EXPORT schemaName.tableName INTO SCRIPT scriptName AT connectionName WITH propertyName = 'value' propertyName2 = 'value2'"
218219
})
219220
public void testExportIntoScript(String sqlStr) throws JSQLParserException {
220-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
221+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
221222
}
222223

223224
@ParameterizedTest
@@ -252,6 +253,6 @@ public void testExportIntoScript(String sqlStr) throws JSQLParserException {
252253
"EXPORT schemaName.tableName INTO LOCAL CSV FILE 'file.csv' ERRORS INTO schemaName.tableName REJECT LIMIT UNLIMITED ERRORS"
253254
})
254255
public void testImportErrorClause(String sqlStr) throws JSQLParserException {
255-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
256+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
256257
}
257258
}

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

Lines changed: 16 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,7 @@ 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, parser -> parser.withDialect(Dialect.EXASOL));
2930
}
3031

3132
@ParameterizedTest
@@ -41,7 +42,7 @@ public void testImportIntoTable(String sqlStr) throws JSQLParserException {
4142
"IMPORT INTO ( LIKE schemaName.tableName ( columnName1 AS aliasName2, columnName2 AS aliasName2 ) ) FROM LOCAL CSV FILE 'file.csv'"
4243
})
4344
public void testImportIntoImportColumns(String sqlStr) throws JSQLParserException {
44-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
45+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
4546
}
4647

4748
@ParameterizedTest
@@ -53,7 +54,7 @@ public void testImportIntoImportColumns(String sqlStr) throws JSQLParserExceptio
5354
"IMPORT FROM LOCAL SECURE CSV FILE 'file1.csv' FILE 'file2.csv'"
5455
})
5556
public void testImportFromFileCSV(String sqlStr) throws JSQLParserException {
56-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
57+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
5758
}
5859

5960
@ParameterizedTest
@@ -67,7 +68,7 @@ public void testImportFromFileCSV(String sqlStr) throws JSQLParserException {
6768
"IMPORT FROM LOCAL CSV FILE 'file.csv' ( 1, 1 .. 2, 3 )"
6869
})
6970
public void testImportFromFileCSVCols(String sqlStr) throws JSQLParserException {
70-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
71+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
7172
}
7273

7374
@ParameterizedTest
@@ -79,7 +80,7 @@ public void testImportFromFileCSVCols(String sqlStr) throws JSQLParserException
7980
"IMPORT FROM LOCAL SECURE FBV FILE 'file1.fbv' FILE 'file2.fbv'"
8081
})
8182
public void testImportFromFileFBV(String sqlStr) throws JSQLParserException {
82-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
83+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
8384
}
8485

8586
@ParameterizedTest
@@ -96,7 +97,7 @@ public void testImportFromFileFBV(String sqlStr) throws JSQLParserException {
9697
"IMPORT FROM LOCAL FBV FILE 'file.fbv' ( SIZE = 1 START = 1, FORMAT = 'format' )"
9798
})
9899
public void testImportFromFileFBVCols(String sqlStr) throws JSQLParserException {
99-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
100+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
100101
}
101102

102103
@ParameterizedTest
@@ -116,7 +117,7 @@ public void testImportFromFileFBVCols(String sqlStr) throws JSQLParserException
116117
"IMPORT FROM LOCAL CSV FILE 'file.csv' ENCODING = 'UTF-8' SKIP = 1 TRIM"
117118
})
118119
public void testImportFromFileFileOpts(String sqlStr) throws JSQLParserException {
119-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
120+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
120121
}
121122

122123
@ParameterizedTest
@@ -129,7 +130,7 @@ public void testImportFromFileFileOpts(String sqlStr) throws JSQLParserException
129130
"IMPORT FROM LOCAL CSV FILE 'file.csv' IGNORE CERTIFICATE PUBLIC KEY 'publicKey'"
130131
})
131132
public void testImportFromFileCertVerification(String sqlStr) throws JSQLParserException {
132-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
133+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
133134
}
134135

135136
@ParameterizedTest
@@ -158,7 +159,7 @@ public void testImportFromFileCertVerification(String sqlStr) throws JSQLParserE
158159
"IMPORT FROM CSV AT '127.0.0.1' USER 'user' IDENTIFIED BY 'password' VERIFY CERTIFICATE PUBLIC KEY 'publicKey' FILE 'file.csv'"
159160
})
160161
public void testImportFromConnectionDef(String sqlStr) throws JSQLParserException {
161-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
162+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
162163
}
163164

164165
@ParameterizedTest
@@ -173,7 +174,7 @@ public void testImportFromConnectionDef(String sqlStr) throws JSQLParserExceptio
173174
"IMPORT FROM CSV AT CLOUD AZURE BLOBSTORAGE '127.0.0.1' USER 'user' IDENTIFIED BY 'password' FILE 'file.csv'"
174175
})
175176
public void testImportFromCloudConnectionDef(String sqlStr) throws JSQLParserException {
176-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
177+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
177178
}
178179

179180
@ParameterizedTest
@@ -186,7 +187,7 @@ public void testImportFromCloudConnectionDef(String sqlStr) throws JSQLParserExc
186187
"IMPORT FROM EXA AT connectionName STATEMENT 'select 1' STATEMENT 'select 2'"
187188
})
188189
public void testImportFromDBMSEXA(String sqlStr) throws JSQLParserException {
189-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
190+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
190191
}
191192

192193
@ParameterizedTest
@@ -199,7 +200,7 @@ public void testImportFromDBMSEXA(String sqlStr) throws JSQLParserException {
199200
"IMPORT FROM ORA AT connectionName STATEMENT 'select 1' STATEMENT 'select 2'"
200201
})
201202
public void testImportFromDBMSORA(String sqlStr) throws JSQLParserException {
202-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
203+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
203204
}
204205

205206
@ParameterizedTest
@@ -213,7 +214,7 @@ public void testImportFromDBMSORA(String sqlStr) throws JSQLParserException {
213214
"IMPORT FROM JDBC DRIVER = 'driverName' AT connectionName STATEMENT 'select 1' STATEMENT 'select 2'"
214215
})
215216
public void testImportFromDBMSJDBC(String sqlStr) throws JSQLParserException {
216-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
217+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
217218
}
218219

219220
@ParameterizedTest
@@ -225,7 +226,7 @@ public void testImportFromDBMSJDBC(String sqlStr) throws JSQLParserException {
225226
"IMPORT FROM SCRIPT scriptName AT connectionName WITH propertyName = 'value' propertyName2 = 'value2'"
226227
})
227228
public void testImportFromScript(String sqlStr) throws JSQLParserException {
228-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
229+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
229230
}
230231

231232
@ParameterizedTest
@@ -260,6 +261,6 @@ public void testImportFromScript(String sqlStr) throws JSQLParserException {
260261
"IMPORT FROM LOCAL CSV FILE 'file.csv' ERRORS INTO schemaName.tableName REJECT LIMIT UNLIMITED ERRORS"
261262
})
262263
public void testImportErrorClause(String sqlStr) throws JSQLParserException {
263-
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr);
264+
TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true, parser -> parser.withDialect(Dialect.EXASOL));
264265
}
265266
}

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

Lines changed: 2 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,7 @@ 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, parser -> parser.withDialect(Dialect.EXASOL));
64066407
}
64076408

64086409
}

0 commit comments

Comments
 (0)