/// <summary>
 ///     Account row output.
 /// </summary>
 /// <param name="handle">statement handle</param>
 /// <param name="numIStream">num rows insert stream</param>
 /// <param name="numRStream">num rows remove stream</param>
 public void AccountOutput(
     StatementMetricHandle handle,
     int numIStream,
     int numRStream)
 {
     var array = groupMetrics[handle.GroupNum];
     using (array.RWLock.AcquireReadLock()) {
         var metric = array.GetAddMetric(handle.Index);
         metric.AddNumOutputIStream(numIStream);
         metric.AddNumOutputRStream(numRStream);
     }
 }
 /// <summary>
 ///     Account statement times.
 /// </summary>
 /// <param name="handle">statement handle</param>
 /// <param name="performanceMetrics">performance metrics</param>
 /// <param name="numInput">number of input rows</param>
 public void AccountTimes(
     StatementMetricHandle handle,
     PerformanceMetrics performanceMetrics,
     int numInput)
 {
     var array = groupMetrics[handle.GroupNum];
     using (array.RWLock.AcquireReadLock()) {
         var metric = array.GetAddMetric(handle.Index);
         metric.AddMetrics(performanceMetrics);
         metric.AddNumInput(numInput);
     }
 }