Example #1
0
 public ValidationWarning(string migrationName, DataType dataType, DbPlatform dbPlatform, string warning)
 {
     _migrationName = migrationName;
     _dataType      = dataType;
     _dbPlatform    = dbPlatform;
     _warning       = warning;
 }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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();
        }
Example #5
0
 public ValidationWarning(string migrationName, DataType dataType, DbPlatform dbPlatform, string warning)
 {
     _migrationName = migrationName;
     _dataType = dataType;
     _dbPlatform = dbPlatform;
     _warning = warning;
 }
Example #6
0
 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);
 }
Example #7
0
        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));
        }
Example #8
0
 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);
         }
     }
 }
Example #9
0
        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));
        }
Example #11
0
        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
            }
        }
Example #13
0
        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));
        }
Example #14
0
 private IEnumerable<IProviderMetadata> FindAllVersionsOf(DbPlatform dbPlatform)
 {
     return _providerFactory.GetProviderMetadatas()
                            .Where(m => m.Platform == dbPlatform.Platform && m.Driver == dbPlatform.Driver)
                            .OrderBy(m => m.MajorVersion);
 }
Example #15
0
 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();
 }
Example #16
0
        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
            }
        }
Example #19
0
 private IProviderMetadata FindLatest(DbPlatform dbPlatform)
 {
     return FindAllVersionsOf(dbPlatform)
         .LastOrDefault(p => p.MajorVersion <= dbPlatform.MajorVersion);
 }
Example #20
0
        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;
        }
Example #21
0
 private IEnumerable <IProviderMetadata> FindAllStartingWith(DbPlatform dbPlatform)
 {
     return(FindAllVersionsOf(dbPlatform)
            .Where(m => m.MajorVersion >= dbPlatform.MajorVersion));
 }
Example #22
0
 private IEnumerable<IProviderMetadata> FindAllStartingWith(DbPlatform dbPlatform)
 {
     return FindAllVersionsOf(dbPlatform)
         .Where(m => m.MajorVersion >= dbPlatform.MajorVersion);
 }
Example #23
0
 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);
        }
Example #25
0
 private IEnumerable <IProviderMetadata> FindAllVersionsOf(DbPlatform dbPlatform)
 {
     return(_providerRegistry.GetProviderMetadatas()
            .Where(m => m.Platform == dbPlatform.Platform && m.Driver == dbPlatform.Driver)
            .OrderBy(m => m.MajorVersion));
 }
Example #26
0
 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);
 }
Example #27
0
        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();
        }