public void Run(params IMigrationTask[] tasks)
 {
     if (tasks.IsNullOrEmpty())
     {
         return;
     }
     using (var t = _db.BeginTransaction())
     {
         foreach (var task in tasks)
         {
             if (task.NextVersion == null)
             {
                 _logger.Info("Installing database schema '{1}' with version {0}", task.CurrentVersion,
                              task.SchemaName);
             }
             else
             {
                 _logger.Info("Executing '{2}' migration from version {0} to version {1}", task.CurrentVersion,
                              task.NextVersion, task.SchemaName);
             }
             task.Execute(_db);
         }
         t.Commit();
     }
 }
        private void UpdateSelf()
        {
            var migrator = new SchemaMigrationExecutor(_runner, GetMigratorTasks(), SchemaName);

            using (var t = _db.BeginTransaction())
            {
                if (!_db.DatabaseTools.TableExists(TableName))
                {
                    migrator.InstallSchema();
                    AppendVersion(SchemaName, migrator.LatestVersionAvailable);
                }
                else
                {
                    var latest = GetInstalledVersion(SchemaName);
                    if (latest.IsNullOrEmpty())
                    {
                        migrator.InstallSchema();
                        AppendVersion(SchemaName, migrator.LatestVersionAvailable);
                    }
                    else
                    {
                        if (latest != migrator.LatestVersionAvailable)
                        {
                            migrator.MigrateToLatestFrom(latest);
                            AppendVersion(SchemaName, migrator.LatestVersionAvailable);
                        }
                    }
                }

                t.Commit();
            }
        }
 public void ExecuteDDL()
 {
     using (var t = _db.BeginTransaction())
     {
         _db.ExecuteCommand(GetSql());
         t.Commit();
     }
 }