From d3218483f7f33ec4b68de643bdbbe6253aedd992 Mon Sep 17 00:00:00 2001 From: gitmotte Date: Mon, 25 Jul 2022 06:55:20 +0200 Subject: [PATCH] Using own Feature - constant for "delete with returning" #1597 (#1598) --- .../sf/jsqlparser/parser/feature/Feature.java | 24 ++++++++++++++----- .../validation/feature/FeaturesAllowed.java | 3 ++- .../validation/feature/OracleVersion.java | 1 + .../validation/feature/PostgresqlVersion.java | 11 ++++++--- .../validation/validator/DeleteValidator.java | 2 +- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java b/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java index 1193a1f01..349ab0725 100644 --- a/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java +++ b/src/main/java/net/sf/jsqlparser/parser/feature/Feature.java @@ -327,6 +327,11 @@ public enum Feature { updateUseSelect, updateOrderBy, updateLimit, + /** + * "RETURNING expr(, expr)*" + * + * @see SelectExpressionItem + */ updateReturning, /** * SQL "DELETE" statement is allowed @@ -350,6 +355,12 @@ public enum Feature { * "ORDER BY ..." */ deleteOrderBy, + /** + * "RETURNING expr(, expr)*" + * + * @see SelectExpressionItem + */ + deleteReturningExpressionList, /** * SQL "UPSERT" statement is allowed @@ -501,7 +512,7 @@ public enum Feature { */ createTableRowMovement, /** - * "CREATE TABLE (colspec) SELECT ... + * "CREATE TABLE (colspec) SELECT ... */ createTableFromSelect, /** @@ -615,7 +626,7 @@ public enum Feature { set, /** * @see ResetStatement - */ + */ reset, /** * @see Pivot @@ -724,17 +735,18 @@ public enum Feature { allowSquareBracketQuotation(false), /** - allow parsing of RDBMS specific syntax by switching off SQL Standard Compliant Syntax - */ + * allow parsing of RDBMS specific syntax by switching off SQL Standard + * Compliant Syntax + */ allowPostgresSpecificSyntax(false), // PERFORMANCE - + /** * allows complex expression parameters or named parameters for functions * will be switched off, when deep nesting of functions is detected */ - allowComplexParsing(true), + allowComplexParsing(true), /** * allows passing through Unsupported Statements as a plain List of Tokens diff --git a/src/main/java/net/sf/jsqlparser/util/validation/feature/FeaturesAllowed.java b/src/main/java/net/sf/jsqlparser/util/validation/feature/FeaturesAllowed.java index 6ec4c7ba1..04c9a1277 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/feature/FeaturesAllowed.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/feature/FeaturesAllowed.java @@ -110,7 +110,8 @@ public class FeaturesAllowed implements FeatureSetValidation, ModifyableFeatureS * all {@link Feature}' for SQL UPDATE including {@link #SELECT} */ public static final FeaturesAllowed DELETE = new FeaturesAllowed("DELETE", Feature.delete, Feature.deleteJoin, - Feature.deleteLimit, Feature.deleteOrderBy, Feature.deleteTables, Feature.truncate) + Feature.deleteLimit, Feature.deleteOrderBy, Feature.deleteTables, Feature.deleteReturningExpressionList, + Feature.truncate) .add(SELECT).unmodifyable(); /** diff --git a/src/main/java/net/sf/jsqlparser/util/validation/feature/OracleVersion.java b/src/main/java/net/sf/jsqlparser/util/validation/feature/OracleVersion.java index 3c970bf65..e3c344e30 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/feature/OracleVersion.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/feature/OracleVersion.java @@ -100,6 +100,7 @@ public enum OracleVersion implements Version { // https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/DELETE.html Feature.delete, + Feature.deleteReturningExpressionList, // https://www.oracletutorial.com/oracle-basics/oracle-truncate-table/ Feature.truncate, diff --git a/src/main/java/net/sf/jsqlparser/util/validation/feature/PostgresqlVersion.java b/src/main/java/net/sf/jsqlparser/util/validation/feature/PostgresqlVersion.java index 32e62cca7..369a48f42 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/feature/PostgresqlVersion.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/feature/PostgresqlVersion.java @@ -98,7 +98,7 @@ public enum PostgresqlVersion implements Version { // https://www.postgresql.org/docs/current/sql-createindex.html Feature.createIndex, // https://www.postgresql.org/docs/current/sql-createtable.html - Feature.createTable, Feature.createTableUnlogged, + Feature.createTable, Feature.createTableUnlogged, Feature.createTableCreateOptionStrings, Feature.createTableTableOptionStrings, Feature.createTableFromSelect, Feature.createTableIfNotExists, // https://www.postgresql.org/docs/current/sql-createview.html @@ -111,12 +111,14 @@ public enum PostgresqlVersion implements Version { Feature.insertValues, Feature.values, Feature.insertFromSelect, - Feature.insertReturningAll, Feature.insertReturningExpressionList, + Feature.insertReturningAll, + Feature.insertReturningExpressionList, // https://www.postgresql.org/docs/current/sql-update.html Feature.update, Feature.updateReturning, // https://www.postgresql.org/docs/current/sql-delete.html Feature.delete, + Feature.deleteReturningExpressionList, // https://www.postgresql.org/docs/current/sql-truncate.html Feature.truncate, @@ -150,7 +152,10 @@ public enum PostgresqlVersion implements Version { // https://www.postgresql.org/docs/current/sql-commit.html Feature.commit )), - V11("11", V10.copy().getFeatures()), V12("12", V11.copy().getFeatures()); + V11("11", V10.copy().getFeatures()), + V12("12", V11.copy().getFeatures()), + V13("13", V12.copy().getFeatures()), + V14("14", V13.copy().getFeatures()); private Set features; private String versionString; diff --git a/src/main/java/net/sf/jsqlparser/util/validation/validator/DeleteValidator.java b/src/main/java/net/sf/jsqlparser/util/validation/validator/DeleteValidator.java index 7e07eb546..564278dfe 100644 --- a/src/main/java/net/sf/jsqlparser/util/validation/validator/DeleteValidator.java +++ b/src/main/java/net/sf/jsqlparser/util/validation/validator/DeleteValidator.java @@ -28,7 +28,7 @@ public void validate(Delete delete) { validateOptionalFeature(c, delete.getJoins(), Feature.deleteJoin); validateOptionalFeature(c, delete.getLimit(), Feature.deleteLimit); validateOptionalFeature(c, delete.getOrderByElements(), Feature.deleteOrderBy); - validateOptionalFeature(c, delete.getReturningExpressionList(), Feature.insertReturningExpressionList); + validateOptionalFeature(c, delete.getReturningExpressionList(), Feature.deleteReturningExpressionList); } SelectValidator v = getValidator(SelectValidator.class);