Beispiel #1
0
            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);
            }
Beispiel #2
0
            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);
            }
Beispiel #3
0
 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;
 }
Beispiel #4
0
            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);
            }
Beispiel #5
0
        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"));
        }