Пример #1
0
        public void run_the_task()
        {
            if (this.loggingHelper.HasLoggedErrors)
            {
                return;
            }

            Log4NetAppender.configure_without_console();
            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(this);


            if (Restore && string.IsNullOrEmpty(RestoreFromPath))
            {
                throw new Exception(
                          "If you set Restore to true, you must specify a location for the database to be restored from. That property is RestoreFromPath in MSBuild.");
            }

            ApplicationConfiguraton.build_the_container(this);

            IRunner roundhouse_runner = new RoundhouseMigrationRunner(
                RepositoryPath,
                Container.get_an_instance_of <EnvironmentSet>(),
                Container.get_an_instance_of <KnownFolders>(),
                Container.get_an_instance_of <FileSystemAccess>(),
                Container.get_an_instance_of <DatabaseMigrator>(),
                Container.get_an_instance_of <VersionResolver>(),
                Silent,
                Drop,
                DoNotCreateDatabase,
                WithTransaction,
                this);

            roundhouse_runner.run();
        }
        /// <summary>
        /// Set up your migrator and call this to generate a diff file. Known limitations - will not detect size changes or renames. In other words, destructive changes will need to be done by hand.
        /// </summary>
        /// <param name="diffingType">Are you in greenfield development or have you went to production (maintenance)? Do you want it to restore during maintenance mode?</param>
        /// <param name="nameOfOutputScriptToCreateOrReplace">This is something like 0001_CreateTables.sql. This will end up in your up folder, assuming you have set up your migrator configuration correctly.</param>
        /// <param name="databaseMigrator">The Migrator to use when running.</param>
        /// <param name="mappingsAssembly">This is the assembly that contains your mapping files.</param>
        /// <param name="conventionsAssembly">This is the assembly that contains your conventions. If you do not have conventions set up, just pass null. It will use the mappingsAssembly</param>
        public void Run(RoundhousEFluentNHDiffingType diffingType, string nameOfOutputScriptToCreateOrReplace, Migrate databaseMigrator, Assembly mappingsAssembly, Assembly conventionsAssembly)
        {
            name_of_script_to_create = nameOfOutputScriptToCreateOrReplace;
            var configuration = databaseMigrator.GetConfiguration();

            configuration.Silent  = true;
            configuration.Restore = false;
            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);
            path_to_sql_scripts_up_folder = Path.Combine(configuration.SqlFilesDirectory, configuration.UpFolderName);

            databaseMigrator.Set(c =>
            {
                c.Silent      = true;
                c.VersionFile = mappingsAssembly.Location;
            }
                                 );

            switch (diffingType)
            {
            case RoundhousEFluentNHDiffingType.InitialDevelopment:
                run_initial_database_setup(databaseMigrator, configuration, mappingsAssembly, conventionsAssembly);
                break;

            case RoundhousEFluentNHDiffingType.Maintenance:
                run_maintenance_database_setup(false, databaseMigrator, configuration, mappingsAssembly, conventionsAssembly, name_of_script_to_create);
                break;

            case RoundhousEFluentNHDiffingType.MaintenanceWithRestore:
                run_maintenance_database_setup(true, databaseMigrator, configuration, mappingsAssembly, conventionsAssembly, name_of_script_to_create);
                break;
            }
        }
Пример #3
0
        public static void InitMigrationDbStructure(string connectionString)
        {
            Migrate migrator = new Migrate().Set(c =>
            {
                c.Logger                    = new ConsoleLogger();
                c.ConnectionString          = connectionString;
                c.SqlFilesDirectory         = MIGRATION_PATH;
                c.SprocsFolderName          = @"dbo\Stored Procedures";
                c.ViewsFolderName           = @"dbo\Views";
                c.FunctionsFolderName       = @"dbo\Functions";
                c.UpFolderName              = @"Scripts\Migrations\up";
                c.RunBeforeUpFolderName     = @"Scripts\Migrations\runbeforeup";
                c.RunFirstAfterUpFolderName = @"Scripts\Migrations\runfirstafterup";
                c.DownFolderName            = @"Scripts\Migrations\down";
                c.Restore                   = false;
                c.Silent                    = true;
                c.Baseline                  = true;
                c.WithTransaction           = true;
                c.UsingVSDBProjectScripts   = true;
            });

            var configuration = migrator.GetConfiguration();

            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);
            migrator.Run();
        }
