From 7c6424e05cb06a69939632cc276693f39014b1a3 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Thu, 25 Jan 2024 10:59:18 -0500 Subject: [PATCH] fix #3653 - mySQL installation failing on Rows reserved word --- Oqtane.Database.MySQL/MySQLDatabase.cs | 8 ++++++++ Oqtane.Server/Databases/DatabaseBase.cs | 5 +++++ Oqtane.Server/Databases/Interfaces/IDatabase.cs | 2 ++ .../Migrations/EntityBuilders/BaseEntityBuilder.cs | 9 +++++++-- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Oqtane.Database.MySQL/MySQLDatabase.cs b/Oqtane.Database.MySQL/MySQLDatabase.cs index 1b3344a2..648e903e 100644 --- a/Oqtane.Database.MySQL/MySQLDatabase.cs +++ b/Oqtane.Database.MySQL/MySQLDatabase.cs @@ -75,6 +75,14 @@ namespace Oqtane.Database.MySQL return dr; } + public override string RewriteName(string name, bool isQuery) + { + if (name.ToLower() == "rows" && isQuery) + { + name = $"`{name}`"; // escape reserved word in SQL query + } + return name; + } public override DbContextOptionsBuilder UseDatabase(DbContextOptionsBuilder optionsBuilder, string connectionString) { diff --git a/Oqtane.Server/Databases/DatabaseBase.cs b/Oqtane.Server/Databases/DatabaseBase.cs index a9b91eaf..2342874f 100644 --- a/Oqtane.Server/Databases/DatabaseBase.cs +++ b/Oqtane.Server/Databases/DatabaseBase.cs @@ -66,6 +66,11 @@ namespace Oqtane.Databases return name; } + public virtual string RewriteName(string name, bool isQuery) + { + return name; + } + public virtual string RewriteValue(string value, string type) { return value; diff --git a/Oqtane.Server/Databases/Interfaces/IDatabase.cs b/Oqtane.Server/Databases/Interfaces/IDatabase.cs index 303fbc0f..3c68cf03 100644 --- a/Oqtane.Server/Databases/Interfaces/IDatabase.cs +++ b/Oqtane.Server/Databases/Interfaces/IDatabase.cs @@ -28,6 +28,8 @@ namespace Oqtane.Databases.Interfaces public string RewriteName(string name); + public string RewriteName(string name, bool isQuery); + public string RewriteValue(string value, string type); public void UpdateIdentityStoreTableNames(ModelBuilder builder); diff --git a/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs b/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs index 5bf10e0a..34d54a62 100644 --- a/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs +++ b/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs @@ -47,7 +47,12 @@ namespace Oqtane.Migrations.EntityBuilders private string RewriteName(string name) { - return ActiveDatabase.RewriteName(name); + return RewriteName(name, false); + } + + private string RewriteName(string name, bool isQuery) + { + return ActiveDatabase.RewriteName(name, isQuery); } private string RewriteValue(string value, string type) @@ -394,7 +399,7 @@ namespace Oqtane.Migrations.EntityBuilders public void UpdateColumn(string columnName, string value, string type, string condition) { - var updateSql = $"UPDATE {RewriteSqlEntityTableName(EntityTableName)} SET {RewriteName(columnName)} = {RewriteValue(value, type)} "; + var updateSql = $"UPDATE {RewriteSqlEntityTableName(EntityTableName)} SET {RewriteName(columnName, true)} = {RewriteValue(value, type)} "; if (!string.IsNullOrEmpty(condition)) { updateSql += $"WHERE {condition}";