Radarr/src/Marr.Data/QGen/View.cs

91 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Marr.Data.Mapping;
namespace Marr.Data.QGen
{
/// <summary>
/// This class represents a View. A view can hold multiple tables (and their columns).
/// </summary>
public class View : Table, IEnumerable<Table>
{
private string _viewName;
private Table[] _tables;
private ColumnMapCollection _columns;
public View(string viewName, Table[] tables)
: base(tables[0].EntityType, JoinType.None)
{
_viewName = viewName;
_tables = tables;
}
public Table[] Tables
{
get { return _tables; }
}
public override string Name
{
get
{
return _viewName;
}
set
{
_viewName = value;
}
}
public override string Alias
{
get
{
return base.Alias;
}
set
{
base.Alias = value;
// Sync view tables
foreach (Table table in _tables)
{
table.Alias = value;
}
}
}
/// <summary>
/// Gets all the columns from all the tables included in the view.
/// </summary>
public override ColumnMapCollection Columns
{
get
{
if (_columns == null)
{
var allColumns = _tables.SelectMany(t => t.Columns);
_columns = new ColumnMapCollection();
_columns.AddRange(allColumns);
}
return _columns;
}
}
public IEnumerator<Table> GetEnumerator()
{
foreach (Table table in _tables)
{
yield return table;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}