Пример #1
0
        public ICollection <MigrationReference> FindMigrations()
        {
            List <MigrationReference> refs = new List <MigrationReference>();

            foreach (Type type in assembly.GetTypes())
            {
                if (type.IsPublic && type.IsClass && !type.IsAbstract && typeof(IDatabaseMigration).IsAssignableFrom(type))
                {
                    object[] attrs = type.GetCustomAttributes(typeof(MigrationAttribute), false);

                    if (attrs.Length == 0)
                    {
                        throw new Exception("Found migration type that has no version information. See type " + type.FullName);
                    }

                    MigrationAttribute att = (MigrationAttribute)attrs[0];

                    MigrationReference mref = new MigrationReference(att.Version, type.Name, "", String.Empty);
                    mref.Reference = type;

                    refs.Add(mref);
                }
            }

            refs.Sort(delegate(MigrationReference mr1, MigrationReference mr2) { return(mr1.Version.CompareTo(mr2.Version)); });

            return(refs);
        }
Пример #2
0
        /// <summary>
        ///   Returns the version of the migration
        ///   <see cref = "MigrationAttribute">MigrationAttribute</see>.
        /// </summary>
        /// <param name = "t">Migration type.</param>
        /// <returns>Version number sepcified in the attribute</returns>
        public static long GetMigrationVersion(Type t)
        {
            MigrationAttribute attrib = (MigrationAttribute)
                                        Attribute.GetCustomAttribute(t, typeof(MigrationAttribute));

            return(attrib.Version);
        }
		private void RemoveMigration(IMigration migration, MigrationAttribute attr) {
			// we're removing this one
			_logger.MigrateDown(Current, migration.Name);
			if (! DryRun) {
				migration.Down();
				_provider.MigrationUnApplied(attr.Version);
				_provider.Commit();
				migration.AfterDown();
			}
		}
Пример #4
0
        static IExecutableSqlMigration CreateExecutableSqlMigration(MigrationAttribute attribute, ISqlMigration instance)
        {
            var sequenceNumber      = attribute.SequenceNumber;
            var branchSpecification = attribute.OptionalBranchSpecification ?? "master";
            var id          = $"{sequenceNumber}-{branchSpecification}";
            var sql         = instance.Sql;
            var description = attribute.Description;

            return(new ExecutableSqlMigration(id, sql, description, sequenceNumber, branchSpecification, instance));
        }
		private void ApplyMigration(IMigration migration, MigrationAttribute attr) {
			// we're adding this one
			_logger.MigrateUp(Current, migration.Name);
			if (! DryRun) {
				migration.Up();
				_provider.MigrationApplied(attr.Version);
				_provider.Commit();
				migration.AfterUp();
			}
		}
        private async Task <MigrationDefinition> CreateDefinitionAsync(
            MigrationAttribute attribute,
            Type @type,
            CancellationToken cancellationToken)
        {
            var migration = await migrationFactory.CreateAsync(type, cancellationToken);

            return(new MigrationDefinition(
                       attribute.Version,
                       attribute.GetTags(),
                       migration));
        }
Пример #7
0
 private void ApplyMigration(IMigration migration, MigrationAttribute attr)
 {
     // we're adding this one
     _logger.MigrateUp(Current, migration.Name);
     if (!DryRun)
     {
         migration.Up();
         _provider.MigrationApplied(attr.Version);
         _provider.Commit();
         migration.AfterUp();
     }
 }
Пример #8
0
 private void RemoveMigration(IMigration migration, MigrationAttribute attr)
 {
     // we're removing this one
     _logger.MigrateDown(Current, migration.Name);
     if (!DryRun)
     {
         migration.Down();
         _provider.MigrationUnApplied(attr.Version);
         _provider.Commit();
         migration.AfterDown();
     }
 }
Пример #9
0
        /// <summary>
        /// Инициализация
        /// </summary>
        /// <param name="type">Тип, из которого извлекается информация о миграции</param>
        public MigrationInfo(Type type)
        {
            Require.IsNotNull(type, "Не задан обрабатываемый класс");
            Require.That(typeof(IMigration).IsAssignableFrom(type), "Класс миграции должен реализовывать интерфейс IMigration");

            MigrationAttribute attribute = type.GetCustomAttribute <MigrationAttribute>();

            Require.IsNotNull(attribute, "Не найден атрибут Migration");

            Type               = type;
            Version            = attribute.Version;
            Ignore             = attribute.Ignore;
            WithoutTransaction = attribute.WithoutTransaction;
        }
