refactor(db): Update SqlQueryBuilder references + Various refactors
Consolidates the creation of SQL query builders across multiple classes to ensure a unified approach for database operations. Replaces manual type checks and specific query creators with a generic method for better maintainability and to prevent errors. Improves code readability and reduces duplication, facilitating easier updates in the future.
This commit is contained in:
parent
27fde1f9ac
commit
084411f847
15 changed files with 399 additions and 488 deletions
|
|
@ -71,10 +71,8 @@ namespace TShockAPI.DB
|
|||
new SqlColumn("unlockedSuperCart", MySqlDbType.Int32),
|
||||
new SqlColumn("enabledSuperCart", MySqlDbType.Int32)
|
||||
);
|
||||
var creator = new SqlTableCreator(db,
|
||||
db.GetSqlType() == SqlType.Sqlite
|
||||
? (IQueryBuilder) new SqliteQueryCreator()
|
||||
: new MysqlQueryCreator());
|
||||
|
||||
SqlTableCreator creator = new(db, db.GetSqlQueryBuilder());
|
||||
creator.EnsureTableStructure(table);
|
||||
}
|
||||
|
||||
|
|
@ -84,59 +82,57 @@ namespace TShockAPI.DB
|
|||
|
||||
try
|
||||
{
|
||||
using (var reader = database.QueryReader("SELECT * FROM tsCharacter WHERE Account=@0", acctid))
|
||||
using var reader = database.QueryReader("SELECT * FROM tsCharacter WHERE Account=@0", acctid);
|
||||
if (reader.Read())
|
||||
{
|
||||
if (reader.Read())
|
||||
playerData.exists = true;
|
||||
playerData.health = reader.Get<int>("Health");
|
||||
playerData.maxHealth = reader.Get<int>("MaxHealth");
|
||||
playerData.mana = reader.Get<int>("Mana");
|
||||
playerData.maxMana = reader.Get<int>("MaxMana");
|
||||
List<NetItem> inventory = reader.Get<string>("Inventory").Split('~').Select(NetItem.Parse).ToList();
|
||||
if (inventory.Count < NetItem.MaxInventory)
|
||||
{
|
||||
playerData.exists = true;
|
||||
playerData.health = reader.Get<int>("Health");
|
||||
playerData.maxHealth = reader.Get<int>("MaxHealth");
|
||||
playerData.mana = reader.Get<int>("Mana");
|
||||
playerData.maxMana = reader.Get<int>("MaxMana");
|
||||
List<NetItem> inventory = reader.Get<string>("Inventory").Split('~').Select(NetItem.Parse).ToList();
|
||||
if (inventory.Count < NetItem.MaxInventory)
|
||||
{
|
||||
//TODO: unhardcode this - stop using magic numbers and use NetItem numbers
|
||||
//Set new armour slots empty
|
||||
inventory.InsertRange(67, new NetItem[2]);
|
||||
//Set new vanity slots empty
|
||||
inventory.InsertRange(77, new NetItem[2]);
|
||||
//Set new dye slots empty
|
||||
inventory.InsertRange(87, new NetItem[2]);
|
||||
//Set the rest of the new slots empty
|
||||
inventory.AddRange(new NetItem[NetItem.MaxInventory - inventory.Count]);
|
||||
}
|
||||
playerData.inventory = inventory.ToArray();
|
||||
playerData.extraSlot = reader.Get<int>("extraSlot");
|
||||
playerData.spawnX = reader.Get<int>("spawnX");
|
||||
playerData.spawnY = reader.Get<int>("spawnY");
|
||||
playerData.skinVariant = reader.Get<int?>("skinVariant");
|
||||
playerData.hair = reader.Get<int?>("hair");
|
||||
playerData.hairDye = (byte)reader.Get<int>("hairDye");
|
||||
playerData.hairColor = TShock.Utils.DecodeColor(reader.Get<int?>("hairColor"));
|
||||
playerData.pantsColor = TShock.Utils.DecodeColor(reader.Get<int?>("pantsColor"));
|
||||
playerData.shirtColor = TShock.Utils.DecodeColor(reader.Get<int?>("shirtColor"));
|
||||
playerData.underShirtColor = TShock.Utils.DecodeColor(reader.Get<int?>("underShirtColor"));
|
||||
playerData.shoeColor = TShock.Utils.DecodeColor(reader.Get<int?>("shoeColor"));
|
||||
playerData.hideVisuals = TShock.Utils.DecodeBoolArray(reader.Get<int?>("hideVisuals"));
|
||||
playerData.skinColor = TShock.Utils.DecodeColor(reader.Get<int?>("skinColor"));
|
||||
playerData.eyeColor = TShock.Utils.DecodeColor(reader.Get<int?>("eyeColor"));
|
||||
playerData.questsCompleted = reader.Get<int>("questsCompleted");
|
||||
playerData.usingBiomeTorches = reader.Get<int>("usingBiomeTorches");
|
||||
playerData.happyFunTorchTime = reader.Get<int>("happyFunTorchTime");
|
||||
playerData.unlockedBiomeTorches = reader.Get<int>("unlockedBiomeTorches");
|
||||
playerData.currentLoadoutIndex = reader.Get<int>("currentLoadoutIndex");
|
||||
playerData.ateArtisanBread = reader.Get<int>("ateArtisanBread");
|
||||
playerData.usedAegisCrystal = reader.Get<int>("usedAegisCrystal");
|
||||
playerData.usedAegisFruit = reader.Get<int>("usedAegisFruit");
|
||||
playerData.usedArcaneCrystal = reader.Get<int>("usedArcaneCrystal");
|
||||
playerData.usedGalaxyPearl = reader.Get<int>("usedGalaxyPearl");
|
||||
playerData.usedGummyWorm = reader.Get<int>("usedGummyWorm");
|
||||
playerData.usedAmbrosia = reader.Get<int>("usedAmbrosia");
|
||||
playerData.unlockedSuperCart = reader.Get<int>("unlockedSuperCart");
|
||||
playerData.enabledSuperCart = reader.Get<int>("enabledSuperCart");
|
||||
return playerData;
|
||||
//TODO: unhardcode this - stop using magic numbers and use NetItem numbers
|
||||
//Set new armour slots empty
|
||||
inventory.InsertRange(67, new NetItem[2]);
|
||||
//Set new vanity slots empty
|
||||
inventory.InsertRange(77, new NetItem[2]);
|
||||
//Set new dye slots empty
|
||||
inventory.InsertRange(87, new NetItem[2]);
|
||||
//Set the rest of the new slots empty
|
||||
inventory.AddRange(new NetItem[NetItem.MaxInventory - inventory.Count]);
|
||||
}
|
||||
playerData.inventory = inventory.ToArray();
|
||||
playerData.extraSlot = reader.Get<int>("extraSlot");
|
||||
playerData.spawnX = reader.Get<int>("spawnX");
|
||||
playerData.spawnY = reader.Get<int>("spawnY");
|
||||
playerData.skinVariant = reader.Get<int?>("skinVariant");
|
||||
playerData.hair = reader.Get<int?>("hair");
|
||||
playerData.hairDye = (byte)reader.Get<int>("hairDye");
|
||||
playerData.hairColor = TShock.Utils.DecodeColor(reader.Get<int?>("hairColor"));
|
||||
playerData.pantsColor = TShock.Utils.DecodeColor(reader.Get<int?>("pantsColor"));
|
||||
playerData.shirtColor = TShock.Utils.DecodeColor(reader.Get<int?>("shirtColor"));
|
||||
playerData.underShirtColor = TShock.Utils.DecodeColor(reader.Get<int?>("underShirtColor"));
|
||||
playerData.shoeColor = TShock.Utils.DecodeColor(reader.Get<int?>("shoeColor"));
|
||||
playerData.hideVisuals = TShock.Utils.DecodeBoolArray(reader.Get<int?>("hideVisuals"));
|
||||
playerData.skinColor = TShock.Utils.DecodeColor(reader.Get<int?>("skinColor"));
|
||||
playerData.eyeColor = TShock.Utils.DecodeColor(reader.Get<int?>("eyeColor"));
|
||||
playerData.questsCompleted = reader.Get<int>("questsCompleted");
|
||||
playerData.usingBiomeTorches = reader.Get<int>("usingBiomeTorches");
|
||||
playerData.happyFunTorchTime = reader.Get<int>("happyFunTorchTime");
|
||||
playerData.unlockedBiomeTorches = reader.Get<int>("unlockedBiomeTorches");
|
||||
playerData.currentLoadoutIndex = reader.Get<int>("currentLoadoutIndex");
|
||||
playerData.ateArtisanBread = reader.Get<int>("ateArtisanBread");
|
||||
playerData.usedAegisCrystal = reader.Get<int>("usedAegisCrystal");
|
||||
playerData.usedAegisFruit = reader.Get<int>("usedAegisFruit");
|
||||
playerData.usedArcaneCrystal = reader.Get<int>("usedArcaneCrystal");
|
||||
playerData.usedGalaxyPearl = reader.Get<int>("usedGalaxyPearl");
|
||||
playerData.usedGummyWorm = reader.Get<int>("usedGummyWorm");
|
||||
playerData.usedAmbrosia = reader.Get<int>("usedAmbrosia");
|
||||
playerData.unlockedSuperCart = reader.Get<int>("unlockedSuperCart");
|
||||
playerData.enabledSuperCart = reader.Get<int>("enabledSuperCart");
|
||||
return playerData;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -155,7 +151,7 @@ namespace TShockAPI.DB
|
|||
if (items.Count < NetItem.MaxInventory)
|
||||
items.AddRange(new NetItem[NetItem.MaxInventory - items.Count]);
|
||||
|
||||
string initialItems = String.Join("~", items.Take(NetItem.MaxInventory));
|
||||
string initialItems = string.Join("~", items.Take(NetItem.MaxInventory));
|
||||
try
|
||||
{
|
||||
database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);",
|
||||
|
|
@ -205,7 +201,7 @@ namespace TShockAPI.DB
|
|||
{
|
||||
database.Query(
|
||||
"INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, extraSlot, spawnX, spawnY, skinVariant, hair, hairDye, hairColor, pantsColor, shirtColor, underShirtColor, shoeColor, hideVisuals, skinColor, eyeColor, questsCompleted, usingBiomeTorches, happyFunTorchTime, unlockedBiomeTorches, currentLoadoutIndex,ateArtisanBread, usedAegisCrystal, usedAegisFruit, usedArcaneCrystal, usedGalaxyPearl, usedGummyWorm, usedAmbrosia, unlockedSuperCart, enabledSuperCart) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, @21, @22, @23, @24, @25, @26, @27, @28, @29, @30, @31, @32, @33);",
|
||||
player.Account.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), playerData.extraSlot, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.skinVariant, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor),TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex, player.TPlayer.ateArtisanBread ? 1 : 0, player.TPlayer.usedAegisCrystal ? 1 : 0, player.TPlayer.usedAegisFruit ? 1 : 0, player.TPlayer.usedArcaneCrystal ? 1 : 0, player.TPlayer.usedGalaxyPearl ? 1 : 0, player.TPlayer.usedGummyWorm ? 1 : 0, player.TPlayer.usedAmbrosia ? 1 : 0, player.TPlayer.unlockedSuperCart ? 1 : 0, player.TPlayer.enabledSuperCart ? 1 : 0);
|
||||
player.Account.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, string.Join("~", playerData.inventory), playerData.extraSlot, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.skinVariant, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor),TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex, player.TPlayer.ateArtisanBread ? 1 : 0, player.TPlayer.usedAegisCrystal ? 1 : 0, player.TPlayer.usedAegisFruit ? 1 : 0, player.TPlayer.usedArcaneCrystal ? 1 : 0, player.TPlayer.usedGalaxyPearl ? 1 : 0, player.TPlayer.usedGummyWorm ? 1 : 0, player.TPlayer.usedAmbrosia ? 1 : 0, player.TPlayer.unlockedSuperCart ? 1 : 0, player.TPlayer.enabledSuperCart ? 1 : 0);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -219,7 +215,7 @@ namespace TShockAPI.DB
|
|||
{
|
||||
database.Query(
|
||||
"UPDATE tsCharacter SET Health = @0, MaxHealth = @1, Mana = @2, MaxMana = @3, Inventory = @4, spawnX = @6, spawnY = @7, hair = @8, hairDye = @9, hairColor = @10, pantsColor = @11, shirtColor = @12, underShirtColor = @13, shoeColor = @14, hideVisuals = @15, skinColor = @16, eyeColor = @17, questsCompleted = @18, skinVariant = @19, extraSlot = @20, usingBiomeTorches = @21, happyFunTorchTime = @22, unlockedBiomeTorches = @23, currentLoadoutIndex = @24, ateArtisanBread = @25, usedAegisCrystal = @26, usedAegisFruit = @27, usedArcaneCrystal = @28, usedGalaxyPearl = @29, usedGummyWorm = @30, usedAmbrosia = @31, unlockedSuperCart = @32, enabledSuperCart = @33 WHERE Account = @5;",
|
||||
playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.Account.ID, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor), TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.skinVariant, player.TPlayer.extraAccessory ? 1 : 0, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex, player.TPlayer.ateArtisanBread ? 1 : 0, player.TPlayer.usedAegisCrystal ? 1 : 0, player.TPlayer.usedAegisFruit ? 1 : 0, player.TPlayer.usedArcaneCrystal ? 1 : 0, player.TPlayer.usedGalaxyPearl ? 1 : 0, player.TPlayer.usedGummyWorm ? 1 : 0, player.TPlayer.usedAmbrosia ? 1 : 0, player.TPlayer.unlockedSuperCart ? 1 : 0, player.TPlayer.enabledSuperCart ? 1 : 0);
|
||||
playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, string.Join("~", playerData.inventory), player.Account.ID, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor), TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.skinVariant, player.TPlayer.extraAccessory ? 1 : 0, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex, player.TPlayer.ateArtisanBread ? 1 : 0, player.TPlayer.usedAegisCrystal ? 1 : 0, player.TPlayer.usedAegisFruit ? 1 : 0, player.TPlayer.usedArcaneCrystal ? 1 : 0, player.TPlayer.usedGalaxyPearl ? 1 : 0, player.TPlayer.usedGummyWorm ? 1 : 0, player.TPlayer.usedAmbrosia ? 1 : 0, player.TPlayer.unlockedSuperCart ? 1 : 0, player.TPlayer.enabledSuperCart ? 1 : 0);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -280,7 +276,7 @@ namespace TShockAPI.DB
|
|||
playerData.maxHealth,
|
||||
playerData.mana,
|
||||
playerData.maxMana,
|
||||
String.Join("~", playerData.inventory),
|
||||
string.Join("~", playerData.inventory),
|
||||
playerData.extraSlot,
|
||||
playerData.spawnX,
|
||||
playerData.spawnX,
|
||||
|
|
@ -326,7 +322,7 @@ namespace TShockAPI.DB
|
|||
playerData.maxHealth,
|
||||
playerData.mana,
|
||||
playerData.maxMana,
|
||||
String.Join("~", playerData.inventory),
|
||||
string.Join("~", playerData.inventory),
|
||||
player.Account.ID,
|
||||
playerData.spawnX,
|
||||
playerData.spawnX,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue