Exemple #1
0
        private static bool AddTables(ICollection <DataHolderDefinition> allDefs, DataHolderDefinition def,
                                      Dictionary <DataHolderDefinition, List <TableDefinition> > dataHolderToTable,
                                      HashSet <DataHolderDefinition> dataHolders, HashSet <TableDefinition> tables)
        {
            if (!allDefs.Contains(def))
            {
                return(false);
            }
            allDefs.Remove(def);
            dataHolders.Add(def);
            foreach (TableDefinition tableDefinition in dataHolderToTable[def])
            {
                tables.Add(tableDefinition);
                foreach (DataHolderDefinition holderDefinition in tableDefinition.DataHolderDefinitions)
                {
                    dataHolders.Add(holderDefinition);
                    LightDBDefinitionSet.AddTables(allDefs, holderDefinition, dataHolderToTable, dataHolders, tables);
                }
            }

            return(true);
        }
Exemple #2
0
        public static DataHolderTableMapping[] CreateDataHolderTableMappings(
            Dictionary <TableDefinition, List <DataHolderDefinition> > tableDataHolderMap,
            DataHolderDefinition[] dataHolderDefinitions)
        {
            Dictionary <DataHolderDefinition, List <TableDefinition> > dictionary =
                new Dictionary <DataHolderDefinition, List <TableDefinition> >();

            foreach (KeyValuePair <TableDefinition, List <DataHolderDefinition> > tableDataHolder in tableDataHolderMap)
            {
                if (tableDataHolder.Value == null)
                {
                    LightDBDefinitionSet.log.Warn(
                        "Table-definition \"{0}\" has no used columns (and can possibly be removed from the config).");
                }
                else
                {
                    tableDataHolder.Key.DataHolderDefinitions = tableDataHolder.Value.ToArray();
                    foreach (DataHolderDefinition holderDefinition in tableDataHolder.Key.DataHolderDefinitions)
                    {
                        dictionary.GetOrCreate <DataHolderDefinition, TableDefinition>(holderDefinition)
                        .Add(tableDataHolder.Key);
                    }
                }
            }

            List <DataHolderTableMapping>  holderTableMappingList = new List <DataHolderTableMapping>();
            HashSet <DataHolderDefinition> holderDefinitionSet1   =
                new HashSet <DataHolderDefinition>(
                    (IEnumerable <DataHolderDefinition>)dictionary.Keys.ToArray <DataHolderDefinition>());
            HashSet <DataHolderDefinition> holderDefinitionSet2 = new HashSet <DataHolderDefinition>();
            HashSet <TableDefinition>      tableDefinitionSet   = new HashSet <TableDefinition>();

            foreach (DataHolderDefinition key in dictionary.Keys)
            {
                if (LightDBDefinitionSet.AddTables((ICollection <DataHolderDefinition>)holderDefinitionSet1, key,
                                                   dictionary, holderDefinitionSet2, tableDefinitionSet))
                {
                    DataHolderTableMapping holderTableMapping = new DataHolderTableMapping(
                        holderDefinitionSet2.ToArray <DataHolderDefinition>(),
                        tableDefinitionSet.ToArray <TableDefinition>());
                    holderTableMappingList.Add(holderTableMapping);
                    holderDefinitionSet2.Clear();
                    tableDefinitionSet.Clear();
                }
            }

            foreach (TableDefinition key in tableDataHolderMap.Keys)
            {
                TableDefinition table = key;
                foreach (SimpleDataColumn columnDefinition in table.ColumnDefinitions)
                {
                    if (columnDefinition is IDataFieldBase)
                    {
                        DataHolderDefinition holderDefinition =
                            ((IDataFieldBase)columnDefinition).DataHolderDefinition;
                        if (!holderDefinitionSet2.Contains(holderDefinition))
                        {
                            DataHolderTableMapping holderTableMapping =
                                holderTableMappingList.Find((Predicate <DataHolderTableMapping>)(map =>
                                                                                                 ((IEnumerable <TableDefinition>)map.TableDefinitions).Contains <TableDefinition>(
                                                                                                     table)));
                            DataHolderDefinition[] holderDefinitions = holderTableMapping.DataHolderDefinitions;
                            holderTableMapping.DataHolderDefinitions =
                                new DataHolderDefinition[holderDefinitions.Length + 1];
                            Array.Copy((Array)holderDefinitions, (Array)holderTableMapping.TableDefinitions,
                                       holderDefinitions.Length);
                            holderTableMapping.DataHolderDefinitions[holderDefinitions.Length] = holderDefinition;
                        }
                    }
                }
            }

            return(holderTableMappingList.ToArray());
        }