From b6f0e84a0216e30b39b9759a4fc96a13f3f0c265 Mon Sep 17 00:00:00 2001 From: Keir Nellyer Date: Fri, 19 Aug 2016 16:21:44 +0100 Subject: [PATCH] Fix sql error when attempting to reinsert same report mapping --- .../mineplex/core/chatsnap/SnapshotRepository.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/chatsnap/SnapshotRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/chatsnap/SnapshotRepository.java index 2fa4f2835..45aa6b470 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/chatsnap/SnapshotRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/chatsnap/SnapshotRepository.java @@ -5,6 +5,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import mineplex.core.common.util.UtilTime; @@ -24,7 +25,7 @@ public class SnapshotRepository private static final String INSERT_SNAPSHOT = "INSERT INTO snapshots (senderId, `server`, `time`, message, snapshotType) VALUES (?, ?, ?, ?, ?);"; private static final String INSERT_SNAPSHOT_RECIPIENT = "INSERT INTO snapshotRecipients (snapshotId, recipientId) VALUES (?, ?);"; - private static final String INSERT_REPORT_SNAPSHOT_MAPPING = "INSERT INTO reportSnapshots (reportId, snapshotId) VALUES (?, ?);"; + private static final String INSERT_REPORT_SNAPSHOT_MAPPING = "INSERT IGNORE INTO reportSnapshots (reportId, snapshotId) VALUES (?, ?);"; private final String _serverName; @@ -80,9 +81,10 @@ public class SnapshotRepository // this allows snapshots to be inserted in batch private void insertSnapshot(Connection connection, PreparedStatement insertSnapshotStatement, long reportId, Snapshot snapshot) throws SQLException { - long snapshotId = snapshot.getId().orElse((long) -1); + Optional snapshotIdOptional = snapshot.getId(); + long snapshotId; - if (snapshotId == -1) + if (!snapshotIdOptional.isPresent()) { insertSnapshotStatement.setInt(1, snapshot.getSenderId()); insertSnapshotStatement.setString(2, _serverName); @@ -104,6 +106,10 @@ public class SnapshotRepository insertRecipients(connection, snapshotId, snapshot.getRecipientIds()); } + else + { + snapshotId = snapshotIdOptional.get(); + } insertReportMapping(connection, reportId, snapshotId); }