diff --git a/src/main/java/net/sf/jsqlparser/util/validation/feature/MariaDbVersion.java b/src/main/java/net/sf/jsqlparser/util/validation/feature/MariaDbVersion.java index 4d5caa497e..f4ca890270 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/feature/MariaDbVersion.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/feature/MariaDbVersion.java @@ -28,7 +28,8 @@ public enum MariaDbVersion implements Version { Feature.jdbcParameter, Feature.jdbcNamedParameter, // expressions Feature.exprLike, // https://mariadb.com/kb/en/select/ - Feature.select, + Feature.select, // https://mariadb.com/kb/en/selectinto/ + Feature.selectInto, Feature.selectGroupBy, Feature.function, Feature.selectHaving, Feature.limit, Feature.limitOffset, Feature.offset, Feature.offsetParam, diff --git a/src/main/java/net/sf/jsqlparser/util/validation/feature/MySqlVersion.java b/src/main/java/net/sf/jsqlparser/util/validation/feature/MySqlVersion.java index 5359b7835e..17a1eae4d7 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/feature/MySqlVersion.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/feature/MySqlVersion.java @@ -28,7 +28,8 @@ public enum MySqlVersion implements Version { Feature.jdbcParameter, Feature.jdbcNamedParameter, // expressions Feature.exprLike, // https://dev.mysql.com/doc/refman/8.0/en/select.html - Feature.select, + Feature.select, // https://dev.mysql.com/doc/refman/8.0/en/select-into.html + Feature.selectInto, Feature.selectGroupBy, Feature.selectHaving, Feature.limit, Feature.limitOffset, Feature.offset, Feature.offsetParam, Feature.orderBy, diff --git a/src/main/java/net/sf/jsqlparser/util/validation/validator/SelectValidator.java b/src/main/java/net/sf/jsqlparser/util/validation/validator/SelectValidator.java index 96d5e33245..cea33e89d1 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/validator/SelectValidator.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/validator/SelectValidator.java @@ -115,6 +115,9 @@ public Void visit(PlainSelect plainSelect, S context) { || modifier == MySqlSelectModifier.SQL_BUFFER_RESULT), Feature.mysqlSelectModifiers); validateOptionalFeature(c, plainSelect.getIntoTables(), Feature.selectInto); + validateOptionalFeature(c, plainSelect.getIntoTempTable(), Feature.selectInto); + validateOptionalFeature(c, plainSelect.getMySqlSelectIntoClause(), + Feature.selectInto); validateOptionalFeature(c, plainSelect.getKsqlWindow(), Feature.kSqlWindow); validateFeature(c, isNotEmpty(plainSelect.getOrderByElements()) && plainSelect.isOracleSiblings(), diff --git a/src/test/java/net/sf/jsqlparser/util/validation/validator/SelectValidatorTest.java b/src/test/java/net/sf/jsqlparser/util/validation/validator/SelectValidatorTest.java index 6191402dc7..9c372310da 100644 --- a/src/test/java/net/sf/jsqlparser/util/validation/validator/SelectValidatorTest.java +++ b/src/test/java/net/sf/jsqlparser/util/validation/validator/SelectValidatorTest.java @@ -44,6 +44,22 @@ public void testValidationMySqlSelectModifiers() { validateNotSupported(sql, 1, 1, DatabaseType.POSTGRESQL, Feature.mysqlSelectModifiers); } + @ParameterizedTest + @ValueSource(strings = {"SELECT a INTO OUTFILE '/tmp/a.txt' FROM t", + "SELECT a FROM t INTO OUTFILE '/tmp/a.txt'", + "SELECT a FROM t INTO DUMPFILE '/tmp/a.bin'", + "SELECT a FROM t WHERE a IN (SELECT b FROM u INTO OUTFILE '/tmp/b.txt')", + "SELECT * FROM t INTO TEMP x"}) + public void testValidationSelectIntoNotAllowed(String sql) { + validateNotAllowed(sql, 1, 1, FeaturesAllowed.SELECT, Feature.selectInto); + } + + @Test + public void testValidationMySqlSelectIntoOutfile() { + String sql = "SELECT a FROM t INTO OUTFILE '/tmp/a.txt'"; + validateNoErrors(sql, 1, DatabaseType.MYSQL, DatabaseType.MARIADB); + } + @Test public void testValidationSelectDistinct() throws JSQLParserException { String sql = "SELECT DISTINCT a, b FROM tab";