From 5d0c578da15e4982a203a678e6acf766852b97cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20L=C3=B3pez?= Date: Mon, 2 Nov 2020 06:46:45 -0300 Subject: [PATCH] Fix bulk update command failing on SQL based storages when tracking operation stats with multiple constraints (#2699) --- .../lucko/luckperms/common/bulkupdate/BulkUpdate.java | 11 +++++++++++ .../common/storage/implementation/sql/SqlStorage.java | 10 ++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/bulkupdate/BulkUpdate.java b/common/src/main/java/me/lucko/luckperms/common/bulkupdate/BulkUpdate.java index d4cfd57cd..4a81db134 100644 --- a/common/src/main/java/me/lucko/luckperms/common/bulkupdate/BulkUpdate.java +++ b/common/src/main/java/me/lucko/luckperms/common/bulkupdate/BulkUpdate.java @@ -103,6 +103,17 @@ public final class BulkUpdate { // (DELETE FROM or UPDATE) this.action.appendSql(builder); + return appendConstraintsAsSql(builder); + } + + /** + * Appends the constraints of this {@link BulkUpdate} to the provided statement builder in SQL syntax + * + * @param builder the statement builder to append the constraints to + * @return the same statement builder provided as input + */ + public PreparedStatementBuilder appendConstraintsAsSql(PreparedStatementBuilder builder) { + // if there are no constraints, just return without a WHERE clause if (this.queries.isEmpty()) { return builder; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java index bf49f450e..075e48108 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java @@ -261,10 +261,7 @@ public class SqlStorage implements StorageImplementation { if (bulkUpdate.isTrackingStatistics()) { PreparedStatementBuilder builder = new PreparedStatementBuilder(); builder.append(USER_PERMISSIONS_SELECT_DISTINCT); - if (!bulkUpdate.getQueries().isEmpty()) { - builder.append(" WHERE "); - bulkUpdate.getQueries().forEach(query -> query.appendSql(builder)); - } + bulkUpdate.appendConstraintsAsSql(builder); try (PreparedStatement lookup = builder.build(c, this.statementProcessor)) { try (ResultSet rs = lookup.executeQuery()) { @@ -291,10 +288,7 @@ public class SqlStorage implements StorageImplementation { if (bulkUpdate.isTrackingStatistics()) { PreparedStatementBuilder builder = new PreparedStatementBuilder(); builder.append(GROUP_PERMISSIONS_SELECT_ALL); - if (!bulkUpdate.getQueries().isEmpty()) { - builder.append(" WHERE "); - bulkUpdate.getQueries().forEach(query -> query.appendSql(builder)); - } + bulkUpdate.appendConstraintsAsSql(builder); try (PreparedStatement lookup = builder.build(c, this.statementProcessor)) { try (ResultSet rs = lookup.executeQuery()) {