Source/Databases/SMOTable.cs
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo; using SQL.SMO.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Management.Automation; namespace SQL.SMO.Databases { public class SMOTable : ISMOObject { private Table _tbl; private string[] _cols; public SqlSmoObject Database => _tbl.Parent; public string Name { get { return _tbl.Name; } } public long RowCount { get { return _tbl.RowCount; } } public string Owner { get { return _tbl.Owner; } } public long ID { get { return _tbl.ID; } } public string FileGroup { get { return _tbl.FileGroup; } } public double DataSpaceUsed { get { return _tbl.DataSpaceUsed; } } public bool ChangeTrackingEnabled { get { return _tbl.ChangeTrackingEnabled; } } public bool AnsiNullsStatus { get { return _tbl.AnsiNullsStatus; } } public bool HasIndex { get { return _tbl.HasIndex; } } public double IndexSpaceUsed { get { return _tbl.IndexSpaceUsed; } } public bool Replicated { get { return _tbl.Replicated; } } public bool TrackColumnsUpdatedEnabled { get { return _tbl.TrackColumnsUpdatedEnabled; } } public TableEvents Events { get { return _tbl.Events; } } public IndexCollection Indexes { get { return _tbl.Indexes; } } public int MaxDegreeOfParallelism { get { return _tbl.MaximumDegreeOfParallelism; } } public ForeignKeyCollection ForeignKeys { get { return _tbl.ForeignKeys; } } public string Schema { get { return _tbl.Schema; } } public Type MSType => typeof(Table); public string[] Columns { get { if (_cols == null) { GetColumnNames(); } return _cols; } } internal SMOTable(Table t) => _tbl = t; internal SMOColumn[] GetColumns() { SMOColumn[] smoc = new SMOColumn[_tbl.Columns.Count]; for (int i = 0; i < _tbl.Columns.Count; i++) { Column c = _tbl.Columns[i]; smoc[i] = new SMOColumn(c); } return smoc; } internal SMOColumn[] GetColumns(string[] colNames) { SMOColumn[] smoc = new SMOColumn[colNames.Length]; IEnumerable<Column> cols = _tbl.Columns.OfType<Column>(); for (int i = 0; i < colNames.Length; i ++) { string s = colNames[i]; Column c = cols.Single(x => x.Name == s); if (c == null) { throw new SmoException("Column '" + s + "' was not found!"); } smoc[i] = new SMOColumn(c); } return smoc; } internal protected void GetColumnNames() { _cols = new string[_tbl.Columns.Count]; for (int i = 0; i < _tbl.Columns.Count; i++) { _cols[i] = _tbl.Columns[i].Name; } } public object ShowOriginal() => _tbl; } } |