public void Add(IInstallStatement statement)
 {
     if (statement == null) {
         throw new ArgumentNullException("statement");
     }
     if (!statement.ObjectName.StartsWith("@")) {
         List<DependencyNode> dependencyNodes;
         if (!dependencies.TryGetValue(statement.ObjectName, out dependencyNodes)) {
             dependencyNodes = new List<DependencyNode>();
             dependencies.Add(statement.ObjectName, dependencyNodes);
         }
         dependencyNodes.Add(new DependencyNode(statement.ObjectName, statement));
     }
 }
 public DependencyNode(string objectName, IInstallStatement statement)
 {
     this.objectName = objectName;
     this.statement = statement;
     foreach (SqlName referencedObjectName in statement.GetReferencedObjectNames<SqlName>().Where(n => !(IsLocalName(n) || n.Value.Equals(objectName, StringComparison.OrdinalIgnoreCase)))) {
         edges.Add(referencedObjectName.Value);
     }
 }
 private static IEnumerable<IInstallStatement> HandleDependendObjects(IInstallStatement statement, DatabaseInventory inventory, ICollection<string> droppedObjects)
 {
     DependencyDisablingAlterStatement dependencyAltering = statement as DependencyDisablingAlterStatement;
     if (dependencyAltering != null) {
         ICollection<IAlterableCreateStatement> dependencyObjects = dependencyAltering.GetDependencyObjects(inventory, droppedObjects);
         foreach (IAlterableCreateStatement dependencyObject in dependencyObjects) {
             yield return dependencyObject.CreateDropStatement();
         }
         yield return statement;
         foreach (IAlterableCreateStatement dependencyObject in dependencyObjects) {
             yield return dependencyObject;
         }
     } else {
         yield return statement;
     }
 }