Example #1
0
        /// <summary>
        /// Get scripts from the specified version folder.
        /// The version folder name is prefixed to the scriptname to make scripts with duplicate names unique when from different folders.
        /// </summary>
        /// <param name="folder">name of subfolder within directory path</param>
        private IEnumerable <SqlScript> GetScriptsFromFolder(string folder)
        {
            var absoluteFolderPath = Path.Combine(directoryPath, folder);

            var folderedFileNames = Directory.GetFiles(absoluteFolderPath, "*.sql")
                                    .Select(f => Path.Combine(folder, new FileInfo(f).Name))
                                    .AsEnumerable();

            // filter on folder\file combination
            if (this.filter != null)
            {
                folderedFileNames = folderedFileNames.Where(filter);
            }

            // load file contents
            var sqlScripts = new List <SqlScript>();

            foreach (var folderedFileName in folderedFileNames)
            {
                var filePath = Path.Combine(directoryPath, folderedFileName);
                using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    sqlScripts.Add(SqlScript.FromStream(folderedFileName, fileStream, encoding));
                }
            }

            return(sqlScripts);
        }
Example #2
0
        private IEnumerable <SqlScript> GetAssemblyScripts()
        {
            var allScripts = _assembly.GetManifestResourceNames().Where(_filter).ToArray()
                             .Select(resourceName => SqlScript.FromStream(resourceName, _assembly.GetManifestResourceStream(resourceName), _encoding))
                             .OrderBy(sqlScript => sqlScript.Name)
                             .ToList();

            return(allScripts);
        }
Example #3
0
 public IEnumerable <SqlScript> GetScripts()
 {
     return(assembly
            .GetManifestResourceNames()
            .Where(filter)
            .OrderBy(x => x)
            .Select(s => SqlScript.FromStream(s, assembly.GetManifestResourceStream(s), encoding))
            .ToList());
 }
Example #4
0
 /// <summary>
 /// Gets all scripts that should be executed.
 /// </summary>
 /// <returns></returns>
 public IEnumerable <SqlScript> GetScripts(IConnectionManager connectionManager)
 {
     return(assemblies
            .Select(assembly => new
     {
         Assembly = assembly,
         ResourceNames = assembly.GetManifestResourceNames().Where(filter).ToArray()
     })
            .SelectMany(x => x.ResourceNames.Select(resourceName => SqlScript.FromStream(resourceName, x.Assembly.GetManifestResourceStream(resourceName), encoding, sqlScriptOptions)))
            .OrderBy(sqlScript => sqlScript.Name)
            .ToList());
 }
Example #5
0
        /// <summary>
        /// Gets all scripts that should be executed.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <SqlScript> GetScripts(IConnectionManager connectionManager)
        {
            var assembliesList = this.assemblies
                                 .Select(assembly => new
            {
                Assembly      = assembly,
                ResourceNames = assembly.GetManifestResourceNames().Where(this.filter).ToArray()
            });

            var sqlScripts = assembliesList
                             .SelectMany(x => x.ResourceNames.Select(resourceName => SqlScript.FromStream(resourceName, x.Assembly.GetManifestResourceStream(resourceName), this.encoding)))
                             .OrderBy(sqlScript => sqlScript.Name)
                             .ToList();

            return(sqlScripts);
        }
Example #6
0
 /// <summary>
 /// Gets all scripts that should be executed.
 /// </summary>
 public IEnumerable <SqlScript> GetScripts(IConnectionManager connectionManager)
 {
     if (!options.UseOnlyFilenameForScriptName)
     {
         var files = new List <string>();
         foreach (var scriptExtension in options.Extensions)
         {
             files.AddRange(Directory.GetFiles(directoryPath, scriptExtension, ShouldSearchSubDirectories()));
         }
         if (filter != null)
         {
             files = files.Where(filter).ToList();
         }
         return(files.Select(x => SqlScript.FromFile(directoryPath, x, encoding, sqlScriptOptions))
                .OrderBy(x => x.Name)
                .ToList());
     }
     else
     {
         var files = new List <FileInfo>();
         foreach (var scriptExtension in options.Extensions)
         {
             files.AddRange(
                 new DirectoryInfo(directoryPath).GetFiles(scriptExtension, ShouldSearchSubDirectories())
                 );
         }
         var dupeFiles = files.GroupBy(f => f.Name).Where(grp => grp.Count() > 1).SelectMany(f => f.Select(fi => fi.FullName)).ToList();
         if (dupeFiles.Count > 0)
         {
             var sbError = new StringBuilder();
             sbError.AppendLine("Duplicate filenames:");
             foreach (var file in dupeFiles)
             {
                 sbError.AppendLine($"- {file}");
             }
             throw new Exception(sbError.ToString());
         }
         if (filter != null)
         {
             files = files.Where(x => filter(x.Name)).ToList();
         }
         return(files.Select(x => SqlScript.FromStream(x.Name, new FileStream(x.FullName, FileMode.Open, FileAccess.Read), encoding, sqlScriptOptions))
                .OrderBy(x => x.Name)
                .ToList());
     }
 }
Example #7
0
        public IEnumerable <SqlScript> GetScripts(IConnectionManager connectionManager)
        {
            var sqlScripts = _assembly.GetManifestResourceNames()
                             .Where(IsApplicable)
                             .ToArray()
                             .Select(x => SqlScript.FromStream(x, _assembly.GetManifestResourceStream(x), Encoding.UTF8))
                             .OrderBy(x =>
            {
                var folders = x.Name.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
                if (folders.Length < 2)
                {
                    return(folders[folders.Length - 2]);
                }
                return(x.Name);
            }).ToList();

            return(sqlScripts);
        }
Example #8
0
        /// <summary>
        /// Gets all the migration scripts from the assemblies and ensures order.
        /// </summary>
        private List <SqlScript> GetMigrationScripts(Assembly[] assemblies)
        {
            var scripts = new List <SqlScript>();
            var count   = 0;

            foreach (var ass in assemblies)
            {
                foreach (var name in ass.GetManifestResourceNames().Where(x => ScriptsNamespaceFilter(x)))
                {
                    scripts.Add(SqlScript.FromStream(name, ass.GetManifestResourceStream(name), Encoding.Default, new SqlScriptOptions {
                        RunGroupOrder = count, ScriptType = DbUp.Support.ScriptType.RunOnce
                    }));
                }

                count++;
            }

            return(scripts);
        }