public SqlServer2000Processor(SqlServer2000Generator generator, ILogger logger, ProcessorOptions options, SqlServerBatchParser batchParser) : base(() => SqlClientFactory.Instance, generator, logger, options) { this.batchParser = batchParser; }
public void TestEmptySqlWithoutGo() { var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { Assert.Fail("No SQL text expected"); }; batchParser.SpecialToken += (sender, evt) => { Assert.Fail("No special token expected"); }; batchParser.Process(new LinesSource(new[] { string.Empty })); }
private void ExecuteBatchNonQuery(string sql) { var sqlBatch = string.Empty; try { var parser = new SqlServerBatchParser(); parser.SqlText += (sender, args) => { sqlBatch = args.SqlText.Trim(); }; parser.SpecialToken += (sender, args) => { if (string.IsNullOrEmpty(sqlBatch)) { return; } if (args.Opaque is GoSearcher.GoSearcherParameters goParams) { using (var command = Factory.CreateCommand(string.Empty, Connection, Transaction, Options)) { command.CommandText = sqlBatch; for (var i = 0; i != goParams.Count; ++i) { command.ExecuteNonQuery(); } } } sqlBatch = null; }; using (var source = new TextReaderSource(new StringReader(sql), true)) { parser.Process(source, stripComments: true); } if (!string.IsNullOrEmpty(sqlBatch)) { using (var command = Factory.CreateCommand(string.Empty, Connection, Transaction, Options)) { command.CommandText = sqlBatch; command.ExecuteNonQuery(); } } } catch (Exception ex) { using (var message = new StringWriter()) { message.WriteLine("An error occured executing the following sql:"); message.WriteLine(string.IsNullOrEmpty(sqlBatch) ? sql : sqlBatch); message.WriteLine("The error was {0}", ex.Message); throw new Exception(message.ToString(), ex); } } }
public void TestEmptyLineWithoutGo() { var output = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { Assert.Fail("No special token expected"); }; batchParser.Process(new TextReaderSource(new StringReader("\n"))); Assert.AreEqual(0, output.Count); }
public void TestNothing() { var output = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { Assert.Fail("No special token expected"); }; batchParser.Process(new LinesSource(new string[0])); Assert.AreEqual(0, output.Count); }
public SqlServerProcessor(IEnumerable <string> databaseTypes, IMigrationGenerator generator, ILogger logger, ProcessorOptions options) : base(() => SqlClientFactory.Instance, generator, logger, options) { batchParser = new SqlServerBatchParser(); var dbTypes = databaseTypes.ToList(); DatabaseType = dbTypes.First(); DatabaseTypeAliases = dbTypes.Skip(1).ToList(); }
public void TestSqlMultiLineCommentWithoutGo() { var output = new List <string>(); var specialTokens = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { specialTokens.Add(evt.Token); }; batchParser.Process(new TextReaderSource(new StringReader("/* test */"))); Assert.AreEqual(1, output.Count); Assert.AreEqual("/* test */\n", output[0]); Assert.AreEqual(0, specialTokens.Count); }
private static bool ContainsGo(string sql) { var containsGo = false; var parser = new SqlServerBatchParser(); parser.SpecialToken += (sender, args) => containsGo = true; using (var source = new TextReaderSource(new StringReader(sql), true)) { parser.Process(source); } return(containsGo); }
public void TestSqlWithGo() { var output = new List <string>(); var specialTokens = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { specialTokens.Add(evt.Token); }; batchParser.Process(new TextReaderSource(new StringReader("asd\ngo"))); Assert.AreEqual(1, output.Count); Assert.AreEqual("asd\n", output[0]); Assert.AreEqual(1, specialTokens.Count); Assert.AreEqual("go", specialTokens[0]); }
public void TestSqlUnclosedMultiLineComment() { var output = new List <string>(); var specialTokens = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { specialTokens.Add(evt.Token); }; var source = new TextReaderSource(new StringReader("/* test\n * blah")); Assert.Throws <InvalidOperationException>(() => batchParser.Process(source)); Assert.AreEqual(0, output.Count); Assert.AreEqual(0, specialTokens.Count); }
public void TestSqlStrippedSingleLineCommentAndSqlWithoutGo(string input, string expected) { var output = new List <string>(); var specialTokens = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { specialTokens.Add(evt.Token); }; var source = new TextReaderSource(new StringReader(input)); batchParser.Process(source, true); Assert.AreEqual(1, output.Count); Assert.AreEqual(expected, output[0]); Assert.AreEqual(0, specialTokens.Count); }
public void TestSqlMultipleGo() { var output = new List <string>(); var specialTokens = new List <string>(); var batchParser = new SqlServerBatchParser("\n"); batchParser.SqlText += (sender, evt) => { output.Add(evt.SqlText); }; batchParser.SpecialToken += (sender, evt) => { specialTokens.Add(evt.Token); }; batchParser.Process(new TextReaderSource(new StringReader("go\nGO"))); Assert.AreEqual(2, output.Count); Assert.AreEqual(string.Empty, output[0]); Assert.AreEqual(string.Empty, output[1]); Assert.AreEqual(2, specialTokens.Count); Assert.AreEqual("go", specialTokens[0]); Assert.AreEqual("GO", specialTokens[1]); }