public override IEnumerable <IMigrationScript> GetMigrations(IEnumerable <string> locations, string prefix, string separator, string suffix) { List <string> locationList = locations.ToList(); Check.HasNoNulls(locationList, nameof(locations)); Check.NotNullOrEmpty(prefix, nameof(prefix)); // V Check.NotNullOrEmpty(separator, nameof(separator)); // __ Check.NotNullOrEmpty(suffix, nameof(suffix)); // .sql string[] resourceRefs = _embeddedResourceContext.GetManifestResourceNames(); var migrations = resourceRefs.AsEnumerable() .Where(resourceRef => resourceRef.EndsWith(suffix, StringComparison.CurrentCultureIgnoreCase)) .Where(resourceRef => locationList.Any(resourceRef.StartsWith)) .Select(resourceRef => { var name = ResourceRefToName(resourceRef); MigrationUtil.ExtractVersionAndDescription(name, prefix, separator, out string version, out string description); return((IMigrationScript) new EmbeddedResourceMigrationScript(version, name, description, () => _embeddedResourceContext.GetManifestResourceStream(resourceRef) ?? throw new InvalidOperationException($"Bad resource reference: {resourceRef}"), Encoding.UTF8, _normalizeLineEndingsForChecksum)); }) .OrderBy(migration => migration.Version).ToList(); CheckForDuplicates(migrations); return(migrations); }
public IEnumerable <MigrationScript> GetMigrations(string prefix, string separator, string suffix, Encoding encoding = null) { Check.NotNullOrEmpty(prefix, nameof(prefix)); // V Check.NotNullOrEmpty(separator, nameof(separator)); // __ Check.NotNullOrEmpty(suffix, nameof(suffix)); // .sql var migrations = new List <EmbeddedResourceMigrationScript>(); 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.CurrentCultureIgnoreCase)) .Where(x => GetFileName(x).StartsWith(prefix)) .Select(x => { MigrationUtil.ExtractVersionAndDescription(GetFileName(x), prefix, separator, out string version, out string description); return(new EmbeddedResourceMigrationScript( version: version, description: description, name: GetFileName(x), content: assembly.GetManifestResourceStream(x), encoding: encoding ?? Encoding.UTF8)); }) .ToList() .ForEach(x => migrations.Add(x)); } return(migrations.Cast <MigrationBase>() // NET 3.5 .CheckForDuplicates() .OrderBy(x => x.Version) .Cast <MigrationScript>() // NET 3.5 .ToList()); }
private IMigrationScript LoadMigrationFromFile(string script, string prefix, string separator) { Check.FileExists(script, nameof(script)); // V1_3_1__Migration_description.sql Check.NotNullOrEmpty(prefix, nameof(prefix)); // V Check.NotNullOrEmpty(separator, nameof(separator)); // __ MigrationUtil.ExtractVersionAndDescription(script, prefix, separator, out string version, out string description); return(new FileMigrationScript(script, version, description, normalizeLineEndings: _normalizeLineEndingsForChecksum)); }
private FileMigrationScript LoadMigrationFromFile(string script, string prefix, string separator, Encoding textEncoding) { Check.FileExists(script, nameof(script)); // V1_3_1__Migration_description.sql Check.NotNullOrEmpty(prefix, nameof(prefix)); // V Check.NotNullOrEmpty(separator, nameof(separator)); // __ Check.NotNull(textEncoding, nameof(textEncoding)); MigrationUtil.ExtractVersionAndDescription(script, prefix, separator, out string version, out string description); return(new FileMigrationScript(script, version, description, textEncoding)); }
public IEnumerable <string> LoadSqlStatements(Dictionary <string, string> placeholders, Encoding encoding, string delimiter) { Check.NotNull(placeholders, nameof(placeholders)); Check.NotNull(encoding, nameof(encoding)); string sql = File.ReadAllText(Path, encoding); foreach (var entry in placeholders) { sql = sql.Replace(entry.Key, entry.Value); } return(MigrationUtil.SplitSqlStatements(sql, delimiter)); }
public IEnumerable <string> LoadSqlStatements(IDictionary <string, string> placeholders, string delimiter) { if (placeholders == null || placeholders.Count == 0) { return(MigrationUtil.SplitSqlStatements(StreamToString(), delimiter)); } var sql = new StringBuilder(StreamToString()); foreach (var entry in placeholders) { sql.Replace(entry.Key, entry.Value); } return(MigrationUtil.SplitSqlStatements(sql.ToString(), delimiter)); }
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()); }
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()); }
public IEnumerable <MigrationScript> GetMigrations(string prefix, string separator, string suffix, Encoding encoding = null) { Check.NotNullOrEmpty(prefix, nameof(prefix)); // V Check.NotNullOrEmpty(separator, nameof(separator)); // __ Check.NotNullOrEmpty(suffix, nameof(suffix)); // .sql var migrations = new List <FileMigrationScript>(); string searchPattern = $"{prefix}*{suffix}"; // "V*.sql" encoding = 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(searchPattern, SearchOption.AllDirectories) // Get scripts recursively .Where(f => !migrations.Any(m => m.Path == f.FullName)) // Scripts not already loaded .Select(f => { MigrationUtil.ExtractVersionAndDescription(f.FullName, prefix, separator, out string version, out string description); return(new FileMigrationScript(path: f.FullName, version, description, MetadataType.Migration, encoding)); }) .ToList() .ForEach(x => migrations.Add(x)); } return(migrations.Cast <MigrationBase>() // NET 3.5 .CheckForDuplicateVersion() .OrderBy(x => x.Version) .Cast <MigrationScript>() // NET 3.5 .ToList()); }
public void When_migration_name_format_is_incorrect_Throws_EvolveConfigurationException(string script) { Assert.Throws <EvolveConfigurationException>(() => MigrationUtil.ExtractVersionAndDescription(script, "V", "__", out string version, out string description)); }
public void Can_get_migration_version_and_description(string script, string expectedVersion, string expectedDescription) { MigrationUtil.ExtractVersionAndDescription(script, "V", "__", out string version, out string description); Assert.Equal(expectedVersion, version); Assert.Equal(expectedDescription, description); }
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); }
internal static void WriteJobNotFoundError(Task task, string jobName, Exception ex) { MigrationUtil.ThrowOnNullOrEmptyArgument(jobName, "jobName"); task.WriteError(new MigrationBatchNotFoundException(jobName, ex), ExchangeErrorCategory.Client, null); }
public void When_migration_name_format_is_incorrect_Throws_EvolveConfigurationException(string script) { Assert.Throws <EvolveConfigurationException>(() => MigrationUtil.ExtractVersionAndDescription(script, TestContext.SqlMigrationPrefix, TestContext.SqlMigrationSeparator, out string version, out string description)); }
public void Can_get_migration_version_and_description(string script, string expectedVersion, string expectedDescription) { MigrationUtil.ExtractVersionAndDescription(script, TestContext.SqlMigrationPrefix, TestContext.SqlMigrationSeparator, out string version, out string description); Assert.Equal(expectedVersion, version); Assert.Equal(expectedDescription, description); }