using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ServiceShared.Database.Migrations { public class Version_2 : Migration { public Version_2() { this.Version = 2; } /** * Run current migration **/ public override bool Run(DbContext dbContext) { bool result = false; try { if(this.RunPrevious(dbContext)) { if(!this.Ready(dbContext)) { using (MySqlConnection client = dbContext.CreateConnection()) { client.Open(); MySqlCommand cmd = client.CreateCommand(); /** add new column not_found_counter **/ cmd.CommandText = "alter table results add column not_found_counter int(11) not null default 0"; cmd.ExecuteNonQuery(); /** add new coulmn not_found_ts **/ cmd.CommandText = "alter table results add column not_found_ts datetime null"; cmd.ExecuteNonQuery(); /** add new column notification_counter **/ cmd.CommandText = "alter table results add column notification_counter int(11) not null default 0"; cmd.ExecuteNonQuery(); client.Close(); result = true; } } } } catch (Exception ex) { Log.Error(ex, "ServiceOutside.Database.Migrations.Version_2", "Run"); } return result; } /// /// Checks if current migration already run /// /// Database context for the migration /// private bool Ready(DbContext dbContext) { bool result = false; try { using (MySqlConnection client = dbContext.CreateConnection()) { client.Open(); MySqlCommand cmd = client.CreateCommand(); cmd.CommandText = "select not_found_counter, notification_counter from results where 1 <> 1"; cmd.ExecuteNonQuery(); client.Close(); result = true; } } catch { result = false; } return result; } /** * Runs/Checks previous migrations **/ public override bool RunPrevious(DbContext dbContext) { bool result = false; try { if(new Version_1().Run(dbContext)) { result = true; } } catch (Exception ex) { Log.Error(ex, "ServiceOutside.Database.Migrations.Version_2", "RunPrevious"); } return result; } } }