private bool ContainsGo(string sql) { var containsGo = false; batchParser.SpecialToken += (sender, args) => containsGo = true; using (var source = new TextReaderSource(new StringReader(sql), true)) { batchParser.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); } }