diff --git a/common/src/main/java/net/william278/husksync/database/PostgresDatabase.java b/common/src/main/java/net/william278/husksync/database/PostgresDatabase.java index ee002c81..4dc8f4d1 100644 --- a/common/src/main/java/net/william278/husksync/database/PostgresDatabase.java +++ b/common/src/main/java/net/william278/husksync/database/PostgresDatabase.java @@ -328,11 +328,16 @@ protected void rotateSnapshots(@NotNull User user) { if (unpinnedUserData.size() > maxSnapshots) { try (Connection connection = getConnection()) { try (PreparedStatement statement = connection.prepareStatement(formatStatementTables(""" - DELETE FROM %user_data_table% - WHERE player_uuid=? - AND pinned=FALSE - ORDER BY timestamp ASC - LIMIT %entry_count%;""".replace("%entry_count%", + WITH cte AS ( + SELECT id + FROM user_data_table + WHERE player_uuid=? + AND pinned=FALSE + ORDER BY timestamp ASC + LIMIT %entry_count% + ) + DELETE FROM user_data_table + WHERE id IN (SELECT id FROM cte);""".replace("%entry_count%", Integer.toString(unpinnedUserData.size() - maxSnapshots))))) { statement.setObject(1, user.getUuid()); statement.executeUpdate(); @@ -349,10 +354,9 @@ public boolean deleteSnapshot(@NotNull User user, @NotNull UUID versionUuid) { try (Connection connection = getConnection()) { try (PreparedStatement statement = connection.prepareStatement(formatStatementTables(""" DELETE FROM %user_data_table% - WHERE player_uuid=? AND version_uuid=? - LIMIT 1;"""))) { + WHERE player_uuid=? AND version_uuid=?;"""))) { statement.setObject(1, user.getUuid()); - statement.setString(2, versionUuid.toString()); + statement.setObject(2, versionUuid); return statement.executeUpdate() > 0; } } catch (SQLException e) {