Пример #1
0
        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();
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }
Пример #4
0
        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.");
            }
        }
Пример #5
0
        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));
        }