From 93a535b2d35d9a12810cba116dde738c40297f1e Mon Sep 17 00:00:00 2001 From: Michael Burgess Date: Mon, 17 Aug 2026 23:42:27 -0400 Subject: [PATCH] Fix oversized player statistic keys --- .../playerstats/SqlStatsStorage.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/therosegarden/playerstats/SqlStatsStorage.java b/src/main/java/net/therosegarden/playerstats/SqlStatsStorage.java index 37a2e7c..42d2adb 100644 --- a/src/main/java/net/therosegarden/playerstats/SqlStatsStorage.java +++ b/src/main/java/net/therosegarden/playerstats/SqlStatsStorage.java @@ -12,6 +12,8 @@ import java.util.Properties; import java.util.UUID; final class SqlStatsStorage implements StatsStorage { + private static final int STAT_KEY_LENGTH = 512; + private final String url; private final String username; private final String password; @@ -54,7 +56,7 @@ final class SqlStatsStorage implements StatsStorage { CREATE TABLE IF NOT EXISTS rose_player_stats ( uuid CHAR(36) NOT NULL, player_name VARCHAR(64) NOT NULL, - stat_key VARCHAR(190) NOT NULL, + stat_key VARCHAR(512) NOT NULL, stat_value BIGINT NOT NULL, PRIMARY KEY (uuid, stat_key), INDEX idx_stats_player_name (player_name), @@ -75,6 +77,31 @@ final class SqlStatsStorage implements StatsStorage { ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 """); } + ensureStatKeyCapacity(db); + } + + private void ensureStatKeyCapacity(Connection db) throws SQLException { + long currentLength = 0L; + try (PreparedStatement statement = db.prepareStatement(""" + SELECT CHARACTER_MAXIMUM_LENGTH + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'rose_player_stats' + AND COLUMN_NAME = 'stat_key' + """)) { + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + currentLength = result.getLong(1); + } + } + } + + if (currentLength > 0L && currentLength < STAT_KEY_LENGTH) { + try (Statement statement = db.createStatement()) { + statement.executeUpdate( + "ALTER TABLE rose_player_stats MODIFY COLUMN stat_key VARCHAR(" + STAT_KEY_LENGTH + ") NOT NULL"); + } + } } @Override