diff --git a/Plugin/src/main/java/xyz/kyngs/librelogin/common/database/provider/LibreLoginSQLDatabaseProvider.java b/Plugin/src/main/java/xyz/kyngs/librelogin/common/database/provider/LibreLoginSQLDatabaseProvider.java index 98a7f42f..24cfb813 100644 --- a/Plugin/src/main/java/xyz/kyngs/librelogin/common/database/provider/LibreLoginSQLDatabaseProvider.java +++ b/Plugin/src/main/java/xyz/kyngs/librelogin/common/database/provider/LibreLoginSQLDatabaseProvider.java @@ -55,14 +55,13 @@ public Collection getByIP(String ip) { public User getByName(String name) { plugin.reportMainThread(); return connector.runQuery(connection -> { - var ps = connection.prepareStatement("SELECT * FROM librepremium_data WHERE LOWER(last_nickname)=LOWER(?)"); + var ps = connection.prepareStatement("SELECT * FROM librepremium_data WHERE last_nickname_lower = ?"); - ps.setString(1, name); + ps.setString(1, name.toLowerCase()); var rs = ps.executeQuery(); return getUserFromResult(rs); - }); } @@ -236,7 +235,8 @@ public void validateSchema() { "hashed_password VARCHAR(255)," + "salt VARCHAR(255)," + "algo VARCHAR(255)," + - "last_nickname VARCHAR(255) NOT NULL UNIQUE," + + "last_nickname VARCHAR(255) NOT NULL," + + "last_nickname_lower VARCHAR(255) AS (LOWER(last_nickname)) STORED," + "joined TIMESTAMP NULL DEFAULT NULL," + "last_seen TIMESTAMP NULL DEFAULT NULL," + "last_server VARCHAR(255)" + @@ -261,12 +261,12 @@ public void validateSchema() { } if (!columns.contains("email")) { connection.prepareStatement("ALTER TABLE librepremium_data ADD COLUMN email VARCHAR(255) NULL DEFAULT NULL").executeUpdate(); - } try { - connection.prepareStatement(addUnique("last_nickname")).executeUpdate(); + connection.prepareStatement("CREATE UNIQUE INDEX idx_nickname_lower ON librepremium_data (last_nickname_lower)").executeUpdate(); } catch (SQLException ignored) { } + } }); }