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