diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/building/Sql.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/building/Sql.java index fc00e04239..32f19a967a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/building/Sql.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/building/Sql.java @@ -118,6 +118,8 @@ public static String concat(DBType dbType, String one, String two) { public abstract String dateToHour(String sql); + public abstract String insertOrIgnore(); + // https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html public static class MySQL extends Sql { @@ -150,6 +152,11 @@ public String dateToDayOfWeek(String sql) { public String dateToHour(String sql) { return "HOUR(" + sql + ") % 24"; } + + @Override + public String insertOrIgnore() { + return "INSERT IGNORE INTO "; + } } // https://sqlite.org/lang_datefunc.html @@ -184,5 +191,10 @@ public String dateToDayOfWeek(String sql) { public String dateToHour(String sql) { return "strftime('%H'," + sql + ')'; } + + @Override + public String insertOrIgnore() { + return "INSERT OR IGNORE INTO "; + } } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/webuser/WebPermissionTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/webuser/WebPermissionTable.java index 02173c304b..34d57ae1b1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/webuser/WebPermissionTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/webuser/WebPermissionTable.java @@ -41,6 +41,10 @@ private WebPermissionTable() { /* Static information class */ } + public static String safeInsertSQL(DBType dbType) { + return dbType.getSql().insertOrIgnore() + TABLE_NAME + " (" + PERMISSION + ") VALUES (?)"; + } + public static String createTableSQL(DBType dbType) { return CreateTableBuilder.create(TABLE_NAME, dbType) .column(ID, Sql.INT).primaryKey() diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/UpdateWebPermissionsPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/UpdateWebPermissionsPatch.java index eb75d27cfc..0fa7ceb580 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/UpdateWebPermissionsPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/UpdateWebPermissionsPatch.java @@ -17,7 +17,6 @@ package com.djrapitops.plan.storage.database.transactions.patches; import com.djrapitops.plan.delivery.domain.auth.WebPermission; -import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.storage.database.queries.objects.WebUserQueries; import com.djrapitops.plan.storage.database.sql.tables.webuser.WebPermissionTable; import com.djrapitops.plan.storage.database.transactions.ExecBatchStatement; @@ -56,19 +55,11 @@ public boolean hasBeenApplied() { @Override protected void applyPatch() { - try { - storeMissing(); - } catch (DBOpException failed) { - if (failed.isDuplicateKeyViolation()) { - retry(failed); - } else { - throw failed; - } - } + storeMissing(); } private void storeMissing() { - execute(new ExecBatchStatement(WebPermissionTable.INSERT_STATEMENT) { + execute(new ExecBatchStatement(WebPermissionTable.safeInsertSQL(dbType)) { @Override public void prepare(PreparedStatement statement) throws SQLException { for (String permission : missingPermissions) { @@ -78,14 +69,4 @@ public void prepare(PreparedStatement statement) throws SQLException { } }); } - - private void retry(DBOpException failed) { - try { - if (hasBeenApplied()) return; - storeMissing(); - } catch (DBOpException anotherFail) { - anotherFail.addSuppressed(failed); - throw anotherFail; - } - } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/webuser/StoreMissingWebPermissionsTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/webuser/StoreMissingWebPermissionsTransaction.java index ef1811bddf..10cf5385d8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/webuser/StoreMissingWebPermissionsTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/webuser/StoreMissingWebPermissionsTransaction.java @@ -50,7 +50,7 @@ protected void performOperations() { missingPermissions.add(permission); } } - execute(new ExecBatchStatement(WebPermissionTable.INSERT_STATEMENT) { + execute(new ExecBatchStatement(WebPermissionTable.safeInsertSQL(dbType)) { @Override public void prepare(PreparedStatement statement) throws SQLException { for (String permission : missingPermissions) {