Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion src/SqlSharpener.Tests/MetaBuilderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ CONSTRAINT [PK_id] PRIMARY KEY CLUSTERED ([id] ASC),
CONSTRAINT [FK_tb2_tb1] FOREIGN KEY ([tb1Id]) REFERENCES [dbo].[tb1] ([id]))");
Assert.AreEqual(2, builder.Tables.Count());
Assert.AreEqual("tb1", builder.Tables.First().Name);

Assert.AreEqual(1, builder.Tables.First().Columns.Count());
Assert.AreEqual(true, builder.Tables.First().Columns.First().IsPrimaryKey);
Assert.AreEqual(false, builder.Tables.First().Columns.First().IsForeignKey);
Expand Down Expand Up @@ -410,5 +410,27 @@ public void ViewWithExpressionTest()
Assert.AreEqual(1, builder.Views.Count());
Assert.AreEqual(1, builder.Views.First().Columns.Count());
}

[TestMethod]
public void NonClusteredIndexTest()
{
var builder = new MetaBuilder();
var nonClusteredIndex = @"CREATE NONCLUSTERED INDEX [ActiveSequence_UpdatedUTC_NonClustered] ON [dbo].[Tasks]([Updated]ASC) INCLUDE ([Id]);";
builder.LoadModel(nonClusteredIndex);

Assert.AreEqual(1, builder.Indexes.Count());
Assert.IsTrue(string.Join(string.Empty, builder.Indexes.First().Split(null)) == string.Join(string.Empty, nonClusteredIndex.Split(null)));
}

[TestMethod]
public void ClusteredIndexTest()
{
var builder = new MetaBuilder();
var nonClusteredIndex = @"CREATE CLUSTERED INDEX [ActiveSequence_UpdatedUTC_NonClustered] ON [dbo].[Tasks]([Updated]ASC) INCLUDE ([Id]);";
builder.LoadModel(nonClusteredIndex);

Assert.AreEqual(1, builder.Indexes.Count());
Assert.IsTrue(string.Join(string.Empty, builder.Indexes.First().Split(null)) == string.Join(string.Empty, nonClusteredIndex.Split(null)));
}
}
}
18 changes: 18 additions & 0 deletions src/SqlSharpener/MetaBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class MetaBuilder
private bool _modelLoaded = false;
private IEnumerable<Table> _tables;
private IEnumerable<View> _views;
private IEnumerable<string> _indexes;
private dac.SqlServerVersion _sqlServerVersion = dac.SqlServerVersion.Sql100;

/// <summary>
Expand Down Expand Up @@ -108,6 +109,21 @@ public IEnumerable<View> Views
}
}

/// <summary>
/// Objects representing the meta datafor all the indexes parsed.
/// </summary>
/// <value>
/// The views.
/// </value>
public IEnumerable<string> Indexes
{
get
{
if (!_modelLoaded) LoadModel();
return _indexes;
}
}


/// <summary>
/// Creates a new TSqlModel, loads all *.sql files specified in the SqlPaths property
Expand Down Expand Up @@ -164,6 +180,7 @@ public void LoadModel(dac.TSqlModel model)
{
var sqlTables = model.GetObjects(dac.DacQueryScopes.UserDefined, dac.Table.TypeClass);
var sqlViews = model.GetObjects(dac.DacQueryScopes.UserDefined, dac.View.TypeClass);
var indexes = model.GetObjects(dac.DacQueryScopes.UserDefined, dac.Index.TypeClass);
var primaryKeys = model.GetObjects(dac.DacQueryScopes.UserDefined, dac.PrimaryKeyConstraint.TypeClass).Select(o => o.GetReferenced().Where(r => r.ObjectType.Name == "Column")).SelectMany(c=> c);
var foreignKeyDictionaries = new[] { GetForeignKeys(sqlTables), GetForeignKeys(sqlViews) };
var foreignKeys = foreignKeyDictionaries
Expand All @@ -172,6 +189,7 @@ public void LoadModel(dac.TSqlModel model)

_tables = sqlTables.Select(sqlTable => new Table(sqlTable, primaryKeys, foreignKeys)).ToList();
_views = sqlViews.Select(sqlView => new View(sqlView, primaryKeys, foreignKeys)).ToList();
_indexes = indexes.Select(sqlIndex => sqlIndex.GetScript().Replace(Environment.NewLine, string.Empty)).ToList();
_procedures = model.GetObjects(dac.DacQueryScopes.UserDefined, dac.Procedure.TypeClass).Select(sqlProc => new Procedure(sqlProc, this.ProcedurePrefix, primaryKeys, foreignKeys)).ToList();
_modelLoaded = true;
}
Expand Down