internal void InsertMigrationRecord(MigrationRow row) { var cmd = _connection.NewCommand(_sql.InsertMigration, _transaction); cmd.AddParameter("Filename", row.Filename); cmd.AddParameter("Hash", row.Hash); cmd.AddParameter("ExecutionDate", row.ExecutionDate); cmd.AddParameter("Duration", row.Duration); cmd.ExecuteNonQuery(); }
internal AlreadyRan(IEnumerable <MigrationRow> rows) { MigrationRow last = null; foreach (var row in rows) { ByFilename[row.Filename] = row; ByHash[row.Hash] = row; last = row; } Last = last; }
void RunMigrationCommands(Migration migration, MigrateMode mode) { BeginMigration(migration.UseTransaction); if (mode == MigrateMode.Run) { Log(" Running \"" + migration.Filename + "\"" + (migration.UseTransaction ? "" : " (NO TRANSACTION)")); } else if (mode == MigrateMode.HashMismatch) { Log($" {migration.Filename} has been modified since it was run. It is being run again because --force was used."); } else { throw new Exception("Mayflower bug: RunMigrationCommands called with mode: " + mode); } var sw = new Stopwatch(); sw.Start(); foreach (var cmd in migration.SqlCommands) { var result = _db.ExecuteCommand(cmd); Log(" Result: " + (result == -1 ? "No Rows Affected" : result + " rows")); } sw.Stop(); if (!_isPreview || _tableExists) { var recordRow = new MigrationRow() { Filename = migration.Filename, Hash = migration.Hash, ExecutionDate = DateTime.UtcNow, Duration = (int)sw.ElapsedMilliseconds, }; if (mode == MigrateMode.Run) { _db.InsertMigrationRecord(recordRow); } else { _db.UpdateMigrationRecordHash(recordRow); } } Log(); EndMigration(migration); }
internal void UpdateMigrationRecordHash(MigrationRow row) { var cmd = _connection.NewCommand(_sql.UpdateMigrationHash, _transaction); cmd.AddParameter("Hash", row.Hash); cmd.AddParameter("ExecutionDate", row.ExecutionDate); cmd.AddParameter("Duration", row.Duration); cmd.AddParameter("Filename", row.Filename); var affected = cmd.ExecuteNonQuery(); if (affected != 1) { throw new Exception($"Failure updating the migration record. {affected} rows affected. Expected 1."); } }
internal AlreadyRan GetAlreadyRan() { var results = new List <MigrationRow>(); var cmd = _connection.NewCommand(_sql.GetAlreadyRan); using (var rdr = cmd.ExecuteReader()) { while (rdr.Read()) { var row = new MigrationRow(); row.Id = rdr.GetInt32(0); row.Filename = rdr.GetString(1); row.Hash = rdr.GetString(2); row.ExecutionDate = rdr.GetDateTime(3); row.Duration = rdr.GetInt32(4); results.Add(row); } } return(new AlreadyRan(results)); }