diff --git a/src/main/java/dev/heliosares/auxprotect/database/ConnectionPool.java b/src/main/java/dev/heliosares/auxprotect/database/ConnectionPool.java index 09d0466..f64c506 100644 --- a/src/main/java/dev/heliosares/auxprotect/database/ConnectionPool.java +++ b/src/main/java/dev/heliosares/auxprotect/database/ConnectionPool.java @@ -21,7 +21,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; -import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @@ -252,7 +251,15 @@ public class ConnectionPool { connection = newConnectionSupplier.get(); } try { - return task.apply(connection); + var out = task.apply(connection); + if (!connection.getAutoCommit() && lock.getHoldCount() == 1) { + if (plugin.getAPConfig().getDebug() > 0) { + plugin.warning("Auto-commit not re-enabled following transaction."); + Thread.dumpStack(); + } + connection.setAutoCommit(true); + } + return out; } finally { if (lock.getHoldCount() == 1) { writeTimeIndex++; @@ -303,13 +310,18 @@ public class ConnectionPool { * @see PreparedStatement#executeUpdate() */ public int executeReturnRows(String stmt, Object... args) throws SQLException, BusyException { + return executeReturn(connection -> executeReturnRows(connection, stmt, args), 30000L, Integer.class); + } + + /** + * @see PreparedStatement#executeUpdate() + */ + public int executeReturnRows(Connection connection, String stmt, Object... args) throws SQLException { debugSQLStatement(stmt, args); - return executeReturn(connection -> { - try (PreparedStatement pstmt = connection.prepareStatement(stmt)) { - prepare(connection, pstmt, args); - return pstmt.executeUpdate(); - } - }, 30000L, Integer.class); + try (PreparedStatement pstmt = connection.prepareStatement(stmt)) { + prepare(connection, pstmt, args); + return pstmt.executeUpdate(); + } } public int executeReturnGenerated(String stmt, Object... args) throws SQLException, BusyException { diff --git a/src/main/java/dev/heliosares/auxprotect/database/SQLManager.java b/src/main/java/dev/heliosares/auxprotect/database/SQLManager.java index 79af47f..a6d5232 100644 --- a/src/main/java/dev/heliosares/auxprotect/database/SQLManager.java +++ b/src/main/java/dev/heliosares/auxprotect/database/SQLManager.java @@ -307,13 +307,13 @@ public class SQLManager extends ConnectionPool { setLast(LastKeys.LEGACY_POSITIONS, System.currentTimeMillis(), connection); connection.commit(); - plugin.debug("init done."); + plugin.debug("table init done."); } catch (Throwable t) { plugin.warning("An error occurred during initialization. Rolling back changes."); connection.rollback(); throw t; } finally { - connection.setAutoCommit(true); + if (!connection.getAutoCommit()) connection.setAutoCommit(true); } } @@ -335,7 +335,7 @@ public class SQLManager extends ConnectionPool { } // Step 3: Delete the UIDs - int count_ = executeReturnRows("DELETE FROM auxprotect_uids WHERE uid IN (SELECT auxprotect_uids.uid FROM auxprotect_uids LEFT JOIN temp_uids AS temp ON auxprotect_uids.uid = temp.uid WHERE temp.uid IS NULL)"); + int count_ = executeReturnRows(connection, "DELETE FROM auxprotect_uids WHERE uid IN (SELECT auxprotect_uids.uid FROM auxprotect_uids LEFT JOIN temp_uids AS temp ON auxprotect_uids.uid = temp.uid WHERE temp.uid IS NULL)"); // Step 4: Drop the Temporary Table execute("DROP " + (isMySQL() ? "TEMPORARY " : "") + "TABLE IF EXISTS temp_uids", connection); @@ -346,6 +346,8 @@ public class SQLManager extends ConnectionPool { } catch (Throwable t) { connection.rollback(); throw t; + } finally { + if (!connection.getAutoCommit()) connection.setAutoCommit(true); } }, 30000L, Integer.class); diff --git a/src/main/java/dev/heliosares/auxprotect/spigot/AuxProtectSpigot.java b/src/main/java/dev/heliosares/auxprotect/spigot/AuxProtectSpigot.java index fc602f4..f4857e1 100644 --- a/src/main/java/dev/heliosares/auxprotect/spigot/AuxProtectSpigot.java +++ b/src/main/java/dev/heliosares/auxprotect/spigot/AuxProtectSpigot.java @@ -42,6 +42,7 @@ import dev.heliosares.auxprotect.utils.Telemetry; import dev.heliosares.auxprotect.utils.UpdateChecker; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.Container; @@ -653,6 +654,7 @@ public final class AuxProtectSpigot extends JavaPlugin implements IAuxProtect { @Override public void info(String string) { + string = ChatColor.stripColor(string); this.getLogger().info(string); logToStackLog("[INFO] " + string); }