protected override void ProcessRecord()
        {
            base.ProcessRecord();

            var infoTextWriter = new LambdaTextWriter(WriteVerbose);

            List<ChangeScript> allChangeScripts = new DirectoryScanner(infoTextWriter, Encoding.UTF8, new DirectoryInfo(this.deltasDirectory))
                .GetChangeScripts();
            
            var repository = new ChangeScriptRepository(allChangeScripts);
            var changeScripts = repository.GetAvailableChangeScripts();

            DbmsFactory factory = new DbmsFactory(this.DatabaseType, this.ConnectionString);
            var queryExecuter = new QueryExecuter(factory);

            var schemaManager = new DatabaseSchemaVersionManager(queryExecuter, factory.CreateDbmsSyntax(), this.TableName);

            var appliedChanges = schemaManager.GetAppliedChanges();
            var notAppliedChangeScripts = changeScripts.Where(c => appliedChanges.All(a => a.ScriptNumber != c.ScriptNumber));

            var descriptionPrettyPrinter = new DescriptionPrettyPrinter();

            var objects = notAppliedChangeScripts
                .Select(script => new
                    {
                        Id = script.ScriptNumber,
                        Description = descriptionPrettyPrinter.Format(script.ScriptName),
                        File = script.FileInfo
                    });

            this.WriteObject(objects, true);
        }
示例#2
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();

            var infoTextWriter = new LambdaTextWriter(WriteVerbose);

            List <ChangeScript> allChangeScripts = new DirectoryScanner(infoTextWriter, Encoding.UTF8)
                                                   .GetChangeScriptsForDirectory(new DirectoryInfo(this.deltasDirectory));

            var repository    = new ChangeScriptRepository(allChangeScripts);
            var changeScripts = repository.GetAvailableChangeScripts();

            DbmsFactory factory       = new DbmsFactory(this.DatabaseType, this.ConnectionString);
            var         queryExecuter = new QueryExecuter(factory);

            var schemaManager = new DatabaseSchemaVersionManager(queryExecuter, factory.CreateDbmsSyntax(), this.TableName, true);

            var appliedChanges          = schemaManager.GetAppliedChanges();
            var notAppliedChangeScripts = changeScripts.Where(c => appliedChanges.All(a => a.ScriptNumber != c.ScriptNumber));

            var descriptionPrettyPrinter = new DescriptionPrettyPrinter();

            var objects = notAppliedChangeScripts
                          .Select(script => new
            {
                Id          = script.ScriptNumber,
                Description = descriptionPrettyPrinter.Format(script.ScriptName),
                File        = script.FileInfo
            });

            this.WriteObject(objects, true);
        }
示例#3
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();

            var infoTextWriter = new LambdaTextWriter(WriteVerbose);
                
            var updateText = new StringBuilder();
            var stringWriterForUpdateScript = new StringWriter(updateText);

            List<ChangeScript> changeScripts = new DirectoryScanner(infoTextWriter).GetChangeScriptsForDirectory(new DirectoryInfo(_deltasDirectory));
            new PowershellPrintStreamDeployer(_databaseSchemaVersion, new ChangeScriptRepository(changeScripts),
                                              stringWriterForUpdateScript,
                                              _dbmsFactory.CreateDbmsSyntax(), UseTransaction, null,
                                              infoTextWriter)
                .DoDeploy(Int32.MaxValue, infoTextWriter);

            using (var connection = _dbmsFactory.CreateConnection())
            {
                connection.Open();

                var command = connection.CreateCommand();
                command.CommandType = CommandType.Text;
                command.CommandText = updateText.ToString();
                var result = command.ExecuteNonQuery();
                WriteObject(new {RowsChanged = result});
            }
        }
示例#4
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();

            var infoTextWriter = new LambdaTextWriter(WriteVerbose);

            List<ChangeScript> allChangeScripts =
                new DirectoryScanner(infoTextWriter).GetChangeScriptsForDirectory(new DirectoryInfo(_deltasDirectory));
            
            var repository = new ChangeScriptRepository(allChangeScripts);
            var changeScripts = repository.GetOrderedListOfDoChangeScripts();

            var appliedChangeNumbers = _databaseSchemaVersion.GetAppliedChangeNumbers();
            var notAppliedChangeScripts = changeScripts.Where(c => !appliedChangeNumbers.Contains(c.GetId()));

            var descriptionPrettyPrinter = new DescriptionPrettyPrinter();

            var objects =
                notAppliedChangeScripts
                    .Select(script => new
                                          {
                                              Id = script.GetId(),
                                              Description = descriptionPrettyPrinter.Format(script.GetDescription()),
                                              File = script.GetFile()
                                          });

            WriteObject(objects, true);
        }
示例#5
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();

            if (!string.IsNullOrEmpty(UndoOutputFile) && string.IsNullOrEmpty(OutputFile))
            {
                WriteError(new ErrorRecord(new PSInvalidOperationException("Missing a file for output (just picked one for undo output)"),
                                           "NoUndoOutputFile", ErrorCategory.MetadataError, null));
                return;
            }

            var infoTextWriter = new LambdaTextWriter(WriteVerbose);

            TextWriter outputTextWriter;
            var openedFiles = new List<FileStream>();

            try
            {
                if (string.IsNullOrEmpty(OutputFile))
                {
                    outputTextWriter = new LambdaTextWriter(WriteObject);
                }
                else
                {
                    var outputFile = ToAbsolutePath(OutputFile);
                    WriteObject(String.Format("Writing update script to {0}", outputFile));
                    var openedFile = File.OpenWrite(outputFile);
                    openedFiles.Add(openedFile);

                    outputTextWriter = new StreamWriter(openedFile, Encoding.UTF8);
                    infoTextWriter = new LambdaTextWriter(WriteObject);
                }

                TextWriter undoTextWriter = null;
                if (!string.IsNullOrEmpty(UndoOutputFile))
                {
                    var undoOutputFile = ToAbsolutePath(UndoOutputFile);
                    WriteObject(String.Format("Writing undo update script to {0}", undoOutputFile));
                    var openedFile = File.OpenWrite(undoOutputFile);
                    openedFiles.Add(openedFile);
                    undoTextWriter = new StreamWriter(openedFile, Encoding.UTF8);
                }

                infoTextWriter.WriteLine("dbdeploy v2.12");

                List<ChangeScript> changeScripts = new DirectoryScanner(infoTextWriter).GetChangeScriptsForDirectory(new DirectoryInfo(_deltasDirectory));
                new PowershellPrintStreamDeployer(_databaseSchemaVersion, new ChangeScriptRepository(changeScripts),
                                                  outputTextWriter,
                                                  _dbmsFactory.CreateDbmsSyntax(), UseTransaction, undoTextWriter,
                                                  infoTextWriter)
                    .DoDeploy(Int32.MaxValue, infoTextWriter);

            }
            finally
            {
                foreach(var file in openedFiles)
                {
                    file.Close();
                }
            }
        }