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); } }