private void ProcessSqlStatistics(ushort curCmd, ushort status, int count)
{
// SqlStatistics bookkeeping stuff
//
if (null != _statistics)
{
// any done after row(s) counts as a resultset
if (_statistics.WaitForDoneAfterRow)
{
_statistics.SafeIncrement(ref _statistics._sumResultSets);
_statistics.WaitForDoneAfterRow = false;
}
// clear row count DONE_COUNT flag is not set
if (!(TdsEnums.DONE_COUNT == (status & TdsEnums.DONE_COUNT)))
{
count = 0;
}
switch (curCmd)
{
case TdsEnums.INSERT:
case TdsEnums.DELETE:
case TdsEnums.UPDATE:
case TdsEnums.MERGE:
_statistics.SafeIncrement(ref _statistics._iduCount);
_statistics.SafeAdd(ref _statistics._iduRows, count);
if (!_statisticsIsInTransaction)
{
_statistics.SafeIncrement(ref _statistics._transactions);
}
break;
case TdsEnums.SELECT:
_statistics.SafeIncrement(ref _statistics._selectCount);
_statistics.SafeAdd(ref _statistics._selectRows, count);
break;
case TdsEnums.BEGINXACT:
if (!_statisticsIsInTransaction)
{
_statistics.SafeIncrement(ref _statistics._transactions);
}
_statisticsIsInTransaction = true;
break;
case TdsEnums.OPENCURSOR:
_statistics.SafeIncrement(ref _statistics._cursorOpens);
break;
case TdsEnums.ABORT:
_statisticsIsInTransaction = false;
break;
case TdsEnums.ENDXACT:
_statisticsIsInTransaction = false;
break;
} // switch
}
else
{
switch (curCmd)
{
case TdsEnums.BEGINXACT:
_statisticsIsInTransaction = true;
break;
case TdsEnums.ABORT:
case TdsEnums.ENDXACT:
_statisticsIsInTransaction = false;
break;
}
}
}