public List <string> Get(string foreignColumn)
 {
     return(dbdProvider.GetRelationsToColumn(foreignColumn));
 }
        public async Task <HeaderResult> Get(string name, string build)
        {
            Logger.WriteLine("Serving headers for " + name + " (" + build + ")");

            var result = new HeaderResult();

            try
            {
                var storage = await dbcManager.GetOrLoad(name, build);

                if (!dbdProvider.TryGetDefinition(name, out var definition))
                {
                    throw new KeyNotFoundException("Definition for " + name);
                }

                result.headers     = new List <string>();
                result.fks         = new Dictionary <string, string>();
                result.comments    = new Dictionary <string, string>();
                result.unverifieds = new List <string>();

                if (!storage.Values.Any())
                {
                    for (var j = 0; j < storage.AvailableColumns.Length; ++j)
                    {
                        var fieldName = storage.AvailableColumns[j];
                        result.headers.Add(fieldName);

                        if (definition.columnDefinitions.TryGetValue(fieldName, out var columnDef))
                        {
                            if (columnDef.foreignTable != null)
                            {
                                result.fks.Add(fieldName, columnDef.foreignTable + "::" + columnDef.foreignColumn);
                            }

                            if (columnDef.comment != null)
                            {
                                result.comments.Add(fieldName, columnDef.comment);
                            }

                            if (!columnDef.verified)
                            {
                                result.unverifieds.Add(fieldName);
                            }
                        }
                    }
                }
                else
                {
                    foreach (DBCDRow item in storage.Values)
                    {
                        for (var j = 0; j < storage.AvailableColumns.Length; ++j)
                        {
                            string fieldName = storage.AvailableColumns[j];
                            var    field     = item[fieldName];

                            if (field is Array a)
                            {
                                for (var i = 0; i < a.Length; i++)
                                {
                                    result.headers.Add($"{fieldName}[{i}]");

                                    if (definition.columnDefinitions.TryGetValue(fieldName, out var columnDef))
                                    {
                                        if (columnDef.foreignTable != null)
                                        {
                                            result.fks.Add($"{fieldName}[{i}]", columnDef.foreignTable + "::" + columnDef.foreignColumn);
                                        }

                                        if (columnDef.comment != null)
                                        {
                                            result.comments.Add($"{fieldName}[{i}]", columnDef.comment);
                                        }

                                        if (!columnDef.verified)
                                        {
                                            result.unverifieds.Add($"{fieldName}[{i}]");
                                        }
                                    }
                                }
                            }
                            else
                            {
                                result.headers.Add(fieldName);

                                if (definition.columnDefinitions.TryGetValue(fieldName, out var columnDef))
                                {
                                    if (columnDef.foreignTable != null)
                                    {
                                        result.fks.Add(fieldName, columnDef.foreignTable + "::" + columnDef.foreignColumn);
                                    }

                                    if (columnDef.comment != null)
                                    {
                                        result.comments.Add(fieldName, columnDef.comment);
                                    }

                                    if (!columnDef.verified)
                                    {
                                        result.unverifieds.Add(fieldName);
                                    }
                                }
                            }
                        }

                        break;
                    }
                }

                result.relationsToColumns = new Dictionary <string, List <string> >();

                foreach (var column in result.headers)
                {
                    var relationsToCol = dbdProvider.GetRelationsToColumn(name + "::" + column, true);
                    if (relationsToCol.Count > 0)
                    {
                        result.relationsToColumns.Add(column, relationsToCol);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.WriteLine("Error occured during serving data: " + e.Message);
                result.error = e.Message.Replace(SettingManager.dbcDir, "");
            }
            return(result);
        }