Skip to content
Merged
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
3 changes: 0 additions & 3 deletions src/Tests/Tests.Schema.verified.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
34 changes: 34 additions & 0 deletions src/Tests/Tests.SchemaAnsiPaddingStripped.verified.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
## Tables

### MultiIndexTable

```sql
CREATE TABLE [dbo].[MultiIndexTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[Category] [nvarchar](50) NOT NULL,
[Status] [int] NOT NULL,
CONSTRAINT [PK_MultiIndexTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY]


CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
[Status] DESC,
[Name] ASC
) ON [PRIMARY]
```
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaAsMarkdown.verified.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaAsSql.verified.sql
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaFilter.verified.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaInDynamic.verified.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaInclude.verified.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaIncludeAll.verified.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
3 changes: 0 additions & 3 deletions src/Tests/Tests.SchemaIncludeTablesOnly.verified.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,17 @@ CREATE TABLE [dbo].[MultiIndexTable](
) ON [PRIMARY]
) ON [PRIMARY]

SET ANSI_PADDING ON

CREATE UNIQUE NONCLUSTERED INDEX [IX_MultiIndexTable_Category_Name] ON [dbo].[MultiIndexTable]
(
[Category] ASC,
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Name] ON [dbo].[MultiIndexTable]
(
[Name] ASC
) ON [PRIMARY]
SET ANSI_PADDING ON

CREATE NONCLUSTERED INDEX [IX_MultiIndexTable_Status_Desc] ON [dbo].[MultiIndexTable]
(
Expand Down
13 changes: 13 additions & 0 deletions src/Tests/Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -819,4 +819,17 @@ await Verify(connection)
.SchemaFilter(_ => _.Name == "ProcWithAnsiNullsOff")
.SchemaIncludes(DbObjects.StoredProcedures);
}

[Test]
public async Task SchemaAnsiPaddingStripped()
{
await using var database = await sqlInstance.Build();
var connection = database.Connection;

// MultiIndexTable has nvarchar indexes which cause SMO to emit SET ANSI_PADDING ON.
// Verify the SET ANSI_PADDING statements are stripped from the output.
await Verify(connection)
.SchemaFilter(_ => _.Name == "MultiIndexTable")
.SchemaIncludes(DbObjects.Tables);
}
}
19 changes: 18 additions & 1 deletion src/Verify.SqlServer/SchemaValidation/SqlScriptBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Management.Smo;

class SqlScriptBuilder(SchemaSettings settings)
Expand Down Expand Up @@ -208,12 +209,28 @@ static List<string> ScriptLines<T>(ScriptingOptions options, T item)
.Script(options)
.Cast<string>()
.Where(_ => !IsSet(_))
.Select(ScrubSetStatements)
.ToList();

static string ScrubSetStatements(string script)
{
if (!script.Contains("SET ANSI_PADDING "))
{
return script;
}

return setAnsiPaddingRegex.Replace(script, "");
}

static readonly Regex setAnsiPaddingRegex = new(@"^\s*SET ANSI_PADDING (ON|OFF)\s*$\n?",
RegexOptions.Multiline | RegexOptions.Compiled);

static bool IsSet(string script) =>
script is
"SET ANSI_NULLS ON" or
"SET ANSI_NULLS OFF" or
"SET QUOTED_IDENTIFIER ON" or
"SET QUOTED_IDENTIFIER OFF";
"SET QUOTED_IDENTIFIER OFF" or
"SET ANSI_PADDING ON" or
"SET ANSI_PADDING OFF";
}
Loading