mirror of
https://github.com/GeorgH93/Minepacks.git
synced 2024-12-04 14:03:24 +01:00
Refactor database field names loading
This commit is contained in:
parent
4c2cc72023
commit
7536994e50
@ -91,7 +91,7 @@ Database:
|
||||
Tables:
|
||||
# Table names
|
||||
# Don't change the players table if you have backpacks stored in your database already! Player id's might won't match anymore resulting data inconsistency.
|
||||
User: backpack_players
|
||||
Player: backpack_players
|
||||
Backpack: backpacks
|
||||
Cooldown: backpack_cooldowns
|
||||
# Field settings for the tables
|
||||
@ -99,16 +99,16 @@ Database:
|
||||
# If you like to change them after the tables have been generated alter the tables manually or delete them (the system then will regenerate them).
|
||||
Fields:
|
||||
User:
|
||||
Player_ID: player_id
|
||||
PlayerID: player_id
|
||||
Name: name
|
||||
UUID: uuid
|
||||
Backpack:
|
||||
Owner_ID: owner
|
||||
OwnerID: owner
|
||||
ItemStacks: itemstacks
|
||||
Version: version
|
||||
LastUpdate: lastupdate
|
||||
Cooldown:
|
||||
Player_ID: id
|
||||
PlayerID: id
|
||||
Time: time
|
||||
# Settings controlling the cache behavior of the plugin. You may optimize it a little depending on your player count, ram or cpu bottlenecks.
|
||||
Cache:
|
||||
@ -217,4 +217,4 @@ Misc:
|
||||
UseBungeeCord: false
|
||||
|
||||
# Config file version. Don't touch it!
|
||||
Version: 35
|
||||
Version: 36
|
@ -18,7 +18,9 @@
|
||||
package at.pcgamingfreaks.Minepacks.Bukkit.Database.Backend;
|
||||
|
||||
import at.pcgamingfreaks.DataHandler.HasPlaceholders;
|
||||
import at.pcgamingfreaks.DataHandler.ILoadableStringFieldsHolder;
|
||||
import at.pcgamingfreaks.DataHandler.IStringFieldsWithPlaceholdersHolder;
|
||||
import at.pcgamingfreaks.DataHandler.Loadable;
|
||||
import at.pcgamingfreaks.Database.ConnectionProvider.ConnectionProvider;
|
||||
import at.pcgamingfreaks.Database.DBTools;
|
||||
import at.pcgamingfreaks.Minepacks.Bukkit.Backpack;
|
||||
@ -32,20 +34,21 @@
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.intellij.lang.annotations.Language;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class SQL extends DatabaseBackend implements IStringFieldsWithPlaceholdersHolder
|
||||
public abstract class SQL extends DatabaseBackend implements IStringFieldsWithPlaceholdersHolder, ILoadableStringFieldsHolder
|
||||
{
|
||||
private final ConnectionProvider dataSource;
|
||||
|
||||
protected String tablePlayers = "backpack_players", tableBackpacks = "backpacks", tableCooldowns = "backpack_cooldowns"; // Table Names
|
||||
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
|
||||
@Loadable protected String tablePlayers = "minepacks_players", tableBackpacks = "minepacks_backpacks", tableCooldowns = "minepacks_cooldowns"; // Table names
|
||||
@Loadable(metadata = "User") protected String fieldPlayerName = "name", fieldPlayerID = "id", fieldPlayerUUID = "uuid"; // Table fields players
|
||||
@Loadable(metadata = "Backpack") protected String fieldBpOwnerID = "owner", fieldBpIts = "its", fieldBpVersion = "version", fieldBpLastUpdate = "lastupdate"; // Table fields backpack
|
||||
@Loadable(metadata = "Cooldown") protected String fieldCdPlayerID = "id", fieldCdTime = "time"; // Table fields cooldown
|
||||
|
||||
@HasPlaceholders @Language("SQL") protected String queryUpdatePlayerAdd, queryInsertBp, queryUpdateBp, queryGetPlayer, queryGetBP, querySyncCooldown; // DB queries
|
||||
@HasPlaceholders @Language("SQL") protected String queryDeleteOldCooldowns, queryDeleteOldBackpacks, queryGetUnsetOrInvalidUUIDs, queryFixUUIDs; // Maintenance queries
|
||||
@ -73,22 +76,32 @@ public SQL(@NotNull Minepacks plugin, @NotNull ConnectionProvider connectionProv
|
||||
|
||||
protected void loadSettings()
|
||||
{
|
||||
// Load table and field names
|
||||
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", 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);
|
||||
loadFields(); // Load table and field names
|
||||
|
||||
syncCooldown = plugin.getConfiguration().isCommandCooldownSyncEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String loadField(@NotNull String fieldName, @NotNull String metadata, @Nullable String currentValue)
|
||||
{
|
||||
if(fieldName.startsWith("table"))
|
||||
{
|
||||
return plugin.getConfiguration().getDBTable(fieldName.substring("table".length(), fieldName.length() - 1), currentValue);
|
||||
}
|
||||
else if(fieldName.startsWith("field"))
|
||||
{
|
||||
fieldName = fieldName.substring("field".length());
|
||||
if(fieldName.startsWith("Player") && !fieldName.equals("PlayerID"))
|
||||
{
|
||||
fieldName = fieldName.substring("Player".length());
|
||||
}
|
||||
else if(fieldName.startsWith("BP") || fieldName.startsWith("Cd"))
|
||||
fieldName = fieldName.substring(2);
|
||||
return plugin.getConfiguration().getDBFields(metadata + "." + fieldName, currentValue);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close()
|
||||
{
|
||||
@ -191,6 +204,7 @@ protected final void buildQueries()
|
||||
|
||||
updateQueriesForDialect();
|
||||
|
||||
queryDeleteOldBackpacks = queryDeleteOldBackpacks.replaceAll("\\{VarMaxAge}", maxAge + "");
|
||||
replacePlaceholders();
|
||||
}
|
||||
|
||||
@ -201,9 +215,9 @@ protected final void buildQueries()
|
||||
{
|
||||
query = query.replaceAll("(\\{\\w+})", "`$1`").replaceAll("`(\\{\\w+})`_(\\w+)", "`$1_$2`").replaceAll("fk_`(\\{\\w+})`_`(\\{\\w+})`_`(\\{\\w+})`", "`fk_$1_$2_$3`") // Fix name formatting
|
||||
.replaceAll("\\{TablePlayers}", tablePlayers).replaceAll("\\{FieldName}", fieldPlayerName).replaceAll("\\{FieldUUID}", fieldPlayerUUID).replaceAll("\\{FieldPlayerID}", fieldPlayerID) // Players
|
||||
.replaceAll("\\{TableBackpacks}", tableBackpacks).replaceAll("\\{FieldBPOwner}", fieldBpOwner).replaceAll("\\{FieldBPITS}", fieldBpIts) // Backpacks
|
||||
.replaceAll("\\{TableBackpacks}", tableBackpacks).replaceAll("\\{FieldBPOwner}", fieldBpOwnerID).replaceAll("\\{FieldBPITS}", fieldBpIts) // Backpacks
|
||||
.replaceAll("\\{FieldBPVersion}", fieldBpVersion).replaceAll("\\{FieldBPLastUpdate}", fieldBpLastUpdate) // Backpacks
|
||||
.replaceAll("\\{TableCooldowns}", tableCooldowns).replaceAll("\\{FieldCDPlayer}", fieldCdPlayer).replaceAll("\\{FieldCDTime}", fieldCdTime); // Cooldowns
|
||||
.replaceAll("\\{TableCooldowns}", tableCooldowns).replaceAll("\\{FieldCDPlayer}", fieldCdPlayerID).replaceAll("\\{FieldCDTime}", fieldCdTime); // Cooldowns
|
||||
if(query.matches(".*\\{\\w+}.*")) plugin.getLogger().warning("Found unresolved placeholder in query:\n" + query);
|
||||
return query;
|
||||
}
|
||||
@ -250,7 +264,7 @@ public void loadPlayer(final @NotNull MinepacksPlayerData player)
|
||||
{
|
||||
final int id = rs.getInt(fieldPlayerID);
|
||||
long cooldown = 0;
|
||||
if(syncCooldown) cooldown = rs.getTimestamp(fieldCdPlayer).getTime();
|
||||
if(syncCooldown) cooldown = rs.getTimestamp(fieldCdPlayerID).getTime();
|
||||
final long cd = cooldown;
|
||||
plugin.getServer().getScheduler().runTask(plugin, () -> player.setLoaded(id, cd));
|
||||
return;
|
||||
|
@ -39,7 +39,6 @@ public static String getDbFile(final @NotNull Minepacks plugin)
|
||||
return plugin.getDataFolder().getAbsolutePath() + File.separator + "backpack.db";
|
||||
}
|
||||
|
||||
//TODO add cooldown sync table
|
||||
public SQLite(final @NotNull Minepacks plugin, final @Nullable ConnectionProvider connectionProvider) throws SQLException
|
||||
{
|
||||
super(plugin, (connectionProvider == null) ? new SQLiteConnectionProvider(plugin.getLogger(), plugin.getDescription().getName(), getDbFile(plugin)) : connectionProvider);
|
||||
@ -48,17 +47,10 @@ public SQLite(final @NotNull Minepacks plugin, final @Nullable ConnectionProvide
|
||||
@Override
|
||||
protected void loadSettings()
|
||||
{
|
||||
// Set table and field names to fixed values to prevent users from destroying old databases.
|
||||
fieldPlayerID = "player_id";
|
||||
fieldBpOwner = "owner";
|
||||
//noinspection SpellCheckingInspection
|
||||
fieldBpIts = "itemstacks";
|
||||
// Set fixed settings
|
||||
useUUIDSeparators = false;
|
||||
|
||||
tablePlayers = "minepacks_players";
|
||||
tableBackpacks = "minepacks_backpacks";
|
||||
tableCooldowns = "minepacks_cooldowns";
|
||||
syncCooldown = plugin.getConfiguration().isCommandCooldownSyncEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -94,8 +86,8 @@ protected void checkDB()
|
||||
if(dbVersion.olderThan(new Version("3.0-ALPHA-SNAPSHOT")))
|
||||
{ // Copy old data to new tables
|
||||
plugin.getLogger().info(ConsoleColor.YELLOW + "Migrating data to new table structure. Please do not stop the server till it is done!" + ConsoleColor.RESET);
|
||||
doPHQuery(stmt, "INSERT OR IGNORE INTO {TablePlayers} SELECT * FROM `backpack_players`;");
|
||||
doPHQuery(stmt, "INSERT OR IGNORE INTO {TableBackpacks} ({FieldBPOwner}, {FieldBPITS}, {FieldBPVersion}, {FieldBPLastUpdate}) SELECT owner, itemstacks, version, lastupdate FROM backpacks WHERE owner IN (SELECT player_id FROM minepacks_players);");
|
||||
doPHQuery(stmt, "INSERT OR IGNORE INTO {TablePlayers} ({FieldPlayerID}, {FieldName}, {FieldUUID}) SELECT player_id, name, uuid FROM `backpack_players`;");
|
||||
doPHQuery(stmt, "INSERT OR IGNORE INTO {TableBackpacks} ({FieldBPOwner}, {FieldBPITS}, {FieldBPVersion}, {FieldBPLastUpdate}) SELECT owner, itemstacks, version, lastupdate FROM backpacks WHERE owner IN (SELECT {FieldPlayerID} FROM {TablePlayers});");
|
||||
plugin.getLogger().info(ConsoleColor.GREEN + "Data migrated successful!" + ConsoleColor.RESET);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
|
||||
public class Config extends Configuration implements DatabaseConnectionConfiguration, IUnCacheStrategyConfig
|
||||
{
|
||||
private static final int CONFIG_VERSION = 35, UPGRADE_THRESHOLD = CONFIG_VERSION, PRE_V2_VERSION = 20;
|
||||
private static final int CONFIG_VERSION = 36, UPGRADE_THRESHOLD = CONFIG_VERSION, PRE_V2_VERSION = 20;
|
||||
|
||||
public Config(JavaPlugin plugin)
|
||||
{
|
||||
@ -74,8 +74,15 @@ protected void doUpgrade(@NotNull YamlFileManager oldConfig)
|
||||
remappedKeys.put("WorldSettings.BockMode", "WorldSettings.BlacklistMode");
|
||||
}
|
||||
if(oldConfig.version().olderOrEqualThan(new Version(34))) remappedKeys.put("Database.Cache.UnCache.Strategy", "Database.Cache.UnCache.Strategie");
|
||||
if(oldConfig.version().olderOrEqualThan(new Version(35)))
|
||||
{
|
||||
remappedKeys.put("Database.Tables.User", "Database.Tables.Player");
|
||||
remappedKeys.put("Database.Tables.Fields.User.PlayerID", "Database.Tables.Fields.User.Player_ID");
|
||||
remappedKeys.put("Database.Tables.Fields.Backpack.OwnerID", "Database.Tables.Fields.Backpack.Owner_ID");
|
||||
remappedKeys.put("Database.Tables.Fields.Cooldown.PlayerID", "Database.Tables.Fields.Cooldown.Player_ID");
|
||||
}
|
||||
Collection<String> keysToKeep = oldConfig.getYamlE().getKeysFiltered("Database\\.SQL\\.(MaxLifetime|IdleTimeout)");
|
||||
keysToKeep.addAll(oldConfig.getYamlE().getKeysFiltered("Database\\.Tables\\.Fields\\..+"));
|
||||
//keysToKeep.addAll(oldConfig.getYamlE().getKeysFiltered("Database\\.Tables\\.Fields\\..+"));
|
||||
doUpgrade(oldConfig, remappedKeys, keysToKeep);
|
||||
}
|
||||
}
|
||||
@ -110,7 +117,7 @@ public void setDatabaseType(String type)
|
||||
}
|
||||
}
|
||||
|
||||
public @NotNull String getDBTable(final @NotNull String table, final @NotNull String defaultValue)
|
||||
public @NotNull String getDBTable(final @NotNull String table, final String defaultValue)
|
||||
{
|
||||
return getConfigE().getString("Database.Tables." + table, defaultValue);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user