diff --git a/SQLCC.Core/Objects/DbCodeSegment.cs b/SQLCC.Core/Objects/DbCodeSegment.cs index bc0c7fc..fe190d7 100644 --- a/SQLCC.Core/Objects/DbCodeSegment.cs +++ b/SQLCC.Core/Objects/DbCodeSegment.cs @@ -2,6 +2,8 @@ namespace SQLCC.Core.Objects { public class DbCodeSegment { + public string SchemaName { get; set; } + public string ObjectName { get; set; } public int LinesOfCode { get; set; } diff --git a/SQLCC.Impl.MsSqlProvider/MsSqlProvider.cs b/SQLCC.Impl.MsSqlProvider/MsSqlProvider.cs index 8224900..1027add 100644 --- a/SQLCC.Impl.MsSqlProvider/MsSqlProvider.cs +++ b/SQLCC.Impl.MsSqlProvider/MsSqlProvider.cs @@ -116,10 +116,13 @@ public override void StopTrace(string traceName) public override List GetTraceCodeSegments(string traceName) { var trace = Path.Combine(_traceDir, string.Format(TraceFileFormat, traceName)); - var codeTrace = _db.Fetch(@"SELECT DISTINCT LineNumber, Offset as StartByte, IntegerData2 as EndByte, ObjectName + var codeTrace = _db.Fetch(@"SELECT LineNumber, StartByte, EndByte, ObjectName, OBJECT_SCHEMA_NAME(ObjectID) SchemaName +FROM ( + SELECT DISTINCT LineNumber, Offset as StartByte, IntegerData2 as EndByte, ObjectName, ObjectID FROM ::fn_trace_gettable('" + trace + @"', default) -WHERE EventClass IN (40,41,42,43,44) AND Offset IS NOT NULL AND ObjectName IS NOT NULL -ORDER BY ObjectName, LineNumber ASC, StartByte ASC, IntegerData2 ASC;"); + WHERE EventClass IN (40,41,42,43,44) AND Offset IS NOT NULL AND ObjectName IS NOT NULL AND Offset <= IntegerData2 + ) cs +ORDER BY SchemaName, ObjectName, LineNumber ASC, StartByte ASC, EndByte ASC;"); return codeTrace; } diff --git a/SQLCC/CodeCoverageProcessor.cs b/SQLCC/CodeCoverageProcessor.cs index 1df267c..3495e2f 100644 --- a/SQLCC/CodeCoverageProcessor.cs +++ b/SQLCC/CodeCoverageProcessor.cs @@ -89,7 +89,7 @@ public void ProcessAllCoverage(DbCodeCoverage codeCover) { foreach (var obj in codeCover.TotalObjects) { - obj.CoveredSegments = codeCover.TraceCodeSegments.Where(p => p.ObjectName.Equals(obj.Name)).ToList(); + obj.CoveredSegments = codeCover.TraceCodeSegments.Where(p => p.ObjectName.Equals(obj.Name) && p.SchemaName.Equals(obj.Schema)).ToList(); obj.Set(ProcessObjectCoverage(obj)); obj.CodeHighlighted = _highlightCodeProvider.HighlightCode(obj.Code, obj.CoveredSegments);