From 5706eaf1385a3b0d7c8ce10b3b196c37c9159feb Mon Sep 17 00:00:00 2001 From: Patrikkk Date: Sun, 24 May 2020 02:02:50 +0200 Subject: [PATCH] Fix SQL incompatibility. This is the real fix for MySql8 compatibility, without breaking SQL. This will not affect current databases, all that happens is that we actually escape all column names on the table creation query. This should be standarized along the whole query builder. --- TShockAPI/DB/IQueryBuilder.cs | 8 ++++---- TShockAPI/DB/RegionManager.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/TShockAPI/DB/IQueryBuilder.cs b/TShockAPI/DB/IQueryBuilder.cs index 825a2e4a..19af36a9 100644 --- a/TShockAPI/DB/IQueryBuilder.cs +++ b/TShockAPI/DB/IQueryBuilder.cs @@ -192,12 +192,12 @@ namespace TShockAPI.DB var columns = table.Columns.Select( c => - "{0} {1} {2} {3} {4} {5}".SFormat(c.Name, DbTypeToString(c.Type, c.Length), + "`{0}` {1} {2} {3} {4} {5}".SFormat(c.Name, DbTypeToString(c.Type, c.Length), c.Primary ? "PRIMARY KEY" : "", c.AutoIncrement ? "AUTO_INCREMENT" : "", c.NotNull ? "NOT NULL" : "", c.DefaultCurrentTimestamp ? "DEFAULT CURRENT_TIMESTAMP" : "")); - var uniques = table.Columns.Where(c => c.Unique).Select(c => c.Name); + var uniques = table.Columns.Where(c => c.Unique).Select(c => $"`{c.Name}`"); return "CREATE TABLE {0} ({1} {2})".SFormat(EscapeTableName(table.Name), string.Join(", ", columns), uniques.Count() > 0 ? ", UNIQUE({0})".SFormat(string.Join(", ", uniques)) @@ -299,7 +299,7 @@ namespace TShockAPI.DB var create = CreateTable(to); // combine all columns in the 'from' variable excluding ones that aren't in the 'to' variable. // exclude the ones that aren't in 'to' variable because if the column is deleted, why try to import the data? - var columns = string.Join(", ", from.Columns.Where(c => to.Columns.Any(c2 => c2.Name == c.Name)).Select(c => c.Name)); + var columns = string.Join(", ", from.Columns.Where(c => to.Columns.Any(c2 => c2.Name == c.Name)).Select(c => $"`{c.Name}`")); var insert = "INSERT INTO {0} ({1}) SELECT {1} FROM {2}".SFormat(escapedTable, columns, tmpTable); var drop = "DROP TABLE {0}".SFormat(tmpTable); return "{0}; {1}; {2}; {3};".SFormat(alter, create, insert, drop); @@ -396,7 +396,7 @@ namespace TShockAPI.DB if (0 == wheres.Count) return string.Empty; - return "WHERE {0}".SFormat(string.Join(", ", wheres.Select(v => v.Name + " = " + v.Value))); + return "WHERE {0}".SFormat(string.Join(", ", wheres.Select(v => $"{v.Name}" + " = " + v.Value))); } } } diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index ee62b8d3..eaf8f1ba 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -51,7 +51,7 @@ namespace TShockAPI.DB new SqlColumn("WorldID", MySqlDbType.VarChar, 50) { Unique = true }, new SqlColumn("UserIds", MySqlDbType.Text), new SqlColumn("Protected", MySqlDbType.Int32), - new SqlColumn("`Groups`", MySqlDbType.Text), + new SqlColumn("Groups", MySqlDbType.Text), new SqlColumn("Owner", MySqlDbType.VarChar, 50), new SqlColumn("Z", MySqlDbType.Int32){ DefaultValue = "0" } );