Ejemplo n.º 1
0
        private static void ProcessFKBadTypeCommand(string args)
        {
            if (args == "")
            {
                Console.WriteLine(NO_TABLE_SELECTED);
                return;
            }
            IList <string>         errors;
            IList <DatabaseObject> tables = GetTablesFromArgs(args, out errors);

            if (errors.Count > 0)
            {
                foreach (string error in errors)
                {
                    Console.WriteLine(error);
                }
                return;
            }
            try
            {
                ISet <DatabaseObject> tablesWithoutForeignKeys = new HashSet <DatabaseObject>(tables);
                IList <ForeignKey>    foreignKeys = new List <ForeignKey>();
                foreach (DatabaseObject table in tables)
                {
                    foreach (DependencyEdge edge in Optimizer.Instance.DependencyGraph[table].ParentEdges)
                    {
                        foreignKeys.Add(edge.ForeignKey);
                    }
                }
                IDictionary <ForeignKey, int> foreignKeySizes = _databaseOperations.GetForeignKeySize(foreignKeys);
                foreach (ForeignKey foreignKey in foreignKeys)
                {
                    Console.WriteLine($"Table: {foreignKey.Table.NameWithSchemaBrackets}");
                    Console.WriteLine($"Foreign key: {foreignKey.Name}");
                    tablesWithoutForeignKeys.Remove(foreignKey.Table);
                    int size = foreignKeySizes[foreignKey];
                    foreach (IList <string> infoPair in _optimizer.EvaluateForeignKeyDataType(foreignKey, size))
                    {
                        if (infoPair.Count > 1)
                        {
                            Console.WriteLine(string.Join(" ", infoPair));
                        }
                        else
                        {
                            Console.WriteLine(infoPair[0]);
                        }
                    }
                    Console.WriteLine();
                }
                if (foreignKeys.Count == 0)
                {
                    Console.WriteLine("All tables are without foreign keys");
                    return;
                }
                else if (tablesWithoutForeignKeys.Count > 0)
                {
                    Console.WriteLine($"These tables are without foreign keys: {string.Join(", ", tablesWithoutForeignKeys)}");
                    return;
                }
            }
            catch (DatabaseException exc)
            {
                Debug.WriteLine(exc);
                Console.WriteLine("Error: Foreign key sizes cannot be loaded");
                return;
            }
        }