예제 #1
0
        internal static void CompareInCurrentDirectory()
        {
            List<Database> databases = LoadDatabasesInCurrentDirectory();

            // Find which tables are common to all databases:
            Set<ObjectName> allTables = new Set<ObjectName>();
            Set<ObjectName> commonTables = new Set<ObjectName>();

            if (databases.Count > 0) commonTables.UnionUpdate(databases[0].TablesByName.Keys);

            foreach (Database database in databases)
            {
                Set<ObjectName> tablesInThisDatabase = new Set<ObjectName>(database.TablesByName.Keys);

                allTables.UnionUpdate(tablesInThisDatabase);
                commonTables.IntersectionUpdate(tablesInThisDatabase);
            }

            Set<ObjectName> nonCommonTables = Set<ObjectName>.Difference(allTables, commonTables);

            Console.WriteLine(nonCommonTables);

            // Find which columns are common to all databases:
            foreach (ObjectName commonTableName in commonTables)
            {
                Set<string> allColumns = new Set<string>();
                Set<string> commonColumns = new Set<string>();

                if (databases.Count > 0)
                {
                    Set<string> columns = new Set<string>(databases[0].TablesByName[commonTableName].Columns.Keys);
                    commonColumns.UnionUpdate(columns.Map<string>(NormaliseColumnName));
                }

                foreach (Database database in databases)
                {
                    Set<string> columnsInThisTable = new Set<string>(database.TablesByName[commonTableName].Columns.Keys).Map<string>(NormaliseColumnName);

                    commonColumns.IntersectionUpdate(columnsInThisTable);
                    allColumns.UnionUpdate(columnsInThisTable);
                }

                Set<string> nonCommonColumns = Set<string>.Difference(allColumns, commonColumns);

                if (nonCommonColumns.Count > 0)
                {
                    Console.WriteLine(commonTableName.Name);
                    Console.WriteLine(nonCommonColumns);
                }
            }
        }