Beispiel #1
0
 public HashedFileSystemScriptsProvider(string directoryPath, FileSystemScriptOptions fileSystemScriptOptions, Func <string, bool> filter, IHashedJournal journal)
     : base(journal)
 {
     _directoryPath           = directoryPath;
     _fileSystemScriptOptions = fileSystemScriptOptions;
     this._filter             = filter;
 }
 ///<summary>
 ///</summary>
 ///<param name="directoryPath">Path to SQL upgrade scripts</param>
 ///<param name="options">Different options for the file system script provider</param>
 public FileSystemScriptProvider(string directoryPath, FileSystemScriptOptions options)
 {
     if (options==null)
         throw new ArgumentNullException("options");
     this.directoryPath = directoryPath;
     this.filter = options.Filter;
     this.encoding = options.Encoding;
     this.options = options;
 }
Beispiel #3
0
            public override FileSystemScriptProvider Given()
            {
                TestScripts.Create(out testPath);
                var options = new FileSystemScriptOptions()
                {
                    IncludeSubDirectories = true
                };

                return(new FileSystemScriptProvider(testPath, options));
            }
        public bool ApplyUpgrades(string scriptPath, string connectionString)
        {
            if (connectionString.StartsWith("$"))
            {
                // Use the
                connectionString = Environment.GetEnvironmentVariable(connectionString.Substring(1));
            }
            var scriptPathInfo = new DirectoryInfo(scriptPath);


            var connectionParser = new SqlConnectionStringBuilder(connectionString);

            Log.Information("Executing upgrade on: {database}", connectionParser.InitialCatalog);

            var fsOptions = new FileSystemScriptOptions()
            {
                //Extensions = new string[] { ".sql" },
                IncludeSubDirectories = true,
                Filter = (file) => {
                    Log.Information("Found file {filename} for consideration", file);
                    return(true);
                }
            };
            var customLogger = new DbUpLogger();
            var upgrader     =
                DeployChanges.To
                .SqlDatabase(connectionString)
                //.WithScripts(provider)
                .WithScriptsFromFileSystem(scriptPathInfo.FullName, fsOptions)
                //.LogToAutodetectedLog()
                .LogToNowhere()
                .LogTo(customLogger)
                .Build();

            var result = upgrader.PerformUpgrade();

            if (!result.Successful)
            {
                var scripts      = customLogger.BrokenScripts;
                var sqlException = result.Error as SqlException;

                var scriptName = "unknown";
                if (scripts.Count > 0)
                {
                    scriptName = scripts.FirstOrDefault();
                }

                Log.Error("UpgradeSchema failed: {message} in {scriptName} (Line number: {lineNumber})",
                          result.Error.Message, scriptName, sqlException.LineNumber);
                return(false);
            }
            return(true);
        }
Beispiel #5
0
 public FileSystemScriptsDbUpdater(string folderName,
                                   FileSystemScriptOptions fileSystemScriptOptions,
                                   string databaseName,
                                   string connectionStringName,
                                   IDictionary <string, string> scriptVariables,
                                   bool seedData          = false,
                                   Env env                = Env.Undefined,
                                   IUpgradeLog upgradeLog = null)
     : base(folderName, databaseName, connectionStringName, scriptVariables, seedData, env, upgradeLog)
 {
     this._fileSystemScriptOptions = fileSystemScriptOptions;
 }
Beispiel #6
0
 public override FileSystemScriptProvider Given()
 {
     TestScripts.Create(out testPath);
     // Given a filter is provided..
     options = new FileSystemScriptOptions()
     {
         Filter = (a) =>
         {
             _FilterExecuted = true;
             return(true);
         }
     };
     return(new FileSystemScriptProvider(testPath, options));
 }
Beispiel #7
0
        private static DatabaseUpgradeResult ExecuteDBScript(string connectionString, string dbScriptFileName)
        {
            FileSystemScriptOptions fsso = new FileSystemScriptOptions();

            fsso.IncludeSubDirectories = true;
            fsso.Filter = (string s) => s.EndsWith(Path.GetFileName(dbScriptFileName));
            string directoryPath = Path.GetDirectoryName(dbScriptFileName);
            var    upgrader      =
                DeployChanges.To
                .MySqlDatabase(connectionString)
                .WithScriptsFromFileSystem(directoryPath, fsso)
                .LogToConsole()
                .JournalTo(new NullJournal())
                .Build();

            return(upgrader.PerformUpgrade());
        }
Beispiel #8
0
        public static DbUpdater UsingScriptsInFileSystem(string folderName,
                                                         string databaseName,
                                                         string connectionStringName,
                                                         IDictionary <string, string> scriptVariables,
                                                         FileSystemScriptOptions fileSystemScriptOptions = null,
                                                         bool seedData      = false,
                                                         Env env            = Env.Undefined,
                                                         IUpgradeLog logger = null)
        {
            if (fileSystemScriptOptions == null)
            {
                fileSystemScriptOptions = new FileSystemScriptOptions()
                {
                    IncludeSubDirectories = true,
                    Filter = name => name.EndsWith(".sql")
                };
            }

            return(new FileSystemScriptsDbUpdater(folderName, fileSystemScriptOptions, databaseName, connectionStringName, scriptVariables, seedData, env, logger));
        }
Beispiel #9
0
        private IEnumerable <FileInfo> GetAllFiles(string directoryPath, FileSystemScriptOptions fileSystemScriptOptions)
        {
            var files = new List <FileInfo>();

            if (!Directory.Exists(directoryPath))
            {
                throw new DirectoryNotFoundException($"No directory found at {directoryPath}.");
            }

            var directory = new DirectoryInfo(directoryPath);

            if (fileSystemScriptOptions.IncludeSubDirectories)
            {
                foreach (var subDirectory in directory.EnumerateDirectories())
                {
                    files.AddRange(GetAllFiles(subDirectory.FullName, fileSystemScriptOptions));
                }
            }

            files.AddRange(directory.GetFiles());

            return(files);
        }
Beispiel #10
0
 /// <summary>
 /// Adds all scripts from a folder on the file system, with custom options (Encoding, filter, etc.).
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="path">The directory path.</param>
 /// <param name="options">Options for the file System Provider</param>
 /// <returns>
 /// The same builder
 /// </returns>
 public static UpgradeEngineBuilder WithScriptsFromFileSystem(this UpgradeEngineBuilder builder, string path, FileSystemScriptOptions options)
 {
     return(WithScripts(builder, new FileSystemScriptProvider(path, options)));
 }
Beispiel #11
0
 /// <summary>
 /// Adds all scripts from a folder on the file system, with custom options (Encoding, filter, etc.).
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="path">The directory path.</param>
 /// <param name="options">Options for the file System Provider</param>
 /// <returns>
 /// The same builder
 /// </returns>
 public static UpgradeEngineBuilder WithScriptsFromFileSystem(this UpgradeEngineBuilder builder, string path, FileSystemScriptOptions options)
 {
     return WithScripts(builder, new FileSystemScriptProvider(path, options));
 }
        public void options_should_include_sql()
        {
            var options = new FileSystemScriptOptions();

            options.Extensions.ShouldContain("*.sql");
        }