sonarr-repo-only/Marr.Data/QGen/TableCollection.cs

98 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Reflection;
namespace Marr.Data.QGen
{
/// <summary>
/// This class holds a collection of Table objects.
/// </summary>
public class TableCollection : IEnumerable<Table>
{
private List<Table> _tables;
public TableCollection()
{
_tables = new List<Table>();
}
public void Add(Table table)
{
if (this.Any(t => t.EntityType == table.EntityType))
{
// Already exists -- don't add
return;
}
// Create an alias (ex: "t0", "t1", "t2", etc...)
table.Alias = string.Format("t{0}", _tables.Count);
_tables.Add(table);
}
public void ReplaceBaseTable(View view)
{
_tables.RemoveAt(0);
Add(view);
}
/// <summary>
/// Tries to find a table for a given member.
/// </summary>
public Table FindTable(Type declaringType)
{
return this.EnumerateViewsAndTables().Where(t => t.EntityType == declaringType).FirstOrDefault();
}
public Table this[int index]
{
get
{
return _tables[index];
}
}
public int Count
{
get
{
return _tables.Count;
}
}
/// <summary>
/// Recursively enumerates through all tables, including tables embedded in views.
/// </summary>
/// <returns></returns>
public IEnumerable<Table> EnumerateViewsAndTables()
{
foreach (Table table in _tables)
{
if (table is View)
{
foreach (Table viewTable in (table as View))
{
yield return viewTable;
}
}
else
{
yield return table;
}
}
}
public IEnumerator<Table> GetEnumerator()
{
return _tables.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _tables.GetEnumerator();
}
}
}