/// <summary> /// Used by TestBase to avoid running dbinstaller when changescript are at latest version /// </summary> /// <param name="currentReadKeyFromPosition"></param> /// <param name="connectionString"></param> /// <returns></returns> /// <remarks></remarks> public static bool HasDbVersionChanged(ReadKeyFromPosition currentReadKeyFromPosition, string connectionString) { long?dbVersion = CheckInstalledDBVersion(connectionString); var scriptFilesToRun = GetScriptFilesToRun(dbVersion, DbScriptType.ChangeScript, currentReadKeyFromPosition, "ChangeScripts.Main"); return(scriptFilesToRun.Any()); }
/// <summary> /// Method to be used by all other apps. /// </summary> /// <param name="changeScriptsReadKeyFromPosition"> /// Determins if dbversion/orderkey should be /// read from start or end of filename</param> /// <param name="connectionString"> /// Use this to run old installer with views,proc and functions in changescripts /// </param> /// <remarks></remarks> public static void BuildDatabase(ReadKeyFromPosition changeScriptsReadKeyFromPosition, string connectionString) { long?dbVersion = CheckInstalledDBVersion(connectionString); // Run new change scripts ExecuteSqlScripts(dbVersion, DbScriptType.ChangeScript, ReadKeyFromPosition.Prefix, true, connectionString, "ChangeScripts.Main"); ExecuteSqlScriptsByObject(connectionString); }
private static SortedList <long, string> GetScriptFilesToRun(long?dbVersion, DbScriptType scriptType, ReadKeyFromPosition currentReadKeyFromPosition, params string[] includeFolders) { var scriptFilesToRun = new SortedList <long, string>(); Assembly asm = null; asm = InstallScriptsAssembly; string[] files = asm.GetManifestResourceNames(); int index = 1; foreach (string scriptFile in files) { var currentIncludeFolder = string.Empty; foreach (string includeFolder in includeFolders) { if (scriptFile.Contains(string.Format(".{0}.", includeFolder))) { currentIncludeFolder = includeFolder; } } if (!string.IsNullOrEmpty(currentIncludeFolder)) { var keyAsString = string.Empty; var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(scriptFile); var indexOfVersionUnderscore = 0; var tempFileNameForVersionSearch = fileNameWithoutExtension.Replace(" ", "_"); // Remove namespace from filename //tempFileNameForVersionSearch = tempFileNameForVersionSearch.Replace(String.Format("{0}.{1}.", asm.InferDefaultNamespace(), currentIncludeFolder), string.Empty); tempFileNameForVersionSearch = tempFileNameForVersionSearch.Replace(String.Format("{0}.{1}.", InstallScriptsAssemblyNamespace, currentIncludeFolder), string.Empty); if (currentReadKeyFromPosition == ReadKeyFromPosition.Suffix & (scriptType == DbScriptType.CreateDatabase | scriptType == DbScriptType.ChangeScript)) { indexOfVersionUnderscore = tempFileNameForVersionSearch.LastIndexOf('_'); keyAsString = tempFileNameForVersionSearch.Substring(indexOfVersionUnderscore + 1); } else if (currentReadKeyFromPosition == ReadKeyFromPosition.Prefix & (scriptType == DbScriptType.CreateDatabase | scriptType == DbScriptType.ChangeScript)) { indexOfVersionUnderscore = tempFileNameForVersionSearch.IndexOf('_'); keyAsString = tempFileNameForVersionSearch.Substring(0, indexOfVersionUnderscore); } else { keyAsString = index.ToString(); } long key = 0; bool parseResult = long.TryParse(keyAsString, out key); if (!parseResult) { throw new DatabaseInstallerException(string.Format(CultureInfo.InvariantCulture, "Failed to extract version number from file {0} ", scriptFile)); } if (dbVersion.HasValue == false || (key > dbVersion.Value)) { scriptFilesToRun.Add(key, scriptFile); } } index += 1; } return(scriptFilesToRun); }
public static void ExecuteSqlScripts(long?dbVersion, DbScriptType scriptType, ReadKeyFromPosition currentReadKeyFromPosition, bool useFileNameAsChangeVersion, string connectionstring, string dbPrefixToReplace, string dbPrefixReplacement, params string[] includeFolders) { dynamic scriptFilesToRun = GetScriptFilesToRun(dbVersion, scriptType, currentReadKeyFromPosition, includeFolders); ExecuteSqlScripts(scriptFilesToRun, scriptType, useFileNameAsChangeVersion, connectionstring, true, dbPrefixToReplace, dbPrefixReplacement); }
public static void ExecuteSqlScripts(long?dbVersion, DbScriptType scriptType, ReadKeyFromPosition currentReadKeyFromPosition, bool useFileNameAsChangeVersion, string connectionstring, params string[] includeFolders) { ExecuteSqlScripts(dbVersion, scriptType, currentReadKeyFromPosition, useFileNameAsChangeVersion, connectionstring, string.Empty, string.Empty, includeFolders); }