diff --git a/src/SqlSharpener.Tests/MetaBuilderTest.cs b/src/SqlSharpener.Tests/MetaBuilderTest.cs index bdaf15c..9948068 100644 --- a/src/SqlSharpener.Tests/MetaBuilderTest.cs +++ b/src/SqlSharpener.Tests/MetaBuilderTest.cs @@ -1,9 +1,12 @@ using System; using System.Linq; +using Microsoft.SqlServer.Dac.Model; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace SqlSharpener.Tests { + using SqlSharpener.Model; + [TestClass] public class MetaBuilderTest { @@ -355,7 +358,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 +413,67 @@ public void ViewWithExpressionTest() Assert.AreEqual(1, builder.Views.Count()); Assert.AreEqual(1, builder.Views.First().Columns.Count()); } + + + [TestMethod] + public void TableWithHistoryTable() + { + var builder = new MetaBuilder(SqlServerVersion.Sql130); + builder.LoadModel(@" +create table [dbo].[tb1] ( + [Id] int identity(1,1) not null, + [SysStartTime] DATETIME2(7) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT [DF_Employee_SysStartTime] DEFAULT (sysutcdatetime()) NOT NULL, + [SysEndTime] DATETIME2(7) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT [DF_Employee_SysEndTime] DEFAULT (CONVERT([datetime2],'9999-12-31 23:59:59.9999999')) NOT NULL, + CONSTRAINT [PK_tb1] PRIMARY KEY CLUSTERED ([Id] ASC), + PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]) +) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE=[dbo].[tb1_history]))"); + + Table table; + Column column; + + Assert.AreEqual(2, builder.Tables.Count()); + + // tb1 + table = builder.Tables.First(); + Assert.AreEqual("tb1", table.Name); + Assert.AreEqual(false, table.IsAutoGeneratedHistoryTable); + Assert.AreEqual(3, table.Columns.Count()); + + column = table.Columns.First(); + Assert.AreEqual("Id", column.Name); + Assert.AreEqual(ColumnGeneratedAlwaysType.None, column.GeneratedAlwaysType); + Assert.AreEqual(false, column.IsHidden); + + column = table.Columns.Skip(1).First(); + Assert.AreEqual("SysStartTime", column.Name); + Assert.AreEqual(ColumnGeneratedAlwaysType.GeneratedAlwaysAsRowStart, column.GeneratedAlwaysType); + Assert.AreEqual(true, column.IsHidden); + + column = table.Columns.Skip(2).First(); + Assert.AreEqual("SysEndTime", column.Name); + Assert.AreEqual(ColumnGeneratedAlwaysType.GeneratedAlwaysAsRowEnd, column.GeneratedAlwaysType); + Assert.AreEqual(true, column.IsHidden); + + // tb1_history + table = builder.Tables.Skip(1).First(); + Assert.AreEqual("tb1_history", table.Name); + Assert.AreEqual(true, table.IsAutoGeneratedHistoryTable); + Assert.AreEqual(3, table.Columns.Count()); + + column = table.Columns.First(); + Assert.AreEqual("Id", column.Name); + Assert.AreEqual(ColumnGeneratedAlwaysType.None, column.GeneratedAlwaysType); + Assert.AreEqual(false, column.IsHidden); + + column = table.Columns.Skip(1).First(); + Assert.AreEqual("SysStartTime", column.Name); + Assert.AreEqual(ColumnGeneratedAlwaysType.None, column.GeneratedAlwaysType); + Assert.AreEqual(false, column.IsHidden); + + column = table.Columns.Skip(2).First(); + Assert.AreEqual("SysEndTime", column.Name); + Assert.AreEqual(ColumnGeneratedAlwaysType.None, column.GeneratedAlwaysType); + Assert.AreEqual(false, column.IsHidden); + } } } diff --git a/src/SqlSharpener.Tests/SqlSharpener.Tests.csproj b/src/SqlSharpener.Tests/SqlSharpener.Tests.csproj index 556eba1..45bf3c7 100644 --- a/src/SqlSharpener.Tests/SqlSharpener.Tests.csproj +++ b/src/SqlSharpener.Tests/SqlSharpener.Tests.csproj @@ -35,36 +35,28 @@ 4 - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Contracts.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.Data.Tools.Schema.Sql.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Schema.Sql.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.Data.Tools.Utilities.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Schema.Tasks.Sql.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.Dac.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Schema.Utilities.Sql.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.Dac.Extensions.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Utilities.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.TransactSql.ScriptDom.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.SqlServer.Dac.dll - True - - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.SqlServer.Dac.Extensions.dll - True - - - ..\packages\Microsoft.SqlServer.TransactSql.ScriptDom.12.0.1\lib\net40\Microsoft.SqlServer.TransactSql.ScriptDom.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.Types.dll True diff --git a/src/SqlSharpener.Tests/packages.config b/src/SqlSharpener.Tests/packages.config index 1f34600..5ef38e0 100644 --- a/src/SqlSharpener.Tests/packages.config +++ b/src/SqlSharpener.Tests/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file diff --git a/src/SqlSharpener/Model/Column.cs b/src/SqlSharpener/Model/Column.cs index d081a88..97a2724 100644 --- a/src/SqlSharpener/Model/Column.cs +++ b/src/SqlSharpener/Model/Column.cs @@ -2,8 +2,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Microsoft.SqlServer.TransactSql.ScriptDom; namespace SqlSharpener.Model @@ -198,6 +196,10 @@ from r in t.Value /// public bool IsForeignKey { get; private set; } + public dac.ColumnGeneratedAlwaysType GeneratedAlwaysType { get; private set; } + + public bool IsHidden { get; private set; } + /// /// Gets or sets the relationships where this column is a foreign key. /// @@ -223,6 +225,9 @@ private void SetProperties(dac.TSqlObject tSqlObject) this.Precision = dac.Column.Precision.GetValue(tSqlObject); this.Scale = dac.Column.Scale.GetValue(tSqlObject); this.Length = dac.Column.Length.GetValue(tSqlObject); + + this.GeneratedAlwaysType = dac.Column.GeneratedAlwaysType.GetValue(tSqlObject); + this.IsHidden = dac.Column.IsHidden.GetValue(tSqlObject); } } } diff --git a/src/SqlSharpener/Model/Table.cs b/src/SqlSharpener/Model/Table.cs index 599f00c..bfa1c41 100644 --- a/src/SqlSharpener/Model/Table.cs +++ b/src/SqlSharpener/Model/Table.cs @@ -46,6 +46,13 @@ public Table(dac.TSqlObject tSqlObject, IEnumerable primaryKeys, columns.Add(column); } this.Columns = columns; + + if (tSqlObject.ObjectType.Name == "Table") + { + // these properties are not valid on 'TableType' + this.IsAutoGeneratedHistoryTable = dac.Table.IsAutoGeneratedHistoryTable.GetValue(tSqlObject); + this.MemoryOptimized = dac.Table.MemoryOptimized.GetValue(tSqlObject); + } } /// @@ -63,5 +70,16 @@ public Table(dac.TSqlObject tSqlObject, IEnumerable primaryKeys, /// The columns. /// public IEnumerable Columns { get; private set; } + + + /// + /// Gets a value indicating whether the table is an auto generated history table. + /// + public bool IsAutoGeneratedHistoryTable { get; private set; } + + /// + /// Gets a value indicating whether the table is a memory optimized table. + /// + public bool MemoryOptimized { get; set; } } } diff --git a/src/SqlSharpener/SqlSharpener.csproj b/src/SqlSharpener/SqlSharpener.csproj index 3aaed41..11fc45d 100644 --- a/src/SqlSharpener/SqlSharpener.csproj +++ b/src/SqlSharpener/SqlSharpener.csproj @@ -31,36 +31,28 @@ 4 - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Contracts.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.Data.Tools.Schema.Sql.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Schema.Sql.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.Data.Tools.Utilities.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Schema.Tasks.Sql.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.Dac.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Schema.Utilities.Sql.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.Dac.Extensions.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.Data.Tools.Utilities.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.TransactSql.ScriptDom.dll True - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.SqlServer.Dac.dll - True - - - ..\packages\Microsoft.SqlServer.DACFx.12.0.2603.2\lib\Microsoft.SqlServer.Dac.Extensions.dll - True - - - ..\packages\Microsoft.SqlServer.TransactSql.ScriptDom.12.0.1\lib\net40\Microsoft.SqlServer.TransactSql.ScriptDom.dll + + ..\packages\Microsoft.SqlServer.DacFx.x64.130.3485.1\lib\net40\Microsoft.SqlServer.Types.dll True diff --git a/src/SqlSharpener/packages.config b/src/SqlSharpener/packages.config index 1f34600..5ef38e0 100644 --- a/src/SqlSharpener/packages.config +++ b/src/SqlSharpener/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file