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); }
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()); }