public SqlServer2000Processor(SqlServer2000Generator generator,
                               ILogger logger,
                               ProcessorOptions options,
                               SqlServerBatchParser batchParser) : base(() => SqlClientFactory.Instance, generator, logger, options)
 {
     this.batchParser = batchParser;
 }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
        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]);
        }
Esempio n. 10
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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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]);
        }