예제 #1
0
        public IEnumerable <MigrationScript> GetRepeatableMigrations(string prefix, string separator, string suffix, Encoding?encoding = null)
        {
            Check.NotNullOrEmpty(prefix, nameof(prefix));       // R
            Check.NotNullOrEmpty(separator, nameof(separator)); // __
            Check.NotNullOrEmpty(suffix, nameof(suffix));       // .sql

            var migrations = new List <EmbeddedResourceMigrationScript>();

            encoding ??= Encoding.UTF8;

            foreach (var assembly in _assemblies)
            {
                assembly.GetManifestResourceNames()
                .Where(x => _filters.Any() ? _filters.Any(f => x.StartsWith(f, StringComparison.OrdinalIgnoreCase)) : true)
                .Where(x => x.EndsWith(suffix, StringComparison.OrdinalIgnoreCase))
                .Where(x =>
                       //GetFileName(x).StartsWith(prefix, StringComparison.OrdinalIgnoreCase)
                       GetFileName(x).Substring(GetFileName(x).IndexOf(separator) + separator.Length, prefix.Length).Equals(prefix, StringComparison.OrdinalIgnoreCase)      // "*R*"
                       )
                .Select(x =>
                {
                    MigrationUtil.ExtractDescription(GetFileName(x), prefix, separator, out string description);
                    return(new EmbeddedResourceMigrationScript(
                               version: null,
                               description,
                               name: GetFileName(x),
                               content: assembly.GetManifestResourceStream(x),
                               type: MetadataType.RepeatableMigration,
                               encoding));
                })
                .ToList()
                .ForEach(x => migrations.Add(x));
            }

            return(migrations.Cast <MigrationBase>() // NET 3.5
                   .CheckForDuplicateName()
                   .OrderBy(x => x.Name)
                   .Cast <MigrationScript>()          // NET 3.5
                   .ToList());
        }
예제 #2
0
        public IEnumerable <MigrationScript> GetRepeatableMigrations(string prefix, string separator, string suffix, Encoding?encoding = null)
        {
            Check.NotNullOrEmpty(prefix, nameof(prefix));       // R
            Check.NotNullOrEmpty(separator, nameof(separator)); // __
            Check.NotNullOrEmpty(suffix, nameof(suffix));       // .sql

            var migrations = new List <FileMigrationScript>();

            encoding ??= Encoding.UTF8;

            foreach (string location in _locations.Distinct(StringComparer.OrdinalIgnoreCase)) // Remove duplicate locations if any
            {
                DirectoryInfo dirToScan = ResolveDirectory(location);
                if (!dirToScan.Exists)
                {
                    continue;
                }

                dirToScan.GetFiles("*", SearchOption.AllDirectories)   // Get scripts recursively
                .Where(f => !migrations.Any(m => m.Path == f.FullName) // Scripts not already loaded
                       //&& f.Name.StartsWith(prefix, StringComparison.OrdinalIgnoreCase) // "R*"
                       && f.Name.Substring(f.Name.IndexOf(separator) + separator.Length, prefix.Length).Equals(prefix, StringComparison.OrdinalIgnoreCase) &&         // "*R*"
                       f.Name.EndsWith(suffix, StringComparison.OrdinalIgnoreCase))          // "*.sql"
                .Select(f =>
                {
                    MigrationUtil.ExtractDescription(f.FullName, prefix, separator, out string description);
                    return(new FileMigrationScript(f.FullName, version: null, description, MetadataType.RepeatableMigration, encoding));
                })
                .ToList()
                .ForEach(x => migrations.Add(x));
            }

            return(migrations.Cast <MigrationBase>() // NET 3.5
                   .CheckForDuplicateName()
                   .OrderBy(x => x.Name)
                   .Cast <MigrationScript>()          // NET 3.5
                   .ToList());
        }
예제 #3
0
 public void When_repeatable_migration_gets_a_null_version_and_a_description(string script, string expectedDescription)
 {
     MigrationUtil.ExtractDescription(script, "R", "__", out string description);
     Assert.Equal(expectedDescription, description);
 }