Пример #4
0
            public override void Context()
            {
                migrator = new Migrate().Set(p =>
                {
                    p.Logger            = new ConsoleLogger();
                    p.DatabaseName      = database_name;
                    p.SqlFilesDirectory = sql_files_folder;
                    p.Silent            = true;
                });
                migrator.Run();
                ConfigurationPropertyHolder configuration_property_holder = migrator.GetConfiguration();

                ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration_property_holder);
                db.configuration                 = configuration_property_holder;
                db.server_name                   = configuration_property_holder.ServerName ?? string.Empty;
                db.database_name                 = configuration_property_holder.DatabaseName ?? string.Empty;
                db.connection_string             = configuration_property_holder.ConnectionString;
                db.admin_connection_string       = configuration_property_holder.ConnectionStringAdmin;
                db.roundhouse_schema_name        = configuration_property_holder.SchemaName;
                db.version_table_name            = configuration_property_holder.VersionTableName;
                db.scripts_run_table_name        = configuration_property_holder.ScriptsRunTableName;
                db.scripts_run_errors_table_name = configuration_property_holder.ScriptsRunErrorsTableName;
                db.command_timeout               = configuration_property_holder.CommandTimeout;
                db.admin_command_timeout         = configuration_property_holder.CommandTimeoutAdmin;
                db.restore_timeout               = configuration_property_holder.RestoreTimeout;
                db.initialize_connections(configuration_property_holder);
            }
Пример #5
0
        public static void Run(Logger log, string instanceName, string databaseType, string databaseName, bool dropDatabase, string scriptsLocation, string environmentName, bool useSimpleRecoveryMode)
        {
            _instanceName          = instanceName;
            _databaseType          = databaseType;
            _databaseName          = databaseName;
            _dropDatabase          = dropDatabase;
            _scriptsLocation       = scriptsLocation;
            _environmentName       = environmentName;
            _useSimpleRecoveryMode = useSimpleRecoveryMode;

            var loggers = new List <Logger>();

            loggers.Add(log);
            loggers.Add(new Log4NetLogger(_logger));

            var multiLogger = new MultipleLogger(loggers);
            var config      = GetRoundhousEConfiguration(multiLogger);

            //should be wrapped in his api
            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(config);

            //should be wrapped in his api
            ApplicationConfiguraton.build_the_container(config);

            var runner = GetMigrationRunner(config);

            runner.run();
        }
Пример #6
0
            private static void delete_database()
            {
                ConfigurationPropertyHolder configuration_property_holder = migrator.GetConfiguration();

                ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration_property_holder);
                db.configuration = configuration_property_holder;

                db.delete_database_if_it_exists();
            }
Пример #7
0
        public static ConfigurationPropertyHolder set_up_configuration_and_build_the_container(string[] args, Mode mode = Mode.Normal)
        {
            ConfigurationPropertyHolder configuration = new DefaultConfiguration();

            parse_arguments_and_set_up_configuration(configuration, args, mode);

            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);
            ApplicationConfiguraton.build_the_container(configuration);

            return(configuration);
        }
Пример #8
0
        public static ConfigurationPropertyHolder set_up_configuration_and_build_the_container(string[] args)
        {
            ConfigurationPropertyHolder configuration = new ConsoleConfiguration();

            parse_arguments_and_set_up_configuration(configuration, args);
            if (configuration.Debug)
            {
                change_log_to_debug_level();
            }

            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);
            ApplicationConfiguraton.build_the_container(configuration);

            return(configuration);
        }
        public MigrationResultSet Run(string connection, string workingDirectory, string createScript, string databaseName, string server, int timeout)
        {
            var logger = new RelativityRoundHouseLogger();

            //create migration agent
            var migrationAgent = new Migrate();

            //get default round house settings
            var configuration = migrationAgent.GetConfiguration();

            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);

            //get the action delegate settings
            var roundHouseService = new RoundHouseSettingsService
            {
                ServerName = server
            };
            var roundhouseConfiguration = roundHouseService.GetRoundHouseSettings(connection, workingDirectory, createScript);

            //register the delegate
            migrationAgent.Set(roundhouseConfiguration);
            if (!string.IsNullOrEmpty(server))
            {
                migrationAgent.Set(x => x.DatabaseName = databaseName);
            }
            migrationAgent.SetCustomLogging(logger);
            migrationAgent.Set(x => x.CommandTimeout      = timeout);
            migrationAgent.Set(x => x.CommandTimeoutAdmin = timeout);

            // Update the database
            try
            {
                // Some googling shows that roundhouse may not be threadsafe.
                // This starts a lock context to prevent multiple threads running roundhouse deployments at the same time.
                lock (obj)
                {
                    migrationAgent.Run();
                }
            }
            catch (Exception e)
            {
                //This is theoretically already logged by RoundhousE, but if something in RH breaks rather than in SQL, I want to know
                logger.Messages.Add(new LogMessage(LogSeverity.Error, e.ToString()));
                return(new MigrationResultSet(false, logger.Messages));
            }

            return(new MigrationResultSet(true, logger.Messages));
        }
