/// <summary>
        /// Configures the database extract
        /// </summary>
        private void SetupDatabaseExtract()
        {
            Utilities.Logger.LogInformation("Initializing database extract...");
            this.scriptProcessors = new Dictionary <SqlFileTypes, ProcessDatabase>();

            this.scriptProcessors.Add(SqlFileTypes.Filegroups, new ProcessFilegroups(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.PartitionFunctions, new ProcessPartitionFunctions(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.PartitionSchemes, new ProcessPartitionScheme(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.FullTextCatalogs, new ProcessFullTextCatalogs(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.Schemas, new ProcessSchema(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.ClrAssemblies, new ProcessClrAssemblies(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));

            ProcessTables et = new ProcessTables(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName);

            this.scriptProcessors.Add(SqlFileTypes.Tables, et);

            this.scriptProcessors.Add(SqlFileTypes.Routes, new ProcessRoutes(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.Messages, new ProcessMessages(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.Contracts, new ProcessContracts(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.BrokerQueue, new ProcessQueues(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.Services, new ProcessServices(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));

            ProcessFunctions ef = new ProcessFunctions(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName);

            this.scriptProcessors.Add(SqlFileTypes.Functions, ef);

            ProcessViews ev = new ProcessViews(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName);

            this.scriptProcessors.Add(SqlFileTypes.Views, ev);

            ProcessClusteredConstraints ecc = new ProcessClusteredConstraints(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName);

            this.scriptProcessors.Add(SqlFileTypes.ClusteredConstraints, ecc);
            ecc.Tables = et;
            ecc.Views  = ev;

            ProcessConstraints ec = new ProcessConstraints(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName);

            this.scriptProcessors.Add(SqlFileTypes.Constraints, ec);
            ec.Tables = et;
            ec.Views  = ev;

            this.scriptProcessors.Add(SqlFileTypes.FullTextIndexes, new ProcessFullTextIndexes(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            ProcessRoles er = new ProcessRoles(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName);

            this.scriptProcessors.Add(SqlFileTypes.Roles, er);

            this.scriptProcessors.Add(SqlFileTypes.Circular, new ProcessCircular(this.database, ef, ev, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.Procedures, new ProcessProcedures(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));
            this.scriptProcessors.Add(SqlFileTypes.Synonyms, new ProcessSynonyms(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName, this.GenerateDropForSynonyms));
            this.scriptProcessors.Add(SqlFileTypes.Triggers, new ProcessTriggers(this.database, this.appendDatabaseNameToScripts, this.appendDatabaseName));

            foreach (ProcessDatabase es in this.scriptProcessors.Values)
            {
                es.SplitDropToSeperateFile = this.SplitDropToSeperateFile;
            }
        }
 /// <summary>
 /// Initializes a new instance of the ProcessCircular class
 /// </summary>
 /// <param name="targetDatabase">The database against which the processor will execute</param>
 /// <param name="functions">The functions associated with the database</param>
 /// <param name="views">The views associated with the database</param>
 /// <param name="appendDatabaseNameToScripts">Indicates whether or not the database name will be appended to the script output</param>
 /// <param name="appendDatabaseName">The name to append</param>
 internal ProcessCircular(Database targetDatabase, ProcessFunctions functions, ProcessViews views, bool appendDatabaseNameToScripts, string appendDatabaseName)
     : base(targetDatabase, appendDatabaseNameToScripts, appendDatabaseName)
 {
     this.functions = functions;
     this.views     = views;
 }
 /// <summary>
 /// Initializes a new instance of the ProcessCircular class
 /// </summary>
 /// <param name="targetDatabase">The database against which the processor will execute</param>
 /// <param name="functions">The functions associated with the database</param>
 /// <param name="views">The views associated with the database</param>
 internal ProcessCircular(Database targetDatabase, ProcessFunctions functions, ProcessViews views)
     : this(targetDatabase, functions, views, false, string.Empty)
 {
 }