diff --git a/Cicm.Database/Operations/Init.cs b/Cicm.Database/Operations/Init.cs index d46fe6df..0525b8bb 100644 --- a/Cicm.Database/Operations/Init.cs +++ b/Cicm.Database/Operations/Init.cs @@ -49,71 +49,79 @@ namespace Cicm.Database IDbCommand dbCmd = dbCon.CreateCommand(); Console.WriteLine("Creating table `admins`"); - dbCmd.CommandText = V4.Admins; + dbCmd.CommandText = V5.Admins; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `browser_tests`"); - dbCmd.CommandText = V4.BrowserTests; + dbCmd.CommandText = V5.BrowserTests; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `cicm_db`"); - dbCmd.CommandText = V4.CicmDb; + dbCmd.CommandText = V5.CicmDb; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `companies`"); - dbCmd.CommandText = V4.Companies; + dbCmd.CommandText = V5.Companies; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `computers`"); - dbCmd.CommandText = V4.Computers; + dbCmd.CommandText = V5.Computers; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `consoles`"); - dbCmd.CommandText = V4.Consoles; + dbCmd.CommandText = V5.Consoles; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `disk_formats`"); - dbCmd.CommandText = V4.DiskFormats; + dbCmd.CommandText = V5.DiskFormats; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `forbidden`"); - dbCmd.CommandText = V4.Forbidden; + dbCmd.CommandText = V5.Forbidden; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `gpus`"); - dbCmd.CommandText = V4.Gpus; + dbCmd.CommandText = V5.Gpus; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `log`"); - dbCmd.CommandText = V4.Logs; + dbCmd.CommandText = V5.Logs; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `money_donations`"); - dbCmd.CommandText = V4.MoneyDonations; + dbCmd.CommandText = V5.MoneyDonations; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `music_synths`"); - dbCmd.CommandText = V4.MusicSynths; + dbCmd.CommandText = V5.MusicSynths; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `news`"); - dbCmd.CommandText = V4.News; + dbCmd.CommandText = V5.News; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `owned_computers`"); - dbCmd.CommandText = V4.OwnedComputers; + dbCmd.CommandText = V5.OwnedComputers; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `owned_consoles`"); - dbCmd.CommandText = V4.OwnedConsoles; + dbCmd.CommandText = V5.OwnedConsoles; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `processors`"); - dbCmd.CommandText = V4.Processors; + dbCmd.CommandText = V5.Processors; dbCmd.ExecuteNonQuery(); Console.WriteLine("Creating table `sound_synths`"); - dbCmd.CommandText = V4.SoundSynths; + dbCmd.CommandText = V5.SoundSynths; + dbCmd.ExecuteNonQuery(); + + Console.WriteLine("Creating foreign keys for table `computers`"); + dbCmd.CommandText = V5.ComputersForeignKeys; + dbCmd.ExecuteNonQuery(); + + Console.WriteLine("Creating foreign keys for table `consoles`"); + dbCmd.CommandText = V5.ConsolesForeignKeys; dbCmd.ExecuteNonQuery(); return true; diff --git a/Cicm.Database/Operations/Operations.cs b/Cicm.Database/Operations/Operations.cs index 286ad780..e753a3c6 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 = 4; + const int DB_VERSION = 5; readonly IDbConnection dbCon; readonly IDbCore dbCore; diff --git a/Cicm.Database/Operations/Update.cs b/Cicm.Database/Operations/Update.cs index cfe298c9..04b8bdce 100644 --- a/Cicm.Database/Operations/Update.cs +++ b/Cicm.Database/Operations/Update.cs @@ -32,6 +32,8 @@ using System; using System.Collections.Generic; using System.Data; using System.IO; +using Cicm.Database.Schemas.Sql; +using MySql.Data.MySqlClient; namespace Cicm.Database { @@ -87,6 +89,11 @@ namespace Cicm.Database UpdateDatabaseV3ToV4(); break; } + case 4: + { + UpdateDatabaseV4ToV5(); + break; + } } OptimizeDatabase(); @@ -633,6 +640,29 @@ namespace Cicm.Database dbCmd.Dispose(); } + void UpdateDatabaseV4ToV5() + { + Console.WriteLine("Updating database to version 5"); + + Console.WriteLine("Creating foreign keys for table `computers`"); + IDbCommand dbCmd = dbCon.CreateCommand(); + dbCmd.CommandText = V5.ComputersForeignKeys; + dbCmd.ExecuteNonQuery(); + dbCmd.Dispose(); + + Console.WriteLine("Creating foreign keys for table `consoles`"); + dbCmd = dbCon.CreateCommand(); + dbCmd.CommandText = V5.ConsolesForeignKeys; + dbCmd.ExecuteNonQuery(); + dbCmd.Dispose(); + + Console.WriteLine("Setting new database version to 5..."); + dbCmd = dbCon.CreateCommand(); + dbCmd.CommandText = "INSERT INTO cicm_db (version) VALUES ('5')"; + dbCmd.ExecuteNonQuery(); + dbCmd.Dispose(); + } + void OptimizeDatabase() { IDbCommand dbCmd = dbCon.CreateCommand(); diff --git a/Cicm.Database/Schemas/Sql/V4.cs b/Cicm.Database/Schemas/Sql/V4.cs index 95d46acb..a0acbc5f 100644 --- a/Cicm.Database/Schemas/Sql/V4.cs +++ b/Cicm.Database/Schemas/Sql/V4.cs @@ -35,7 +35,7 @@ namespace Cicm.Database.Schemas.Sql public static readonly string Admins = V3.Admins + "\n" + "CREATE INDEX idx_admins_user ON admins (user);"; public static readonly string BrowserTests = - V3.CicmDb + "\n" + + V3.BrowserTests + "\n" + "CREATE INDEX idx_browser_tests_user_agent ON browser_tests (user_agent);\n" + "CREATE INDEX idx_browser_tests_browser ON browser_tests (browser);\n" + "CREATE INDEX idx_browser_tests_version ON browser_tests (version);\n" + diff --git a/Cicm.Database/Schemas/Sql/V5.cs b/Cicm.Database/Schemas/Sql/V5.cs new file mode 100644 index 00000000..e3b3fdd0 --- /dev/null +++ b/Cicm.Database/Schemas/Sql/V5.cs @@ -0,0 +1,95 @@ +/****************************************************************************** +// Canary Islands Computer Museum Website +// ---------------------------------------------------------------------------- +// +// Filename : V3.cs +// Author(s) : Natalia Portillo +// +// --[ Description ] ---------------------------------------------------------- +// +// Contains SQL queries to create the database version 4. +// +// --[ 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 V5 + { + public static readonly string Admins = V4.Admins; + + public static readonly string BrowserTests = V4.BrowserTests; + + public static readonly string CicmDb = @"CREATE TABLE `cicm_db` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `version` int(11) NOT NULL, + `updated` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) + ); + INSERT INTO cicm_db (version) VALUES ('5');"; + + public static readonly string Companies = V4.Companies; + + public static readonly string Computers = V4.Computers; + + public static readonly string Consoles = V4.Consoles; + + public static readonly string DiskFormats = V4.DiskFormats; + + public static readonly string Forbidden = V4.Forbidden; + + public static readonly string Gpus = V4.Gpus; + + public static readonly string Logs = V4.Logs; + + public static readonly string MoneyDonations = V4.MoneyDonations; + + public static readonly string MusicSynths = V4.MusicSynths; + + public static readonly string News = V4.News; + + public static readonly string OwnedComputers = V4.OwnedComputers; + + public static readonly string OwnedConsoles = V4.OwnedConsoles; + + public static readonly string Processors = V4.Processors; + + public static readonly string SoundSynths = V4.SoundSynths; + + public static readonly string ComputersForeignKeys = "ALTER TABLE computers ADD FOREIGN KEY fk_computers_company (company) REFERENCES companies (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_cpu1 (cpu1) REFERENCES processors (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_cpu2 (cpu2) REFERENCES processors (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_gpu (gpu) REFERENCES gpus (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_sound_synth (sound_synth) REFERENCES sound_synths (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_music_synth (music_synth) REFERENCES music_synths (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_hdd1 (hdd1) REFERENCES disk_formats (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_hdd2 (hdd2) REFERENCES disk_formats (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_hdd3 (hdd3) REFERENCES disk_formats (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_disk1 (disk1) REFERENCES disk_formats (id);\n"+ + "ALTER TABLE computers ADD FOREIGN KEY fk_computers_disk2 (disk2) REFERENCES disk_formats (id);"; + + public static readonly string ConsolesForeignKeys = "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_company (company) REFERENCES companies (id);\n" + + "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_cpu1 (cpu1) REFERENCES processors (id);\n"+ + "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_cpu2 (cpu2) REFERENCES processors (id);\n"+ + "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_gpu (gpu) REFERENCES gpus (id);\n"+ + "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_sound_synth (sound_synth) REFERENCES sound_synths (id);\n"+ + "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_music_synth (music_synth) REFERENCES music_synths (id);\n"+ + "ALTER TABLE consoles ADD FOREIGN KEY fk_consoles_format (format) REFERENCES disk_formats (id);"; + } +} \ No newline at end of file diff --git a/cicm_web/cicm_web.csproj b/cicm_web/cicm_web.csproj index 8411bbc2..761c1f07 100644 --- a/cicm_web/cicm_web.csproj +++ b/cicm_web/cicm_web.csproj @@ -2,7 +2,7 @@ netcoreapp2.0 - 3.0.99.111 + 3.0.99.114 Canary Islands Computer Museum Copyright © 2003-2018 Natalia Portillo Canary Islands Computer Museum Website