Пример #10
0
        private RoundhouseMigrationRunner GetMigrationRunner()
        {
            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(this.configuration);
            ApplicationConfiguraton.build_the_container(this.configuration);

            return(new RoundhouseMigrationRunner(
                       this.configuration.RepositoryPath,
                       Container.get_an_instance_of <environments.EnvironmentSet>(),
                       Container.get_an_instance_of <KnownFolders>(),
                       Container.get_an_instance_of <FileSystemAccess>(),
                       Container.get_an_instance_of <DatabaseMigrator>(),
                       Container.get_an_instance_of <VersionResolver>(),
                       this.configuration.Silent,
                       this.configuration.Drop,
                       this.configuration.DoNotCreateDatabase,
                       this.configuration.WithTransaction,
                       this.configuration));
        }
        /// <summary>
        /// Set up your migrator and call this to generate a diff file. Known limitations - will not detect size changes or renames. In other words, destructive changes will need to be done by hand.
        /// </summary>
        /// <param name="databaseMigrator">The Migrator to use when running.</param>
        /// <param name="migrationsAssembly">This is the assembly that contains your mapping files.</param>
        public void Run(Migrate databaseMigrator, Assembly migrationsAssembly)
        {
            var configuration = databaseMigrator.GetConfiguration();

            configuration.Silent  = true;
            configuration.Restore = false;
            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);
            path_to_sql_scripts_up_folder = Path.Combine(configuration.SqlFilesDirectory, configuration.UpFolderName);

            databaseMigrator.Set(c =>
            {
                c.Silent      = true;
                c.VersionFile = migrationsAssembly.Location;
            }
                                 );

            run_changes(databaseMigrator, configuration, migrationsAssembly);
        }
Пример #12
0
        /// <summary>
        /// Call this method to run the migrator after you have set the options.
        /// </summary>
        public void Run()
        {
            ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration);
            ApplicationConfiguraton.build_the_container(configuration);

            RoundhouseMigrationRunner migrator = new RoundhouseMigrationRunner(
                configuration.RepositoryPath,
                Container.get_an_instance_of <Environment>(),
                Container.get_an_instance_of <KnownFolders>(),
                Container.get_an_instance_of <FileSystemAccess>(),
                Container.get_an_instance_of <DatabaseMigrator>(),
                Container.get_an_instance_of <VersionResolver>(),
                configuration.Silent,
                configuration.Drop,
                configuration.DoNotCreateDatabase,
                configuration.WithTransaction,
                configuration.RecoveryModeSimple,
                configuration);

            migrator.run();
        }
Пример #13
0
            public override void Context()
            {
                base.Context();

                ConfigurationPropertyHolder configuration_property_holder = migrator.GetConfiguration();

                ApplicationConfiguraton.set_defaults_if_properties_are_not_set(configuration_property_holder);
                db.configuration                 = configuration_property_holder;
                db.server_name                   = configuration_property_holder.ServerName ?? string.Empty;
                db.database_name                 = configuration_property_holder.DatabaseName ?? string.Empty;
                db.connection_string             = configuration_property_holder.ConnectionString;
                db.admin_connection_string       = configuration_property_holder.ConnectionStringAdmin;
                db.roundhouse_schema_name        = configuration_property_holder.SchemaName;
                db.version_table_name            = configuration_property_holder.VersionTableName;
                db.scripts_run_table_name        = configuration_property_holder.ScriptsRunTableName;
                db.scripts_run_errors_table_name = configuration_property_holder.ScriptsRunErrorsTableName;
                db.command_timeout               = configuration_property_holder.CommandTimeout;
                db.admin_command_timeout         = configuration_property_holder.CommandTimeoutAdmin;
                db.restore_timeout               = configuration_property_holder.RestoreTimeout;
                db.initialize_connections(configuration_property_holder);
            }