From 8caad77c93310b57a3505ea28f681a05480913fe Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Fri, 19 Mar 2021 19:52:08 +0100 Subject: [PATCH] Cleanup SQLite database backend --- .../Bukkit/Database/Backend/SQL.java | 23 +++++---- .../Bukkit/Database/Backend/SQLite.java | 48 +++++++++---------- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQL.java b/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQL.java index 3d1b964..0be54f2 100644 --- a/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQL.java +++ b/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQL.java @@ -41,7 +41,10 @@ public abstract class SQL extends DatabaseBackend private final ConnectionProvider dataSource; protected String tablePlayers = "backpack_players", tableBackpacks = "backpacks", tableCooldowns = "backpack_cooldowns"; // Table Names - protected String fieldPlayerName, fieldPlayerID, fieldPlayerUUID, fieldBpOwner, fieldBpIts, fieldBpVersion, fieldBpLastUpdate, fieldCdPlayer, fieldCdTime; // Table Fields + protected String fieldPlayerName = "name", fieldPlayerID = "id", fieldPlayerUUID = "uuid"; // Table players + protected String fieldBpOwner = "owner", fieldBpIts = "its", fieldBpVersion = "version", fieldBpLastUpdate = "lastupdate"; // Table Backpack + protected String fieldCdPlayer = "id", fieldCdTime = "time"; // Table Fields + @Language("SQL") protected String queryUpdatePlayerAdd, queryInsertBp, queryUpdateBp, queryGetPlayer, queryGetBP, queryDeleteOldBackpacks, queryGetUnsetOrInvalidUUIDs, queryFixUUIDs; // DB Querys @Language("SQL") protected String queryDeleteOldCooldowns, querySyncCooldown, queryGetCooldown; // DB Querys protected boolean syncCooldown; @@ -90,15 +93,15 @@ protected void loadSettings() tablePlayers = plugin.getConfiguration().getDBTable("User", tablePlayers); tableBackpacks = plugin.getConfiguration().getDBTable("Backpack", tableBackpacks); tableCooldowns = plugin.getConfiguration().getDBTable("Cooldown", tableCooldowns); - fieldPlayerID = plugin.getConfiguration().getDBFields("User.Player_ID", "id"); - fieldPlayerName = plugin.getConfiguration().getDBFields("User.Name", "name"); - fieldPlayerUUID = plugin.getConfiguration().getDBFields("User.UUID", "uuid"); - fieldBpOwner = plugin.getConfiguration().getDBFields("Backpack.Owner_ID", "owner"); - fieldBpIts = plugin.getConfiguration().getDBFields("Backpack.ItemStacks", "its"); - fieldBpVersion = plugin.getConfiguration().getDBFields("Backpack.Version", "version"); - fieldBpLastUpdate = plugin.getConfiguration().getDBFields("Backpack.LastUpdate", "lastUpdate"); - fieldCdPlayer = plugin.getConfiguration().getDBFields("Cooldown.Player_ID", "id"); - fieldCdTime = plugin.getConfiguration().getDBFields("Cooldown.Time", "time"); + fieldPlayerID = plugin.getConfiguration().getDBFields("User.Player_ID", fieldPlayerID); + fieldPlayerName = plugin.getConfiguration().getDBFields("User.Name", fieldPlayerName); + fieldPlayerUUID = plugin.getConfiguration().getDBFields("User.UUID", fieldPlayerUUID); + fieldBpOwner = plugin.getConfiguration().getDBFields("Backpack.Owner_ID", fieldBpOwner); + fieldBpIts = plugin.getConfiguration().getDBFields("Backpack.ItemStacks", fieldBpIts); + fieldBpVersion = plugin.getConfiguration().getDBFields("Backpack.Version", fieldBpVersion); + fieldBpLastUpdate = plugin.getConfiguration().getDBFields("Backpack.LastUpdate", fieldBpLastUpdate); + fieldCdPlayer = plugin.getConfiguration().getDBFields("Cooldown.Player_ID", fieldCdPlayer); + fieldCdTime = plugin.getConfiguration().getDBFields("Cooldown.Time", fieldCdTime); syncCooldown = plugin.getConfiguration().isCommandCooldownSyncEnabled(); } diff --git a/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQLite.java b/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQLite.java index 55cd67d..c850303 100644 --- a/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQLite.java +++ b/Minepacks/src/at/pcgamingfreaks/Minepacks/Bukkit/Database/Backend/SQLite.java @@ -24,6 +24,7 @@ import at.pcgamingfreaks.Minepacks.Bukkit.Minepacks; import at.pcgamingfreaks.Version; +import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -51,18 +52,9 @@ protected void loadSettings() { // Set table and field names to fixed values to prevent users from destroying old databases. fieldPlayerID = "player_id"; - fieldPlayerName = "name"; - fieldPlayerUUID = "uuid"; fieldBpOwner = "owner"; //noinspection SpellCheckingInspection fieldBpIts = "itemstacks"; - fieldBpVersion = "version"; - fieldBpLastUpdate = "lastupdate"; - tablePlayers = "backpack_players"; - tableBackpacks = "backpacks"; - tableCooldowns = "backpack_cooldowns"; - fieldCdPlayer = "player_id"; - fieldCdTime = "time"; // Set fixed settings useUUIDSeparators = false; syncCooldown = false; @@ -77,6 +69,15 @@ protected void updateQueriesForDialect() queryUpdatePlayerAdd = "INSERT OR IGNORE INTO {TablePlayers} ({FieldName},{FieldUUID}) VALUES (?,?);"; } + private void tryQuery(final @NotNull Statement statement, final @NotNull @Language("SQL") String query) + { + try + { + statement.execute(query); + } + catch(SQLException ignored) {} + } + @SuppressWarnings("SqlResolve") @Override protected void checkDB() @@ -84,24 +85,15 @@ protected void checkDB() try(Connection connection = getConnection(); Statement stmt = connection.createStatement()) { Version dbVersion = getDatabaseVersion(stmt); + if(dbVersion.olderThan(new Version("3.0-PRE-ALPHA-SNAPSHOT"))) + { + tryQuery(stmt, "ALTER TABLE `backpack_players` ADD COLUMN `uuid` CHAR(32);"); + tryQuery(stmt, "ALTER TABLE `backpacks` ADD COLUMN `version` INT DEFAULT 0;"); + tryQuery(stmt, "ALTER TABLE `backpacks` ADD COLUMN `lastupdate` DATE DEFAULT '2020-09-24';"); + } - stmt.execute("CREATE TABLE IF NOT EXISTS `backpack_players` (`player_id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` CHAR(16) NOT NULL , `uuid` CHAR(32) UNIQUE);"); - try - { - stmt.execute("ALTER TABLE `backpack_players` ADD COLUMN `uuid` CHAR(32);"); - } - catch(SQLException ignored) {} + stmt.execute("CREATE TABLE IF NOT EXISTS `backpack_players` (`player_id` INT UNSIGNED PRIMARY KEY AUTOINCREMENT, `name` CHAR(16) NOT NULL , `uuid` CHAR(32) UNIQUE);"); stmt.execute("CREATE TABLE IF NOT EXISTS `backpacks` (`owner` INT UNSIGNED PRIMARY KEY, `itemstacks` BLOB, `version` INT DEFAULT 0, `lastupdate` DATE DEFAULT CURRENT_DATE);"); - try - { - stmt.execute("ALTER TABLE `backpacks` ADD COLUMN `version` INT DEFAULT 0;"); - } - catch(SQLException ignored) {} - try - { - stmt.execute("ALTER TABLE `backpacks` ADD COLUMN `lastupdate` DATE DEFAULT '2020-09-24';"); - } - catch(SQLException ignored) {} DBTools.runStatement(connection, "INSERT OR REPLACE INTO `minepacks_metadata` (`key`, `value`) VALUES ('db_version',?);", plugin.getDescription().getVersion()); } @@ -118,7 +110,11 @@ protected void checkDB() { if(rs.next()) return new Version(rs.getString("value")); } - return new Version("0"); + try(ResultSet rs = stmt.executeQuery("SELECT name FROM sqlite_master WHERE type='table' AND name='backpack_players';")) + { // Check if players table exists + if(rs.next()) return new Version(2); + } + return plugin.getVersion(); } @Override