/
DatabaseSchema.cs
54 lines (45 loc) · 1.46 KB
/
DatabaseSchema.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Data.Common;
using Simple.Data.Ado;
namespace Simple.Data.Schema
{
internal class DatabaseSchema
{
private readonly ISchemaProvider _schemaProvider;
private readonly Lazy<TableCollection> _lazyTables;
public DatabaseSchema(ISchemaProvider schemaProvider)
{
_lazyTables = new Lazy<TableCollection>(CreateTableCollection);
_schemaProvider = schemaProvider;
}
public ISchemaProvider SchemaProvider
{
get { return _schemaProvider; }
}
public bool IsAvailable
{
get { return _schemaProvider != null; }
}
public IEnumerable<Table> Tables
{
get { return _lazyTables.Value.AsEnumerable(); }
}
public Table FindTable(string tableName)
{
return _lazyTables.Value.Find(tableName);
}
private TableCollection CreateTableCollection()
{
var table = _schemaProvider.GetSchema("Tables");
var query = table.AsEnumerable().Select(
row =>
new Table(row["table_name"].ToString(), row["table_schema"].ToString(), row["table_type"].ToString(),
this));
return new TableCollection(query);
}
}
}