public SqlBuffer() { this.currentBuffer = new IndexedBuffer(); this.innerBuffers = new List <IndexedBuffer>() { this.currentBuffer }; }
public void Push(int batchIndex) { this.bufferStack.Push(batchIndex); if (batchIndex >= 0) { this.ReserveBuffer(batchIndex); this.currentBuffer = this.innerBuffers[batchIndex] ??= new IndexedBuffer(); } }
private IEnumerable <ISqlContent> Read(IndexedBuffer buffer, ISqlOptions options) { if (options == null || (options.MaxParameters <= 0 && options.MaxSql <= 0) || (options.MaxParameters >= this.Parameters.Count && options.MaxSql >= this.Text.Length)) { yield return(this.ReadToEnd()); yield break; } int yieldedParams = 0; int yieldedBindings = 0; int yieldedText = 0; int maxSql = options.MaxSql <= 0 ? int.MaxValue : options.MaxSql; int maxParams = options.MaxParameters <= 0 ? int.MaxValue : options.MaxParameters; SqlOffset[] offsets = buffer.Offsets.Concat(new[] { this.GetCurrentOffset() }).ToArray(); for (int i = 0; i < offsets.Length - 1; i++) { SqlOffset offset = offsets[i]; SqlOffset nextOffset = offsets[i + 1]; if (nextOffset.NumberOfParams - yieldedParams > maxParams || nextOffset.Text - yieldedText > maxSql) { yield return(new SqlContent() { Bindings = buffer.Bindings.Skip(yieldedBindings).Take(offset.NumberOfBindings - yieldedBindings), Parameters = buffer.Parameters.Skip(yieldedParams).Take(offset.NumberOfParams - yieldedParams), Text = buffer.Text.ToString(yieldedText, offset.Text - yieldedText), }); yieldedParams += offset.NumberOfParams - yieldedParams; yieldedText += offset.Text - yieldedText; yieldedBindings += offset.NumberOfBindings - yieldedBindings; } } if (yieldedParams < buffer.Parameters.Count || yieldedText < buffer.Text.Length || yieldedBindings < buffer.Bindings.Count) { string newText = buffer.Text.ToString(yieldedText, buffer.Text.Length - yieldedText); if (!string.IsNullOrWhiteSpace(newText)) { yield return(new SqlContent() { Bindings = buffer.Bindings.Skip(yieldedBindings), Parameters = buffer.Parameters.Skip(yieldedParams), Text = newText, }); } } }
public void Pop() { if (this.bufferStack.Count > 0) { int batchIndex = this.bufferStack.Pop(); if (batchIndex >= 0) { if (this.bufferStack.Count > 0) { this.currentBuffer = this.innerBuffers[this.bufferStack.Peek()]; } else { this.currentBuffer = this.innerBuffers[0]; } } } }
public IndexedBuffer GetNext() { var indexedBuffer = new IndexedBuffer(count++); return(indexedBuffer); }