From 19f71f4aab049affe9923461cc87348039e5b63a Mon Sep 17 00:00:00 2001 From: "tasneem.saleem" Date: Thu, 4 May 2017 10:30:10 -0400 Subject: [PATCH] Added the Indexes into the MetaBuilder --- src/SqlSharpener.Tests/MetaBuilderTest.cs | 24 ++++++++++++++++++++++- src/SqlSharpener/MetaBuilder.cs | 18 +++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/SqlSharpener.Tests/MetaBuilderTest.cs b/src/SqlSharpener.Tests/MetaBuilderTest.cs index bdaf15c..8a11f2a 100644 --- a/src/SqlSharpener.Tests/MetaBuilderTest.cs +++ b/src/SqlSharpener.Tests/MetaBuilderTest.cs @@ -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); @@ -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))); + } } } diff --git a/src/SqlSharpener/MetaBuilder.cs b/src/SqlSharpener/MetaBuilder.cs index ffa2a34..e3519ae 100644 --- a/src/SqlSharpener/MetaBuilder.cs +++ b/src/SqlSharpener/MetaBuilder.cs @@ -22,6 +22,7 @@ public class MetaBuilder private bool _modelLoaded = false; private IEnumerable _tables; private IEnumerable _views; + private IEnumerable _indexes; private dac.SqlServerVersion _sqlServerVersion = dac.SqlServerVersion.Sql100; /// @@ -108,6 +109,21 @@ public IEnumerable Views } } + /// + /// Objects representing the meta datafor all the indexes parsed. + /// + /// + /// The views. + /// + public IEnumerable Indexes + { + get + { + if (!_modelLoaded) LoadModel(); + return _indexes; + } + } + /// /// Creates a new TSqlModel, loads all *.sql files specified in the SqlPaths property @@ -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 @@ -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; }