Пример #10
0
        public int Compare(Type x, Type y)
        {
            MigrationAttribute attribOfX = (MigrationAttribute)Attribute.GetCustomAttribute(x, typeof(MigrationAttribute));
            MigrationAttribute attribOfY = (MigrationAttribute)Attribute.GetCustomAttribute(y, typeof(MigrationAttribute));

            if (_ascending)
            {
                return(attribOfX.Version.CompareTo(attribOfY.Version));
            }
            else
            {
                return(attribOfY.Version.CompareTo(attribOfX.Version));
            }
        }
Пример #11
0
        public override void Migrate(IMigration migration)
        {
            _provider.BeginTransaction();
            MigrationAttribute attr = (MigrationAttribute)Attribute.GetCustomAttribute(migration.GetType(), typeof(MigrationAttribute));

            if (_provider.AppliedMigrations.Contains(attr.Version))
            {
                RemoveMigration(migration, attr);
            }
            else
            {
                ApplyMigration(migration, attr);
            }
        }
Пример #12
0
        public static void Sql(this Migration migration, MigrationBuilder migrationBuilder)
        {
            if (migration == null)
            {
                throw new ArgumentNullException(nameof(migration));
            }

            MigrationAttribute attr = migration.GetType().GetCustomAttribute <MigrationAttribute>()
                                      ?? throw new InvalidOperationException();

            string sql = File.ReadAllText($"migrations/{attr.Id}.sql");

            migrationBuilder.Sql(sql);
        }
Пример #13
0
 private static long FindLatestMigration()
 {
     return(((IEnumerable <Type>) typeof(M1_Baseline).Assembly.GetTypes()).Where <Type>((Type x) => {
         if (!x.IsClass)
         {
             return false;
         }
         return x.Namespace == typeof(M1_Baseline).Namespace;
     }).Select <Type, long>((Type x) => {
         MigrationAttribute attribute = x.GetAttribute <MigrationAttribute>(false);
         if (attribute == null)
         {
             return (long)-1;
         }
         return attribute.Version;
     }).OrderByDescending <long, long>((long x) => x).First <long>());
 }
Пример #14
0
        void ApplyMigration(IMigration migration, MigrationAttribute attr)
        {
            // we're adding this one
            _logger.MigrateUp(Current, migration.Name);
            if (!DryRun)
            {
                var tProvider = _provider as TransformationProvider;
                if (tProvider != null)
                {
                    tProvider.CurrentMigration = migration;
                }

                migration.Up();
                _provider.MigrationApplied(attr.Version, attr.Scope);
                _provider.Commit();
                migration.AfterUp();
            }
        }
Пример #15
0
        /// <summary>
        ///   Collect migrations in one <c>Assembly</c>.
        /// </summary>
        /// <param name = "asm">The <c>Assembly</c> to browse.</param>
        /// <returns>The migrations collection</returns>
        public static List <Type> GetMigrationTypes(Assembly asm)
        {
            List <Type> migrations = new List <Type>();

            foreach (Type t in asm.GetExportedTypes())
            {
                MigrationAttribute attrib =
                    (MigrationAttribute)Attribute.GetCustomAttribute(t, typeof(MigrationAttribute));

                if (attrib != null && typeof(IMigration).IsAssignableFrom(t) && !attrib.Ignore)
                {
                    migrations.Add(t);
                }
            }

            migrations.Sort(new MigrationTypeComparer(true));
            return(migrations);
        }
Пример #16
0
        private void RemoveMigration(IMigration migration, MigrationAttribute attr)
        {
            // we're removing this one
            _logger.MigrateDown(Current, migration.Name);
            if (!DryRun)
            {
                var tProvider = _provider as TransformationProvider;
                if (tProvider != null)
                {
                    tProvider.CurrentMigration = migration;
                }

                migration.Down();
                _provider.MigrationUnApplied(attr.Version, attr.Scope);
                _provider.Commit();
                migration.AfterDown();
            }
        }
Пример #17
0
 public MigrationMetadata(Type type, MigrationAttribute attribute)
 {
     Type      = type;
     Attribute = attribute;
 }
        public static string  GetMigrationId(this MigrationBuilder migrationBuilder, Type t)
        {
            MigrationAttribute MyAttribute = (MigrationAttribute)Attribute.GetCustomAttribute(t, typeof(MigrationAttribute));

            return(MyAttribute.Id);
        }