Skip to content

Commit a075737

Browse files
fix: validate INTO OUTFILE, DUMPFILE and INTO TEMP as selectInto (#2868)
1 parent 4dff61a commit a075737

4 files changed

Lines changed: 23 additions & 2 deletions

File tree

‎src/main/java/net/sf/jsqlparser/util/validation/feature/MariaDbVersion.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public enum MariaDbVersion implements Version {
2828
Feature.jdbcParameter,
2929
Feature.jdbcNamedParameter, // expressions
3030
Feature.exprLike, // https://mariadb.com/kb/en/select/
31-
Feature.select,
31+
Feature.select, // https://mariadb.com/kb/en/selectinto/
32+
Feature.selectInto,
3233
Feature.selectGroupBy, Feature.function,
3334
Feature.selectHaving,
3435
Feature.limit, Feature.limitOffset, Feature.offset, Feature.offsetParam,

‎src/main/java/net/sf/jsqlparser/util/validation/feature/MySqlVersion.java‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public enum MySqlVersion implements Version {
2828
Feature.jdbcParameter,
2929
Feature.jdbcNamedParameter, // expressions
3030
Feature.exprLike, // https://dev.mysql.com/doc/refman/8.0/en/select.html
31-
Feature.select,
31+
Feature.select, // https://dev.mysql.com/doc/refman/8.0/en/select-into.html
32+
Feature.selectInto,
3233
Feature.selectGroupBy, Feature.selectHaving,
3334
Feature.limit, Feature.limitOffset, Feature.offset, Feature.offsetParam,
3435
Feature.orderBy,

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ public <S> Void visit(PlainSelect plainSelect, S context) {
115115
|| modifier == MySqlSelectModifier.SQL_BUFFER_RESULT),
116116
Feature.mysqlSelectModifiers);
117117
validateOptionalFeature(c, plainSelect.getIntoTables(), Feature.selectInto);
118+
validateOptionalFeature(c, plainSelect.getIntoTempTable(), Feature.selectInto);
119+
validateOptionalFeature(c, plainSelect.getMySqlSelectIntoClause(),
120+
Feature.selectInto);
118121
validateOptionalFeature(c, plainSelect.getKsqlWindow(), Feature.kSqlWindow);
119122
validateFeature(c,
120123
isNotEmpty(plainSelect.getOrderByElements()) && plainSelect.isOracleSiblings(),

‎src/test/java/net/sf/jsqlparser/util/validation/validator/SelectValidatorTest.java‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,22 @@ public void testValidationMySqlSelectModifiers() {
4444
validateNotSupported(sql, 1, 1, DatabaseType.POSTGRESQL, Feature.mysqlSelectModifiers);
4545
}
4646

47+
@ParameterizedTest
48+
@ValueSource(strings = {"SELECT a INTO OUTFILE '/tmp/a.txt' FROM t",
49+
"SELECT a FROM t INTO OUTFILE '/tmp/a.txt'",
50+
"SELECT a FROM t INTO DUMPFILE '/tmp/a.bin'",
51+
"SELECT a FROM t WHERE a IN (SELECT b FROM u INTO OUTFILE '/tmp/b.txt')",
52+
"SELECT * FROM t INTO TEMP x"})
53+
public void testValidationSelectIntoNotAllowed(String sql) {
54+
validateNotAllowed(sql, 1, 1, FeaturesAllowed.SELECT, Feature.selectInto);
55+
}
56+
57+
@Test
58+
public void testValidationMySqlSelectIntoOutfile() {
59+
String sql = "SELECT a FROM t INTO OUTFILE '/tmp/a.txt'";
60+
validateNoErrors(sql, 1, DatabaseType.MYSQL, DatabaseType.MARIADB);
61+
}
62+
4763
@Test
4864
public void testValidationSelectDistinct() throws JSQLParserException {
4965
String sql = "SELECT DISTINCT a, b FROM tab";

0 commit comments

Comments
 (0)