From 759439375dcd7b8d7fe202351e6ef7575443e220 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 17 Apr 2018 07:13:50 +0100 Subject: [PATCH] Update to database version 7. --- Cicm.Database/Operations/Company.cs | 19 +++-- Cicm.Database/Operations/Init.cs | 44 +++++----- Cicm.Database/Operations/Operations.cs | 2 +- Cicm.Database/Operations/Update.cs | 34 ++++++++ Cicm.Database/Schemas/Company.cs | 2 + Cicm.Database/Schemas/Enums.cs | 16 ++++ Cicm.Database/Schemas/Sql/V7.cs | 112 +++++++++++++++++++++++++ cicm_web/cicm_web.csproj | 2 +- 8 files changed, 201 insertions(+), 30 deletions(-) create mode 100644 Cicm.Database/Schemas/Sql/V7.cs diff --git a/Cicm.Database/Operations/Company.cs b/Cicm.Database/Operations/Company.cs index 7256c782..f92b3002 100644 --- a/Cicm.Database/Operations/Company.cs +++ b/Cicm.Database/Operations/Company.cs @@ -178,10 +178,11 @@ namespace Cicm.Database IDbTransaction trans = dbCon.BeginTransaction(); dbcmd.Transaction = trans; - const string SQL = "INSERT INTO companies (name, founded, website, twitter, facebook, sold, sold_to, " + - "address, city, province, postal_code, country) VALUES (@name, @founded, @website, " + - "@twitter, @facebook, @sold, @sold_to, @address, @city, @province, @postal_code, " + - "@country)"; + const string SQL = + "INSERT INTO companies (name, founded, website, twitter, facebook, sold, sold_to, " + + "address, city, province, postal_code, country, status) VALUES (@name, @founded, @website, " + + "@twitter, @facebook, @sold, @sold_to, @address, @city, @province, @postal_code, " + + "@country, status)"; dbcmd.CommandText = SQL; @@ -216,7 +217,7 @@ namespace Cicm.Database string sql = "UPDATE companies SET name = @name, founded = @founded, website = @website, twitter = @twitter, " + "facebook = @facebook, sold = @sold, sold_to = @sold_to, address = @address, city = @city, " + - "province = @province, postal_code = @postal_code, country = @country, " + + "province = @province, postal_code = @postal_code, country = @country, status = @status " + $"WHERE id = {entry.Id}"; dbcmd.CommandText = sql; @@ -270,6 +271,7 @@ namespace Cicm.Database IDbDataParameter param10 = dbcmd.CreateParameter(); IDbDataParameter param11 = dbcmd.CreateParameter(); IDbDataParameter param12 = dbcmd.CreateParameter(); + IDbDataParameter param13 = dbcmd.CreateParameter(); param1.ParameterName = "@name"; param2.ParameterName = "@founded"; @@ -283,6 +285,7 @@ namespace Cicm.Database param10.ParameterName = "@province"; param11.ParameterName = "@postal_code"; param12.ParameterName = "@country"; + param13.ParameterName = "@status"; param1.DbType = DbType.String; param2.DbType = DbType.DateTime; @@ -296,6 +299,7 @@ namespace Cicm.Database param10.DbType = DbType.String; param11.DbType = DbType.String; param12.DbType = DbType.UInt16; + param13.DbType = DbType.UInt32; param1.Value = entry.Name; param2.Value = entry.Founded; @@ -319,6 +323,7 @@ namespace Cicm.Database param11.Value = entry.PostalCode; if(entry.Country != null) param12.Value = entry.Country.Id; else param12.Value = null; + param13.Value = entry.Status; dbcmd.Parameters.Add(param1); dbcmd.Parameters.Add(param2); @@ -332,6 +337,7 @@ namespace Cicm.Database dbcmd.Parameters.Add(param10); dbcmd.Parameters.Add(param11); dbcmd.Parameters.Add(param12); + dbcmd.Parameters.Add(param13); return dbcmd; } @@ -352,7 +358,8 @@ namespace Cicm.Database Address = dataRow["address"].ToString(), City = dataRow["city"].ToString(), Province = dataRow["province"].ToString(), - PostalCode = dataRow["postal_code"].ToString() + PostalCode = dataRow["postal_code"].ToString(), + Status = (CompanyStatus)int.Parse(dataRow["status"].ToString()) }; if(!string.IsNullOrWhiteSpace(dataRow["founded"].ToString())) diff --git a/Cicm.Database/Operations/Init.cs b/Cicm.Database/Operations/Init.cs index b171bfb7..676f5e89 100644 --- a/Cicm.Database/Operations/Init.cs +++ b/Cicm.Database/Operations/Init.cs @@ -49,91 +49,91 @@ namespace Cicm.Database IDbCommand dbCmd = dbCon.CreateCommand(); Console.WriteLine("Creating table `admins`"); - dbCmd.CommandText = V6.Admins; + dbCmd.CommandText = V7.Admins; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `browser_tests`"); - dbCmd.CommandText = V6.BrowserTests; + dbCmd.CommandText = V7.BrowserTests; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `cicm_db`"); - dbCmd.CommandText = V6.CicmDb; + dbCmd.CommandText = V7.CicmDb; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `companies`"); - dbCmd.CommandText = V6.Companies; + dbCmd.CommandText = V7.Companies; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `computers`"); - dbCmd.CommandText = V6.Computers; + dbCmd.CommandText = V7.Computers; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `consoles`"); - dbCmd.CommandText = V6.Consoles; + dbCmd.CommandText = V7.Consoles; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `disk_formats`"); - dbCmd.CommandText = V6.DiskFormats; + dbCmd.CommandText = V7.DiskFormats; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `forbidden`"); - dbCmd.CommandText = V6.Forbidden; + dbCmd.CommandText = V7.Forbidden; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `gpus`"); - dbCmd.CommandText = V6.Gpus; + dbCmd.CommandText = V7.Gpus; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `log`"); - dbCmd.CommandText = V6.Logs; + dbCmd.CommandText = V7.Logs; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `money_donations`"); - dbCmd.CommandText = V6.MoneyDonations; + dbCmd.CommandText = V7.MoneyDonations; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `music_synths`"); - dbCmd.CommandText = V6.MusicSynths; + dbCmd.CommandText = V7.MusicSynths; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `news`"); - dbCmd.CommandText = V6.News; + dbCmd.CommandText = V7.News; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `owned_computers`"); - dbCmd.CommandText = V6.OwnedComputers; + dbCmd.CommandText = V7.OwnedComputers; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `owned_consoles`"); - dbCmd.CommandText = V6.OwnedConsoles; + dbCmd.CommandText = V7.OwnedConsoles; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `processors`"); - dbCmd.CommandText = V6.Processors; + dbCmd.CommandText = V7.Processors; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `sound_synths`"); - dbCmd.CommandText = V6.SoundSynths; + dbCmd.CommandText = V7.SoundSynths; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `iso3166_1_numeric`"); - dbCmd.CommandText = V6.Iso3166Numeric; + dbCmd.CommandText = V7.Iso3166Numeric; dbCmd.ExecuteNonQuery(); Console.WriteLine("Filling table `iso3166_1_numeric`"); - dbCmd.CommandText = V6.Iso3166NumericValues; + dbCmd.CommandText = V7.Iso3166NumericValues; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating foreign keys for table `companies`"); - dbCmd.CommandText = V6.CompaniesForeignKeys; + dbCmd.CommandText = V7.CompaniesForeignKeys; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating foreign keys for table `computers`"); - dbCmd.CommandText = V6.ComputersForeignKeys; + dbCmd.CommandText = V7.ComputersForeignKeys; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating foreign keys for table `consoles`"); - dbCmd.CommandText = V6.ConsolesForeignKeys; + dbCmd.CommandText = V7.ConsolesForeignKeys; dbCmd.ExecuteNonQuery(); return true; diff --git a/Cicm.Database/Operations/Operations.cs b/Cicm.Database/Operations/Operations.cs index 2ee2052e..d698545d 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 = 6; + const int DB_VERSION = 7; readonly IDbConnection dbCon; readonly IDbCore dbCore; diff --git a/Cicm.Database/Operations/Update.cs b/Cicm.Database/Operations/Update.cs index 3206d48a..e9c95975 100644 --- a/Cicm.Database/Operations/Update.cs +++ b/Cicm.Database/Operations/Update.cs @@ -98,6 +98,11 @@ namespace Cicm.Database UpdateDatabaseToV6(); break; } + case 6: + { + UpdateDatabaseToV7(); + break; + } } OptimizeDatabase(); @@ -745,6 +750,35 @@ namespace Cicm.Database dbCmd.Dispose(); } + void UpdateDatabaseToV7() + { + Console.WriteLine("Updating database to version 7"); + + Console.WriteLine("Adding new columns to table `companies`"); + IDbCommand dbCmd = dbCon.CreateCommand(); + IDbTransaction trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = "ALTER TABLE `companies` ADD COLUMN `status` INT NOT NULL;"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Adding new indexes to table `companies`"); + dbCmd = dbCon.CreateCommand(); + trans = dbCon.BeginTransaction(); + dbCmd.Transaction = trans; + dbCmd.CommandText = "CREATE INDEX `idx_companies_status` ON `companies` (`status`);"; + dbCmd.ExecuteNonQuery(); + trans.Commit(); + dbCmd.Dispose(); + + Console.WriteLine("Setting new database version to 7..."); + dbCmd = dbCon.CreateCommand(); + dbCmd.CommandText = "INSERT INTO cicm_db (version) VALUES ('7')"; + dbCmd.ExecuteNonQuery(); + dbCmd.Dispose(); + } + void OptimizeDatabase() { IDbCommand dbCmd = dbCon.CreateCommand(); diff --git a/Cicm.Database/Schemas/Company.cs b/Cicm.Database/Schemas/Company.cs index b1951dfa..172f0ea9 100644 --- a/Cicm.Database/Schemas/Company.cs +++ b/Cicm.Database/Schemas/Company.cs @@ -57,6 +57,8 @@ namespace Cicm.Database.Schemas public DateTime Sold; /// Company it was sold to public Company SoldTo; + /// Company status + public CompanyStatus Status; /// Twitter account public string Twitter; /// Website diff --git a/Cicm.Database/Schemas/Enums.cs b/Cicm.Database/Schemas/Enums.cs index a0f608d1..d1c47db4 100644 --- a/Cicm.Database/Schemas/Enums.cs +++ b/Cicm.Database/Schemas/Enums.cs @@ -49,4 +49,20 @@ namespace Cicm.Database.Schemas NotTested = 2, TestedBad = 3 } + + public enum CompanyStatus + { + /// Status is unknown or not set + Unknown = 0, + /// Company is still existing + Active = 1, + /// Company was sold, totally or partially + Sold = 2, + /// Company merged with another company to make yet another company + Merged = 3, + /// Company filled for bankruptcy + Bankrupt = 4, + /// Company ceased operations for reasons different to bankruptcy + Defunct = 5 + } } \ No newline at end of file diff --git a/Cicm.Database/Schemas/Sql/V7.cs b/Cicm.Database/Schemas/Sql/V7.cs new file mode 100644 index 00000000..e9f8118a --- /dev/null +++ b/Cicm.Database/Schemas/Sql/V7.cs @@ -0,0 +1,112 @@ +/****************************************************************************** +// Canary Islands Computer Museum Website +// ---------------------------------------------------------------------------- +// +// Filename : V7.cs +// Author(s) : Natalia Portillo +// +// --[ Description ] ---------------------------------------------------------- +// +// Contains SQL queries to create the database version 7. +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2003-2018 Natalia Portillo +*******************************************************************************/ + +namespace Cicm.Database.Schemas.Sql +{ + public static class V7 + { + public static readonly string Admins = V5.Admins; + + public static readonly string BrowserTests = V5.BrowserTests; + + public static readonly string CicmDb = "CREATE TABLE `cicm_db` (\n" + + "`id` int(11) NOT NULL AUTO_INCREMENT,\n" + + "`version` int(11) NOT NULL,\n" + + "`updated` datetime DEFAULT CURRENT_TIMESTAMP,\n" + + "PRIMARY KEY (`id`)\n" + ");\n" + + "INSERT INTO cicm_db (version) VALUES ('7');"; + + public static readonly string Companies = "CREATE TABLE `companies` (\n" + + "`id` int(11) NOT NULL AUTO_INCREMENT,\n" + + "`name` varchar(128) NOT NULL DEFAULT '',\n" + + "`founded` datetime DEFAULT NULL,\n" + + "`website` varchar(255) DEFAULT NULL,\n" + + "`twitter` varchar(45) DEFAULT NULL,\n" + + "`facebook` varchar(45) DEFAULT NULL,\n" + + "`sold` datetime DEFAULT NULL,\n" + + "`sold_to` int(11) DEFAULT NULL,\n" + + "`address` varchar(80) DEFAULT NULL,\n" + + "`city` varchar(80) DEFAULT NULL,\n" + + "`province` varchar(80) DEFAULT NULL,\n" + + "`postal_code` varchar(25) DEFAULT NULL,\n" + + "`country` smallint(3) UNSIGNED ZEROFILL DEFAULT NULL,\n" + + "`status` int NOT NULL,\n" + + "PRIMARY KEY (`id`),\n" + + "KEY `idx_companies_name` (`name`),\n" + + "KEY `idx_companies_founded` (`founded`),\n" + + "KEY `idx_companies_website` (`website`),\n" + + "KEY `idx_companies_twitter` (`twitter`),\n" + + "KEY `idx_companies_facebook` (`facebook`),\n" + + "KEY `idx_companies_sold` (`sold`),\n" + + "KEY `idx_companies_sold_to` (`sold_to`),\n" + + "KEY `idx_companies_address` (`address`),\n" + + "KEY `idx_companies_city` (`city`),\n" + + "KEY `idx_companies_province` (`province`),\n" + + "KEY `idx_companies_postal_code` (`postal_code`),\n" + + "KEY `idx_companies_status` (`status`),\n" + + "KEY `idx_companies_country` (`country`));"; + + public static readonly string Computers = V6.Computers; + + public static readonly string Consoles = V6.Consoles; + + public static readonly string DiskFormats = V6.DiskFormats; + + public static readonly string Forbidden = V6.Forbidden; + + public static readonly string Gpus = V6.Gpus; + + public static readonly string Logs = V6.Logs; + + public static readonly string MoneyDonations = V6.MoneyDonations; + + public static readonly string MusicSynths = V6.MusicSynths; + + public static readonly string News = V6.News; + + public static readonly string OwnedComputers = V6.OwnedComputers; + + public static readonly string OwnedConsoles = V6.OwnedConsoles; + + public static readonly string Processors = V6.Processors; + + public static readonly string SoundSynths = V6.SoundSynths; + + public static readonly string ComputersForeignKeys = V6.ComputersForeignKeys; + + public static readonly string ConsolesForeignKeys = V6.ConsolesForeignKeys; + + public static readonly string Iso3166Numeric = V6.Iso3166Numeric; + + public static readonly string Iso3166NumericValues = V6.Iso3166NumericValues; + + public static readonly string CompaniesForeignKeys = V6.CompaniesForeignKeys; + } +} \ No newline at end of file diff --git a/cicm_web/cicm_web.csproj b/cicm_web/cicm_web.csproj index 6b7c65eb..5d2f6db9 100644 --- a/cicm_web/cicm_web.csproj +++ b/cicm_web/cicm_web.csproj @@ -2,7 +2,7 @@ netcoreapp2.0 - 3.0.99.118 + 3.0.99.121 Canary Islands Computer Museum Copyright © 2003-2018 Natalia Portillo Canary Islands Computer Museum Website