Beispiel #1
0
 public SQLiteProcessor(
     // ReSharper disable once SuggestBaseTypeForParameter
     SQLiteGenerator generator,
     ILogger logger,
     ProcessorOptions options,
     SQLiteBatchParser batchParser)
     : base(() => new SQLiteFactory(), generator, logger, options)
 {
     this.batchParser = batchParser;
 }
        private static bool ContainsGo(string sql)
        {
            var containsGo = false;
            var parser     = new SQLiteBatchParser();

            parser.SpecialToken += (sender, args) => containsGo = true;
            using (var source = new TextReaderSource(new StringReader(sql), true))
            {
                parser.Process(source);
            }

            return(containsGo);
        }
        private void ExecuteBatchNonQuery(string sql)
        {
            string sqlBatch = string.Empty;

            try
            {
                var parser = new SQLiteBatchParser();
                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 (DbException ex)
            {
                throw new Exception(ex.Message + "\r\nWhile Processing:\r\n\"" + sqlBatch + "\"", ex);
            }
        }