Skip to content

Commit 82b9d6c

Browse files
Add generator option for newlines between statements (#96)
* Add new ScriptGeneratorOption for the number of newlines between statements * Add test for new generator option
1 parent 8367b6e commit 82b9d6c

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

SqlScriptDom/ScriptDom/SqlServer/ScriptGenerator/SqlScriptGeneratorVisitor.StatementList.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ public override void ExplicitVisit(StatementList node)
2323
}
2424
else
2525
{
26-
NewLine();
26+
for (var i = 0; i < _options.NumNewlinesAfterStatement; i++)
27+
{
28+
NewLine();
29+
}
2730
}
2831

2932
GenerateFragmentIfNotNull(statement);

SqlScriptDom/ScriptDom/SqlServer/Settings/SqlScriptGeneratorOptions.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
<Description>IncludeSemiColons_Description</Description>
2929
<Summary>Gets or sets a boolean indicating if a semi colon should be included after each statement</Summary>
3030
</Setting>
31+
<Setting name="NumNewlinesAfterStatement" type="int" default="1" min="0">
32+
<Summary>Gets or sets the number of newlines to include after each statement</Summary>
33+
</Setting>
3134
</SettingGroup>
3235
<SettingGroup name="CREATE TABLE">
3336
<Setting name="AlignColumnDefinitionFields" type="bool" default="true">

Test/SqlDom/ScriptGeneratorTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// </copyright>
55
//------------------------------------------------------------------------------
66

7+
using System;
78
using Microsoft.SqlServer.TransactSql.ScriptDom;
89
using Microsoft.VisualStudio.TestTools.UnitTesting;
910
using SqlStudio.Tests.AssemblyTools.TestCategory;
@@ -113,5 +114,48 @@ public void TestSqlServerlessScriptGenerator()
113114
var scriptGenerator = new SqlServerlessScriptGenerator(options);
114115
Assert.AreEqual(SqlVersion.Sql160, scriptGenerator.Options.SqlVersion);
115116
}
117+
118+
[TestMethod]
119+
[Priority(0)]
120+
[SqlStudioTestCategory(Category.UnitTest)]
121+
public void TestNewlinesBetweenStatementsGeneratorOption() {
122+
var tableName = new SchemaObjectName();
123+
tableName.Identifiers.Add(new Identifier { Value = "TableName" });
124+
125+
var tableStatement = new CreateTableStatement
126+
{
127+
SchemaObjectName = tableName
128+
};
129+
var tableStatementString = "CREATE TABLE TableName;";
130+
131+
var statements = new StatementList();
132+
statements.Statements.Add(tableStatement);
133+
statements.Statements.Add(tableStatement);
134+
135+
var generatorOptions = new SqlScriptGeneratorOptions {
136+
KeywordCasing = KeywordCasing.Uppercase,
137+
IncludeSemicolons = true,
138+
NumNewlinesAfterStatement = 0
139+
};
140+
141+
var generator = new Sql80ScriptGenerator(generatorOptions);
142+
143+
generator.GenerateScript(statements, out var sql);
144+
145+
Assert.AreEqual(tableStatementString + tableStatementString, sql);
146+
147+
generatorOptions.NumNewlinesAfterStatement = 1;
148+
generator = new Sql80ScriptGenerator(generatorOptions);
149+
150+
generator.GenerateScript(statements, out sql);
151+
152+
Assert.AreEqual(tableStatementString + Environment.NewLine + tableStatementString, sql);
153+
154+
generatorOptions.NumNewlinesAfterStatement = 2;
155+
generator = new Sql80ScriptGenerator(generatorOptions);
156+
157+
generator.GenerateScript(statements, out sql);
158+
Assert.AreEqual(tableStatementString + Environment.NewLine + Environment.NewLine + tableStatementString, sql);
159+
}
116160
}
117161
}

0 commit comments

Comments
 (0)