public ValidationWarning(string migrationName, DataType dataType, DbPlatform dbPlatform, string warning) { _migrationName = migrationName; _dataType = dataType; _dbPlatform = dbPlatform; _warning = warning; }
public static int SetupAndExecute(string connectionString, DbPlatform dbPlatform, Assembly assembly, long timestamp) { string pathToExe = GetPathToExe(); Configuration migrateExeConfig = ConfigurationManager.OpenExeConfiguration(pathToExe); // make a backup of the config file string backupPath = migrateExeConfig.FilePath + ".bak"; File.Copy(migrateExeConfig.FilePath, backupPath, true); // add connection string to config file migrateExeConfig.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(TestTarget, connectionString)); try { migrateExeConfig.Save(); return(Execute(string.Format(CultureInfo.InvariantCulture, "{0} {1} -platform {2} -version {3} -driver {4} -to {5} -traceLevel Verbose", TestTarget, GetPathToAssembly(assembly), dbPlatform.Platform, dbPlatform.MajorVersion, dbPlatform.Driver, timestamp))); } finally { // restore backup File.Copy(backupPath, migrateExeConfig.FilePath, true); } }
public static int Execute(string connectionString, DbPlatform dbPlatform, Assembly assembly, long timestamp) { string pathToExe = GetPathToAssembly(typeof(Program).Assembly); Configuration migrateExeConfig = ConfigurationManager.OpenExeConfiguration(pathToExe); // make a backup of the config file string backupPath = migrateExeConfig.FilePath + ".bak"; File.Copy(migrateExeConfig.FilePath, backupPath, true); // add connection string to config file const string testTarget = "test-target"; migrateExeConfig.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(testTarget, connectionString)); try { migrateExeConfig.Save(); // call Migrate.exe return Execute(string.Format(CultureInfo.InvariantCulture, "{0} {1} -platform {2} -version {3} -driver {4} -to {5} -traceLevel Verbose", testTarget, GetPathToAssembly(assembly), dbPlatform.Platform, dbPlatform.MajorVersion, dbPlatform.Driver, timestamp)); } finally { // restore backup File.Copy(backupPath, migrateExeConfig.FilePath, true); } }
private static void ExecuteMigration(string connectionString, DbPlatform dbPlatform, MigrationOptions options, string assemblyPath, long timestamp, string[] additionalAssemblyPaths) { var migrator = new Migrator(connectionString, dbPlatform, options); IMigrationBatch batch = migrator.FetchMigrationsTo(assemblyPath, timestamp, additionalAssemblyPaths); batch.Execute(); }
public ProviderInfo GetLatest(DbPlatform dbPlatform) { IProviderMetadata providerMetadata = FindLatest(dbPlatform); if (providerMetadata == null) { throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Could not find a provider for '{0}'.", dbPlatform)); } return ToProviderInfo(providerMetadata); }
public ProviderInfo GetLatest(DbPlatform dbPlatform) { IProviderMetadata providerMetadata = FindLatest(dbPlatform); if (providerMetadata == null) { throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Could not find a provider for '{0}'.", dbPlatform)); } return(ToProviderInfo(providerMetadata)); }
public IEnumerable<ProviderInfo> GetAllForMinimumRequirement(DbPlatform dbPlatform) { var allStartingWith = FindAllStartingWith(dbPlatform).ToList(); if (allStartingWith.Count == 0) { yield return GetLatest(dbPlatform); } else { foreach (IProviderMetadata metadata in allStartingWith) { yield return ToProviderInfo(metadata); } } }
public IEnumerable <ProviderInfo> GetAllForMinimumRequirement(DbPlatform dbPlatform) { var allStartingWith = FindAllStartingWith(dbPlatform).ToList(); if (allStartingWith.Count == 0) { yield return(GetLatest(dbPlatform)); } else { foreach (IProviderMetadata metadata in allStartingWith) { yield return(ToProviderInfo(metadata)); } } }
public void CheckProviderValidation(DbPlatform platformUnderExecution, DbAltererOptions options, int expectedTotalNumberOfSupportedProviders, int expectedValidationRuns) { // arrange var providerLocator = new ProviderLocator(new ProviderFactory()); int totalNumberOfSupportedProviders = options.SupportedPlatforms.Sum(n => providerLocator.GetAllForMinimumRequirement(n).Count()); var validatorFactory = new ValidatorFactory(providerLocator.GetExactly(platformUnderExecution), options, providerLocator); Validator validator = validatorFactory.Create(); var reporter = A.Fake<IMigrationReporter>(); string errors; string warnings; // act validator.Validate(new[] { reporter }, out errors, out warnings); // assert Assert.AreEqual(expectedTotalNumberOfSupportedProviders, totalNumberOfSupportedProviders, "Wrong total number of providers."); A.CallTo(() => reporter.Report(A<IMigrationContext>._)).MustHaveHappened(Repeated.Exactly.Times(expectedValidationRuns)); }
public void TestValidCommandLineArguments(string commandLine, string expectedConnectionString, DbPlatform expectedDbPlatform, string expectedAssemblyPath, string[] expectedAdditionalAssemblyPaths, long expectedTimestamp, SourceLevels expectedTraceLevels, Action<MigrationOptions> checkOptions) { string connectionString; DbPlatform dbPlatform; string assemblyPath; string[] additionalAssemblyPaths; long timestamp; SourceLevels traceLevels; MigrationOptions options = Parse(commandLine, out connectionString, out dbPlatform, out assemblyPath, out additionalAssemblyPaths, out timestamp, out traceLevels); Assert.AreEqual(expectedConnectionString, connectionString, "The connectionString does not match."); Assert.IsTrue(expectedDbPlatform.Matches(dbPlatform), "The providerSpecifier does not match."); Assert.AreEqual(expectedAssemblyPath, assemblyPath, "The assemblyPath does not match."); CollectionAssert.AreEquivalent(expectedAdditionalAssemblyPaths, additionalAssemblyPaths, "The additionalAssemblyPaths do not match."); Assert.AreEqual(expectedTimestamp, timestamp, "The timestamp does not match."); Assert.AreEqual(expectedTraceLevels, traceLevels, "The traceLevel does not match."); if (checkOptions != null) { checkOptions(options); // execute further check on the MigrationOptions } }
public ProviderInfo GetExactly(DbPlatform dbPlatform) { IProviderMetadata metadata = _providerRegistry.GetProviderMetadatas().Single(m => m.Platform == dbPlatform.Platform && m.MajorVersion == dbPlatform.MajorVersion && m.Driver == dbPlatform.Driver); return(new ProviderInfo(_providerRegistry.GetProvider(metadata), metadata)); }
private IEnumerable<IProviderMetadata> FindAllVersionsOf(DbPlatform dbPlatform) { return _providerFactory.GetProviderMetadatas() .Where(m => m.Platform == dbPlatform.Platform && m.Driver == dbPlatform.Driver) .OrderBy(m => m.MajorVersion); }
internal static MigrationOptions ParseCommandLineArguments(CommandLineOptions options, CommandLineParser parser, ConnectionStringSettingsCollection connectionStrings, out string connectionString, out DbPlatform dbPlatform, out string assemblyPath, out string[] additionalAssemblyPaths, out long timestamp, out SourceLevels traceLevels) { if (parser.Parameters.Length < 2 || // expect at least the target and one assembly parser.UnhandledSwitches.Length > 0) { throw new InvalidCommandLineArgumentException("Invalid command line arguments. Specify at least the target and one assembly." + Environment.NewLine + Environment.NewLine + GetUsageMessage(parser), InvalidArgumentsExitCode); } // connection string string target = parser.Parameters[0]; ConnectionStringSettings settings = connectionStrings[target]; if (settings == null) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Missing target: '{0}'. Could not find entry in the configuration file.", target), InvalidTargetExitCode); } connectionString = settings.ConnectionString; if (connectionString == null) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Empty target: '{0}'. The entry in the configuration file is empty.", target), InvalidTargetExitCode); } // provider name dbPlatform = new DbPlatform(options.Platform, options.MajorVersion, options.Driver); // assembly paths assemblyPath = parser.Parameters[1]; additionalAssemblyPaths = parser.Parameters.Skip(2).ToArray(); // timestamp timestamp = long.MaxValue; if (options.To != null) { try { timestamp = long.Parse(options.To, CultureInfo.CurrentCulture); } catch (FormatException x) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Could not parse timestamp: '{0}': {1}", options.To, x.Message), InvalidArgumentsExitCode); } } // trace level traceLevels = SourceLevels.Warning; if (!string.IsNullOrEmpty(options.TraceLevel)) { try { traceLevels = (SourceLevels)Enum.Parse(typeof(SourceLevels), options.TraceLevel, true); } catch (ArgumentException x) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Could not parse traceLevel: '{0}': {1}", options.TraceLevel, x.Message), InvalidArgumentsExitCode); } } // // other migration options // var migrationOptions = !string.IsNullOrEmpty(options.Module) ? new MigrationOptions(options.Module) : new MigrationOptions(); // scripting if (!string.IsNullOrEmpty(options.ScriptTo)) { if (options.ScriptOnly) { migrationOptions.OnlyScriptSqlTo(options.ScriptTo); } else { migrationOptions.ExecuteAndScriptSqlTo(options.ScriptTo); } } else { if (options.ScriptOnly) { throw new InvalidCommandLineArgumentException("The -scriptOnly switch requires a -scriptTo argument.", InvalidArgumentsExitCode); } } // versioning table if (!string.IsNullOrEmpty(options.VersioningTable)) { migrationOptions.VersioningTableName = options.VersioningTable; } return(migrationOptions); }
private static MigrationOptions Parse(string commandLine, out string connectionString, out DbPlatform dbPlatform, out string assemblyPath, out string[] additionalAssemblyPaths, out long timestamp, out SourceLevels traceLevels) { CommandLineOptions commandLineOptions; CommandLineParser parser; Assert.IsFalse(Program.DisplayHelp(commandLine, out commandLineOptions, out parser)); var connectionStrings = new ConnectionStringSettingsCollection { new ConnectionStringSettings(QaTarget, QaConnectionString) }; return(Program.ParseCommandLineArguments(commandLineOptions, parser, connectionStrings, out connectionString, out dbPlatform, out assemblyPath, out additionalAssemblyPaths, out timestamp, out traceLevels)); }
public void TestValidCommandLineArguments(string commandLine, string expectedConnectionString, DbPlatform expectedDbPlatform, string expectedAssemblyPath, string[] expectedAdditionalAssemblyPaths, long expectedTimestamp, SourceLevels expectedTraceLevels, Action <MigrationOptions> checkOptions) { string connectionString; DbPlatform dbPlatform; string assemblyPath; string[] additionalAssemblyPaths; long timestamp; SourceLevels traceLevels; MigrationOptions options = Parse(commandLine, out connectionString, out dbPlatform, out assemblyPath, out additionalAssemblyPaths, out timestamp, out traceLevels); Assert.AreEqual(expectedConnectionString, connectionString, "The connectionString does not match."); Assert.IsTrue(expectedDbPlatform.Matches(dbPlatform), "The providerSpecifier does not match."); Assert.AreEqual(expectedAssemblyPath, assemblyPath, "The assemblyPath does not match."); CollectionAssert.AreEquivalent(expectedAdditionalAssemblyPaths, additionalAssemblyPaths, "The additionalAssemblyPaths do not match."); Assert.AreEqual(expectedTimestamp, timestamp, "The timestamp does not match."); Assert.AreEqual(expectedTraceLevels, traceLevels, "The traceLevel does not match."); if (checkOptions != null) { checkOptions(options); // execute further check on the MigrationOptions } }
private IProviderMetadata FindLatest(DbPlatform dbPlatform) { return FindAllVersionsOf(dbPlatform) .LastOrDefault(p => p.MajorVersion <= dbPlatform.MajorVersion); }
internal static MigrationOptions ParseCommandLineArguments(CommandLineOptions options, CommandLineParser parser, ConnectionStringSettingsCollection connectionStrings, out string connectionString, out DbPlatform dbPlatform, out string assemblyPath, out string[] additionalAssemblyPaths, out long timestamp, out SourceLevels traceLevels) { if (parser.Parameters.Length < 2 || // expect at least the target and one assemlby parser.UnhandledSwitches.Length > 0) { throw new InvalidCommandLineArgumentException("Invalid command line arguments. Specify at least the target and one assembly." + Environment.NewLine + Environment.NewLine + GetUsageMessage(parser), InvalidArgumentsExitCode); } // connection string string target = parser.Parameters[0]; ConnectionStringSettings settings = connectionStrings[target]; if (settings == null) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Missing target: '{0}'. Could not find entry in the configuration file.", target), InvalidTargetExitCode); } connectionString = settings.ConnectionString; if (connectionString == null) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Empty target: '{0}'. The entry in the configuration file is empty.", target), InvalidTargetExitCode); } // provider name dbPlatform = new DbPlatform(options.Platform, options.MajorVersion, options.Driver); // assembly paths assemblyPath = parser.Parameters[1]; additionalAssemblyPaths = parser.Parameters.Skip(2).ToArray(); // timestamp timestamp = long.MaxValue; if (options.To != null) { try { timestamp = long.Parse(options.To, CultureInfo.CurrentCulture); } catch (FormatException x) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Could not parse timestamp: '{0}': {1}", options.To, x.Message), InvalidArgumentsExitCode); } } // trace level traceLevels = SourceLevels.Warning; if (!string.IsNullOrEmpty(options.TraceLevel)) { try { traceLevels = (SourceLevels)Enum.Parse(typeof(SourceLevels), options.TraceLevel, true); } catch (ArgumentException x) { throw new InvalidCommandLineArgumentException(string.Format(CultureInfo.CurrentCulture, "Could not parse traceLevel: '{0}': {1}", options.TraceLevel, x.Message), InvalidArgumentsExitCode); } } // // other migration options // var migrationOptions = !string.IsNullOrEmpty(options.Module) ? new MigrationOptions(options.Module) : new MigrationOptions(); // scripting if (!string.IsNullOrEmpty(options.ScriptTo)) { if (options.ScriptOnly) { migrationOptions.OnlyScriptSqlTo(options.ScriptTo); } else { migrationOptions.ExecuteAndScriptSqlTo(options.ScriptTo); } } else { if (options.ScriptOnly) { throw new InvalidCommandLineArgumentException("The -scriptOnly switch requires a -scriptTo argument.", InvalidArgumentsExitCode); } } // versioning table if (!string.IsNullOrEmpty(options.VersioningTable)) { migrationOptions.VersioningTableName = options.VersioningTable; } return migrationOptions; }
private IEnumerable <IProviderMetadata> FindAllStartingWith(DbPlatform dbPlatform) { return(FindAllVersionsOf(dbPlatform) .Where(m => m.MajorVersion >= dbPlatform.MajorVersion)); }
private IEnumerable<IProviderMetadata> FindAllStartingWith(DbPlatform dbPlatform) { return FindAllVersionsOf(dbPlatform) .Where(m => m.MajorVersion >= dbPlatform.MajorVersion); }
private IProviderMetadata FindLatest(DbPlatform dbPlatform) { return(FindAllVersionsOf(dbPlatform) .LastOrDefault(p => p.MajorVersion <= dbPlatform.MajorVersion)); }
private static MigrationOptions Parse(string commandLine, out string connectionString, out DbPlatform dbPlatform, out string assemblyPath, out string[] additionalAssemblyPaths, out long timestamp, out SourceLevels traceLevels) { CommandLineOptions commandLineOptions; CommandLineParser parser; Assert.IsFalse(Program.DisplayHelp(commandLine, out commandLineOptions, out parser)); var connectionStrings = new ConnectionStringSettingsCollection { new ConnectionStringSettings(QaTarget, QaConnectionString) }; return Program.ParseCommandLineArguments(commandLineOptions, parser, connectionStrings, out connectionString, out dbPlatform, out assemblyPath, out additionalAssemblyPaths, out timestamp, out traceLevels); }
private IEnumerable <IProviderMetadata> FindAllVersionsOf(DbPlatform dbPlatform) { return(_providerRegistry.GetProviderMetadatas() .Where(m => m.Platform == dbPlatform.Platform && m.Driver == dbPlatform.Driver) .OrderBy(m => m.MajorVersion)); }
public ProviderInfo GetExactly(DbPlatform dbPlatform) { IProviderMetadata metadata = _providerFactory.GetProviderMetadatas().Single(m => m.Platform == dbPlatform.Platform && m.MajorVersion == dbPlatform.MajorVersion && m.Driver == dbPlatform.Driver); return new ProviderInfo(_providerFactory.GetProvider(metadata), metadata); }
private static void ExecuteMigration(string connectionString, IEnumerable <string> assemblyPaths, DbPlatform dbPlatform, MigrationOptions options, long timestamp) { var migrator = new Migrator(connectionString, dbPlatform, options); IMigrationBatch batch = migrator.FetchMigrationsTo(assemblyPaths.First(), timestamp, assemblyPaths.Skip(1).ToArray()); batch.Execute(); }