Skip to content

Commit 702be71

Browse files
author
Mark Junker
committed
Test application can now split by SQL instruction
1 parent eea601e commit 702be71

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

TestSqlServerBatchParser/Program.cs

+58-9
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,24 @@
1515
#endregion
1616

1717
using System;
18+
using System.Collections.Generic;
1819
using System.IO;
19-
using System.Text.RegularExpressions;
20+
using System.Text;
2021

2122
using FluentMigrator.BatchParser;
23+
using FluentMigrator.BatchParser.RangeSearchers;
2224
using FluentMigrator.BatchParser.Sources;
2325
using FluentMigrator.BatchParser.SpecialTokenSearchers;
2426

2527
using McMaster.Extensions.CommandLineUtils;
2628

2729
namespace TestSqlServerBatchParser
2830
{
29-
class Program
31+
internal static class Program
3032
{
31-
private static string _sqlText;
33+
private static StringBuilder _sqlText;
34+
private static string _sqlStatement;
35+
private static bool _outputEverySqlStatement;
3236

3337
static int Main(string[] args)
3438
{
@@ -37,12 +41,38 @@ static int Main(string[] args)
3741

3842
var scriptFileName = app.Argument<string>("script", "SQL script file name")
3943
.IsRequired();
40-
var stripComments = app.Option("-s|--strip", "Strip comments", CommandOptionType.NoValue);
44+
var stripComments = app.Option("--strip", "Strip comments", CommandOptionType.NoValue);
45+
var singleStatement = app.Option("-s|--single", "Output single statements", CommandOptionType.NoValue);
4146

4247
app.OnExecute(
4348
() =>
4449
{
45-
var batchParser = new SqlServerBatchParser();
50+
// The default range searchers
51+
var rangeSearchers = new List<IRangeSearcher>
52+
{
53+
new MultiLineComment(),
54+
new DoubleDashSingleLineComment(),
55+
new PoundSignSingleLineComment(),
56+
new SqlString(),
57+
};
58+
59+
// The special token searchers
60+
var specialTokenSearchers = new List<ISpecialTokenSearcher>();
61+
62+
// Add SQL server specific range searcher
63+
rangeSearchers.Add(new SqlServerIdentifier());
64+
65+
// Add SQL server specific token searcher
66+
specialTokenSearchers.Add(new GoSearcher());
67+
68+
// We want every single SQL statement
69+
_outputEverySqlStatement = singleStatement.HasValue();
70+
if (_outputEverySqlStatement)
71+
{
72+
specialTokenSearchers.Add(new SemicolonSearcher());
73+
}
74+
75+
var batchParser = new SqlBatchParser(rangeSearchers, specialTokenSearchers);
4676
batchParser.SpecialToken += BatchParserOnSpecialToken;
4777
batchParser.SqlText += BatchParserOnSqlText;
4878

@@ -61,24 +91,43 @@ static int Main(string[] args)
6191

6292
private static void BatchParserOnSqlText(object sender, SqlTextEventArgs sqlTextEventArgs)
6393
{
64-
_sqlText = sqlTextEventArgs.SqlText.Trim();
94+
var content = sqlTextEventArgs.SqlText.Trim();
95+
if (_outputEverySqlStatement)
96+
{
97+
if (_sqlText == null)
98+
_sqlText = new StringBuilder();
99+
if (!string.IsNullOrEmpty(content))
100+
{
101+
_sqlText.Append(content).Append(';').AppendLine();
102+
_sqlStatement = content;
103+
}
104+
}
105+
else
106+
{
107+
_sqlText = new StringBuilder(sqlTextEventArgs.SqlText.Trim());
108+
}
65109
}
66110

67111
private static void BatchParserOnSpecialToken(object sender, SpecialTokenEventArgs specialTokenEventArgs)
68112
{
69113
if (specialTokenEventArgs.Opaque is GoSearcher.GoSearcherParameters goParameters)
70114
{
71115
RunSql(goParameters.Count);
116+
_sqlText = null;
117+
}
118+
else if (!string.IsNullOrEmpty(_sqlStatement))
119+
{
120+
Console.Out.WriteLine("Statement: {0};", _sqlStatement);
121+
_sqlStatement = null;
72122
}
73-
74-
_sqlText = null;
75123
}
76124

77125
private static void RunSql(int count = 1)
78126
{
79-
if (string.IsNullOrEmpty(_sqlText))
127+
if ((_sqlText?.Length ?? 0) == 0)
80128
return;
81129

130+
Console.Out.WriteLine("Executing batch:");
82131
for (var i = 0; i != count; ++i)
83132
{
84133
Console.WriteLine(_sqlText);

TestSqlServerBatchParser/Properties/launchSettings.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"TestSqlServerBatchParser": {
44
"commandName": "Project",
5-
"commandLineArgs": "test.sql -s"
5+
"commandLineArgs": "test.sql -s --strip"
66
}
77
}
88
}

0 commit comments

Comments
 (0)