Example #1
0
        /// <summary>
        ///   Recursively scripts all objects in the collection while walking the dependency tree to ensure
        ///   child or parent objects are dropped/created appropriately
        /// </summary>
        protected virtual void RecurseScript(Server server, 
                                             StringCollection output,
                                             ScriptNameObjectBase dbobject, 
                                             ScriptingOptions scriptOptions,
                                             ScriptEntity entity,
                                             bool parents)
        {
            if (dbobject == null || entity == null)
                return;

            LogMessage("Checking {0} '{1}'", dbobject.GetType().Name, dbobject.Name);

            if (CheckIsSystemObject(dbobject) || entity.HasBeenScripted || !Filter.IsMatch(dbobject.Name))
                return;

            entity.HasBeenScripted = true;

            var dependencies = parents ? entity.EntitiesWhichIDependOn : entity.EntitiesWhichDependOnMe;

            foreach (var dependencyEntity in dependencies)
            {
                if (dependencyEntity != entity &&
                    dependencyEntity.HasBeenScripted == false)
                {
                    RecurseScript(server,
                                  output,
                                  GetObjectByName(dependencyEntity.Schema, dependencyEntity.Name),
                                  scriptOptions,
                                  dependencyEntity,
                                  parents);
                }
            }

            LogMessage("Scripting {0} '{1}'", dbobject.GetType().Name, dbobject.Name);

            var scriptOutput = ((IScriptable)dbobject).Script(scriptOptions);
            var entries = new string[scriptOutput.Count + 1];
            scriptOutput.CopyTo(entries, 0);
            entries[entries.Length - 1] = "GO";
            output.AddRange(entries);
        }