Beispiel #1
0
        public IEnumerable <string> FullTableNamesIndependantToDependant(Ranges ranges)
        {
            var result                  = new List <string>();
            var fullTableNames          = ranges.Select(item => item.FullTableName).ToList();
            var fullTableNamesToInspect = ranges.Select(item => item.FullTableName).ToList();

            do
            {
                var dependants = new List <string>();

                foreach (var tableName in fullTableNamesToInspect)
                {
                    var tableInfo = databaseInfo.TableInfos[tableName];
                    // Are there dependencies of tableName with other inspected tables?
                    var tableDependencies = tableInfo.DependsOn.Intersect(fullTableNames, StringComparer.InvariantCultureIgnoreCase);

                    // Remove tables that are already part of the result from the dependencies
                    tableDependencies = tableDependencies.Where(item => !result.Contains(item, StringComparer.InvariantCultureIgnoreCase)).ToList();

                    if (tableDependencies.Any())
                    {
                        dependants.Add(tableName);
                    }
                    else
                    {
                        result.Add(tableName);
                    }
                }

                if (fullTableNamesToInspect.Count() == dependants.Count())
                {
                    throw new CyclicDependenciesException(dependants);
                }

                fullTableNamesToInspect = dependants;
            } while (fullTableNamesToInspect.Any());

            return(result);
        }
Beispiel #2
0
 public IEnumerable <string> FullTableNamesDependantToIndependant(Ranges ranges)
 {
     return(FullTableNamesIndependantToDependant(ranges).Reverse());
 }