public override UpgradeEngine Given() { scriptProvider = Substitute.For <IScriptProvider>(); scriptProvider.GetScripts(Arg.Any <IConnectionManager>()).Returns(new List <SqlScript> { new SqlScript("1234", "foo") }); versionTracker = Substitute.For <IJournal>(); dbConnection = Substitute.For <IDbConnection>(); dbCommand = Substitute.For <IDbCommand>(); dbConnection.CreateCommand().Returns(dbCommand); var connectionManager = new TestConnectionManager(dbConnection); scriptExecutor = new SqlScriptExecutor(() => connectionManager, () => Substitute.For <IUpgradeLog>(), null, () => true, null, () => versionTracker); var builder = new UpgradeEngineBuilder() .WithScript(new SqlScript("1234", "create table $var$ (Id int)")) .JournalTo(versionTracker) .WithVariable("var", "sub"); builder.Configure(c => c.ScriptExecutor = scriptExecutor); builder.Configure(c => c.ConnectionManager = connectionManager); var upgrader = builder.Build(); return(upgrader); }
public override UpgradeEngine Given() { scriptProvider = Substitute.For <IScriptProvider>(); scriptProvider.GetScripts(Arg.Any <IConnectionManager>()).Returns(new List <SqlScript> { new SqlScript("#1", "Content of #1"), new SqlScript("#3", "Content of #3"), }); versionTracker = Substitute.For <IJournal>(); versionTracker.GetExecutedScripts().Returns(new[] { "#1", "#2", "#3" }); scriptExecutor = Substitute.For <IScriptExecutor>(); var config = new UpgradeConfiguration { ConnectionManager = new TestConnectionManager(Substitute.For <IDbConnection>()) }; config.ScriptProviders.Add(scriptProvider); config.ScriptExecutor = scriptExecutor; config.Journal = versionTracker; var upgrader = new UpgradeEngine(config); return(upgrader); }
public DowngradeEnabledTableJournal( Func <IConnectionManager> connectionManager, Func <IUpgradeLog> logger, ISqlObjectParser sqlObjectParser, string schema, string table, IScriptProvider downgradeScriptsProvider) : base(connectionManager, logger, sqlObjectParser, schema, table) { _downgradeScripts = downgradeScriptsProvider.GetScripts(connectionManager()).ToList(); journalIsInLatestVersion = false; }
public override UpgradeEngine Given() { scriptProvider = Substitute.For <IScriptProvider>(); scriptProvider.GetScripts(Arg.Any <Func <IDbConnection> >()).Returns(new List <SqlScript> { new SqlScript("1234", "foo") }); versionTracker = Substitute.For <IJournal>(); scriptExecutor = Substitute.For <IScriptExecutor>(); var config = new UpgradeConfiguration(); config.ScriptProviders.Add(scriptProvider); config.ScriptExecutor = scriptExecutor; config.Journal = versionTracker; var upgrader = new UpgradeEngine(config); return(upgrader); }
public async Task <CommandResult> Execute() { // Schema changes and data migration StringBuilder sb = new StringBuilder(); Output += "Forming header...\n"; var header = GetHeaderWithVersion(); Output += "Getting current schema change scripts...\n"; var schemaScripts = await _scriptProvider.GetScripts(_databaseProjectPath + "\\SchemaChangeScriptsCurrent", Depth.AllChilds); List <ScriptContainer> schemasScripts = schemaScripts.OrderBy(o => o.Name).ToList(); if (schemasScripts.Count > 0) { sb.Append("/*\n"); sb.Append("******************************************************************************************** \n"); sb.Append("* SCHEMA CHANGES & DATA MIGRATION * \n"); sb.Append("******************************************************************************************** \n"); sb.Append("Scripts found: " + schemasScripts.Count + "\n\n"); sb.Append("*/\n"); sb.Append("PRINT '***** Deploying schema changes/data migrations...' \n\n"); foreach (var scriptContainer in schemasScripts) { header = GetHeaderWithVersion(); sb.Append(header); sb.Append(scriptContainer.ScriptBody); sb.Append(_footer); sb.Append("\n/* *************************************************************************** */ \n\n"); _requiredVersion = _mayorVersion + "." + _minorVersion + "." + _build + ".0"; _build++; } } else { sb.Append("/* ********************* No schema changes or data migration found. */ \n "); } Output += "Getting programmability scripts...\n"; var programScripts = await _scriptProvider.GetScripts(_databaseProjectPath + "\\Programmability", Depth.AllChilds); List <ScriptContainer> progScripts = programScripts.ToList(); sb.Append("/*\n"); sb.Append("**************************************************************************************** \n"); sb.Append("* STORE PROCEDURES/TYPES/FUNCTIONS * \n"); sb.Append("**************************************************************************************** \n"); sb.Append("Scripts found: " + progScripts.Count + "\n\n"); sb.Append("*/\n"); sb.Append("PRINT '***** Deploying Store procedures, types and functions...' \n\n"); // Preparing store procedures Output += "Getting script for deleting currents...\n"; var deleteCurrent = File.ReadAllText("Templates\\DeleteScripts.sql"); RemoveVersionControlProcedures(progScripts); Output += "Replacing single quotes with doubles...\n"; ReplaceQuotesWithDoubleQuotes(progScripts); Output += "Wrapping everything with executeSql...\n"; AddExecuteSql(progScripts); Output += "Merging all scrits in one...\n"; string totalScript = MergeAllScriptsTogether(progScripts); Output += "Adding header and footer...\n"; sb.Append(GetHeaderWithVersion()); sb.Append("\n--******* Delete all procedures/functions and custom types \n\n"); sb.Append(deleteCurrent); sb.Append("\n--******* Re-deploy all procedures/functions and custom types \n\n"); sb.Append(totalScript); sb.Append(_footer); Output += $"Total scripts processed: {progScripts.Count()}"; string lastVersion = _mayorVersion + "." + _minorVersion.ToString("00") + "." + _build.ToString("000"); if (_outputFolderSelect == OutputFolderSelect.Auto) { _outputFolder = $"\\Updates\\Release {_mayorVersion}.{_minorVersion}\\"; } File.WriteAllText(_outputFolder + "\\TV-" + lastVersion + ".000.sql", sb.ToString()); _currentVersionWriter.WriteCurrentVersion(new CurrentVersion() { Mayor = _mayorVersion, Minor = _minorVersion, Build = _build }); _finalBuild = _build; Debug.WriteLine(sb); return(new CommandResult(0, "ok")); }