From b720cd61229ee8d8ae0730732773e2bf2f0b88d7 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 5 Aug 2018 22:39:55 +0100 Subject: [PATCH] Update DB to version 23: Make EntityFramework happy with existing database schema. --- Cicm.Database/Cicm.Database.csproj | 5 +- Cicm.Database/Operations/Company.cs | 2 +- Cicm.Database/Operations/Iso3166.cs | 4 +- Cicm.Database/Operations/Operations.cs | 2 +- Cicm.Database/Operations/Update.cs | 77 +++++++++++++++++++++++ Cicm.Database/Schemas/Iso3166.cs | 2 +- cicm_web/Controllers/CompanyController.cs | 2 +- cicm_web/Models/Processor.cs | 1 + cicm_web/cicm_web.csproj | 2 +- 9 files changed, 89 insertions(+), 8 deletions(-) diff --git a/Cicm.Database/Cicm.Database.csproj b/Cicm.Database/Cicm.Database.csproj index 74412869..d0d2ba9a 100644 --- a/Cicm.Database/Cicm.Database.csproj +++ b/Cicm.Database/Cicm.Database.csproj @@ -3,6 +3,9 @@ netcoreapp2.0 - + + + + \ No newline at end of file diff --git a/Cicm.Database/Operations/Company.cs b/Cicm.Database/Operations/Company.cs index 1d14027d..3bcda67b 100644 --- a/Cicm.Database/Operations/Company.cs +++ b/Cicm.Database/Operations/Company.cs @@ -438,7 +438,7 @@ namespace Cicm.Database ? DateTime.MinValue : Convert.ToDateTime(dataRow["sold"].ToString()), SoldTo = dataRow["sold_to"] == DBNull.Value ? null : GetCompany((int)dataRow["sold_to"]), - Country = dataRow["country"] == DBNull.Value ? null : GetIso3166((ushort)dataRow["country"]) + Country = dataRow["country"] == DBNull.Value ? null : GetIso3166((short)dataRow["country"]) }; if(GetCompanyLogosByCompany(out List logos, entry.Id)) diff --git a/Cicm.Database/Operations/Iso3166.cs b/Cicm.Database/Operations/Iso3166.cs index c0e7fbd0..0065ec13 100644 --- a/Cicm.Database/Operations/Iso3166.cs +++ b/Cicm.Database/Operations/Iso3166.cs @@ -115,7 +115,7 @@ namespace Cicm.Database /// /// Id /// ISO 3166-1 code with specified id, null if not found or error - public Iso3166 GetIso3166(ushort id) + public Iso3166 GetIso3166(short id) { #if DEBUG Console.WriteLine("Getting ISO 3166-1 code with id {0}...", id); @@ -270,7 +270,7 @@ namespace Cicm.Database foreach(DataRow dataRow in dataTable.Rows) { - Iso3166 entry = new Iso3166 {Id = (ushort)dataRow["id"], Name = (string)dataRow["name"]}; + Iso3166 entry = new Iso3166 {Id = (short)dataRow["id"], Name = (string)dataRow["name"]}; entries.Add(entry); } diff --git a/Cicm.Database/Operations/Operations.cs b/Cicm.Database/Operations/Operations.cs index 136bee7d..a47666a2 100644 --- a/Cicm.Database/Operations/Operations.cs +++ b/Cicm.Database/Operations/Operations.cs @@ -35,7 +35,7 @@ namespace Cicm.Database public partial class Operations { /// Last known database version - const int DB_VERSION = 22; + const int DB_VERSION = 23; /// The column with this value indicates there is no item of this type. public const int DB_NONE = -1; /// diff --git a/Cicm.Database/Operations/Update.cs b/Cicm.Database/Operations/Update.cs index eccdbbd0..0e98a267 100644 --- a/Cicm.Database/Operations/Update.cs +++ b/Cicm.Database/Operations/Update.cs @@ -179,6 +179,11 @@ namespace Cicm.Database UpdateDatabaseToV22(); break; } + case 22: + { + UpdateDatabaseToV23(); + break; + } } OptimizeDatabase(); @@ -2544,6 +2549,78 @@ namespace Cicm.Database dbCmd.Dispose(); } + void UpdateDatabaseToV23() + { + Console.WriteLine("Updating database to version 23"); + + Console.WriteLine("Altering `browser_tests` primary key"); + IDbCommand dbCmd = dbCon.CreateCommand(); + IDbTransaction trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = "ALTER TABLE browser_tests MODIFY id int NOT NULL auto_increment;"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Dropping foreign key between `iso3166_1_numeric` and `companies`"); + dbCmd = dbCon.CreateCommand(); + trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = "ALTER TABLE companies DROP FOREIGN KEY `fk_companies_country`;"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Altering `iso3166_1_numeric` primary key"); + dbCmd = dbCon.CreateCommand(); + trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = "ALTER TABLE iso3166_1_numeric MODIFY id smallint(3) NOT NULL;"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Altering `country` column in `companies`"); + dbCmd = dbCon.CreateCommand(); + trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = + "ALTER TABLE companies MODIFY country smallint(3);"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Re-adding new foreign keys to table `companies`"); + dbCmd = dbCon.CreateCommand(); + trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = + "ALTER TABLE `companies` ADD FOREIGN KEY `fk_companies_country` (country) REFERENCES `iso3166_1_numeric` (`id`);"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Adding primary keys to several tables"); + dbCmd = dbCon.CreateCommand(); + trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = + "ALTER TABLE gpus_by_machine ADD id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT;\n" + + "ALTER TABLE memory_by_machine ADD id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT;\n" + + "ALTER TABLE processors_by_machine ADD id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT;\n" + + "ALTER TABLE resolutions_by_gpu ADD id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT;\n" + + "ALTER TABLE sound_by_machine ADD id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT;\n" + + "ALTER TABLE storage_by_machine ADD id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT;"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Setting new database version to 23..."); + dbCmd = dbCon.CreateCommand(); + dbCmd.CommandText = "INSERT INTO cicm_db (version) VALUES ('23')"; + dbCmd.ExecuteNonQuery(); + dbCmd.Dispose(); + } void OptimizeDatabase() { IDbCommand dbCmd = dbCon.CreateCommand(); diff --git a/Cicm.Database/Schemas/Iso3166.cs b/Cicm.Database/Schemas/Iso3166.cs index 921b0704..6de21770 100644 --- a/Cicm.Database/Schemas/Iso3166.cs +++ b/Cicm.Database/Schemas/Iso3166.cs @@ -34,7 +34,7 @@ namespace Cicm.Database.Schemas public class Iso3166 { /// ISO assigned ID - public ushort Id; + public short Id; /// English name public string Name; } diff --git a/cicm_web/Controllers/CompanyController.cs b/cicm_web/Controllers/CompanyController.cs index ac64db12..b696933d 100644 --- a/cicm_web/Controllers/CompanyController.cs +++ b/cicm_web/Controllers/CompanyController.cs @@ -68,7 +68,7 @@ namespace cicm_web.Controllers return View(company); } - public IActionResult ByCountry(ushort id) + public IActionResult ByCountry(short id) { Iso3166 iso3166 = Program.Database.Operations.GetIso3166(id); diff --git a/cicm_web/Models/Processor.cs b/cicm_web/Models/Processor.cs index 37cdbe18..ae622b92 100644 --- a/cicm_web/Models/Processor.cs +++ b/cicm_web/Models/Processor.cs @@ -67,6 +67,7 @@ namespace cicm_web.Models public static Processor GetItem(int id) { Cicm.Database.Schemas.Processor dbItem = Program.Database?.Operations.GetProcessor(id); + return dbItem == null ? null : new Processor diff --git a/cicm_web/cicm_web.csproj b/cicm_web/cicm_web.csproj index 41acd11c..1f34b1b6 100644 --- a/cicm_web/cicm_web.csproj +++ b/cicm_web/cicm_web.csproj @@ -2,7 +2,7 @@ netcoreapp2.0 - 3.0.99.232 + 3.0.99.271 Canary Islands Computer Museum Copyright © 2003-2018 Natalia Portillo Canary Islands Computer Museum Website