Skip to content

Support use w/ delimited identifiers disabled #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cls/TestCoverage/Data/Aggregate/Base.cls
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Property CoveredMethods As %Integer [ Required ];

Property RtnLine As %Integer [ InitialExpression = 0 ];

Property Time As TestCoverage.DataType.Timing [ InitialExpression = 0 ];
Property Time As TestCoverage.DataType.Timing [ InitialExpression = 0, SqlFieldName = _TIME ];

Property TotalTime As TestCoverage.DataType.Timing [ InitialExpression = 0 ];

Expand Down
2 changes: 1 addition & 1 deletion cls/TestCoverage/Data/CodeSubUnit/Method.cls
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Method UpdateComplexity() As %Status
// Get unique by map.ToLine to avoid issues with mapping of embedded SQL
// (all lines of the generated query map back to the class line defining it)
Set tResult = ##class(%SQL.Statement).%ExecDirect(,
"select distinct by (map.ToLine) element_key ""Line"", Lines ""Code"" from TestCoverage_Data.CodeUnit_Lines intcode "_
"select distinct by (map.ToLine) element_key as Line, Lines as Code from TestCoverage_Data.CodeUnit_Lines intcode "_
"join TestCoverage_Data.CodeUnitMap map "_
" on map.FromHash = intcode.CodeUnit "_
" and map.FromLine = intcode.element_key "_
Expand Down
2 changes: 1 addition & 1 deletion cls/TestCoverage/Data/Coverage.cls
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Property CoveredLines As TestCoverage.DataType.Bitstring;
Property RtnLine As array Of %Integer;

/// List of "Time" measurements from line-by-line monitor, subscripted by line number
Property Time As array Of TestCoverage.DataType.Timing;
Property Time As array Of TestCoverage.DataType.Timing [ SqlFieldName = _TIME ];

/// List of "TotalTime" measurements from line-by-line monitor, subscripted by line number
Property TotalTime As array Of TestCoverage.DataType.Timing;
Expand Down
14 changes: 9 additions & 5 deletions cls/TestCoverage/Data/Run.cls
Original file line number Diff line number Diff line change
Expand Up @@ -83,20 +83,24 @@ ClassMethod MapRunCoverage(pRunIndex As %Integer) As %Status
// Copy any other metrics captured/requested as well.
For i=1:1:tRun.Metrics.Count() {
Set tMetric = tRun.Metrics.GetAt(i)
Set tSQLStatement = "INSERT OR UPDATE %NOLOCK %NOCHECK INTO TestCoverage_Data.""Coverage_"_tMetric_""" "_
"(Coverage,element_key,"""_tMetric_""") "_
"SELECT target.ID,map.ToLine,NVL(oldMetric."""_tMetric_""",0) + SUM(metric."""_tMetric_""") "_
If $System.SQL.IsReservedWord(tMetric) {
// e.g., "Time" -> "_Time"
Set tMetric = "_"_tMetric
}
Set tSQLStatement = "INSERT OR UPDATE %NOLOCK %NOCHECK INTO TestCoverage_Data.Coverage_"_tMetric_" "_
"(Coverage,element_key,"_tMetric_") "_
"SELECT target.ID,map.ToLine,NVL(oldMetric."_tMetric_",0) + SUM(metric."_tMetric_") "_
"FROM TestCoverage_Data.Coverage source "_
"JOIN TestCoverage_Data.CodeUnitMap map "_
" ON source.Hash = map.FromHash "_
"JOIN TestCoverage_Data.""Coverage_"_tMetric_""" metric "_
"JOIN TestCoverage_Data.Coverage_"_tMetric_" metric "_
" ON metric.Coverage = source.ID "_
" AND metric.element_key = map.FromLine "_
"JOIN TestCoverage_Data.Coverage target "_
" ON target.Run = source.Run "_
" AND target.Hash = map.ToHash "_
" AND target.TestPath = source.TestPath "_
"LEFT JOIN TestCoverage_Data.""Coverage_"_tMetric_""" oldMetric "_
"LEFT JOIN TestCoverage_Data.Coverage_"_tMetric_" oldMetric "_
" ON oldMetric.ID = target.ID "_
" AND oldMetric.element_key = map.ToLine "_
"WHERE source.Run = ? "_
Expand Down
14 changes: 7 additions & 7 deletions cls/TestCoverage/UI/AggregateResultViewer.cls
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
</vgroup>
<vgroup labelPosition="left" align="left" enclosingClass="box" layout="none">
<altJSONSQLProvider id="aggregateDataProvider" maxRows="10000"
sql=" select 'Overall' As &quot;Routine&quot;,
ROUND(100*CoveredLines/ExecutableLines,2) &quot;Percent Coverage&quot;,
ExecutableLines &quot;Executable Lines&quot;,
CoveredLines As &quot;Lines Covered&quot;,
ROUND(100*CoveredMethods/ExecutableMethods,2) &quot;Method Coverage&quot;,
ExecutableMethods As &quot;Executable Methods&quot;,
CoveredMethods As &quot;Methods Covered&quot;,
sql=" select 'Overall' As Routine,
ROUND(100*CoveredLines/ExecutableLines,2) PercentCoverage,
ExecutableLines as ExecutableLines,
CoveredLines As LinesCovered,
ROUND(100*CoveredMethods/ExecutableMethods,2) MethodCoverage,
ExecutableMethods As ExecutableMethods,
CoveredMethods As MethodsCovered,
'' as Info,
1 as TopSortOrder
from TestCoverage_Data_Aggregate.ByRun where ExecutableLines > 0 and Run = ?
Expand Down
26 changes: 15 additions & 11 deletions cls/TestCoverage/Utils.cls
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,15 @@ ClassMethod AggregateCoverage(pTestIndex As %String) As %Status
// Copy any other metrics captured/requested as well.
For i=1:1:tRun.Metrics.Count() {
Set tMetric = tRun.Metrics.GetAt(i)
Set tSQLStatement = "INSERT %NOLOCK %NOCHECK INTO TestCoverage_Data.""Coverage_"_tMetric_""" "_
"(Coverage,element_key,"""_tMetric_""") "_
"SELECT target.ID,metric.element_key,SUM(metric."""_tMetric_""") "_
If $System.SQL.IsReservedWord(tMetric) {
// e.g., "Time" -> "_Time"
Set tMetric = "_"_tMetric
}
Set tSQLStatement = "INSERT %NOLOCK %NOCHECK INTO TestCoverage_Data.Coverage_"_tMetric_" "_
"(Coverage,element_key,"_tMetric_") "_
"SELECT target.ID,metric.element_key,SUM(metric."_tMetric_") "_
"FROM TestCoverage_Data.Coverage source "_
"JOIN TestCoverage_Data.""Coverage_"_tMetric_""" metric "_
"JOIN TestCoverage_Data.Coverage_"_tMetric_" metric "_
" ON metric.Coverage = source.ID "_
"JOIN TestCoverage_Data.Coverage target "_
" ON target.Hash = source.Hash "_
Expand Down Expand Up @@ -209,7 +213,7 @@ ClassMethod AggregateCoverage(pTestIndex As %String) As %Status
ExecutableMethods,
CoveredMethods,
RtnLine,
"Time",
_Time,
TotalTime)
select :pTestIndex,
CodeUnit,
Expand Down Expand Up @@ -237,17 +241,17 @@ ClassMethod AggregateCoverage(pTestIndex As %String) As %Status
where method.Parent = CodeUnit),0) CoveredMethods,

-- Other metrics
RtnLine, "Time", TotalTime
RtnLine, _Time, TotalTime
from (
select Hash CodeUnit,
Hash->ExecutableLines ExecutableLines,
TestCoverage.BITWISE_AND(Hash->ExecutableLines,CoveredLines) CoveredLines,
(select SUM(RtnLine)
from TestCoverage_Data.Coverage_RtnLine r
where r.Coverage = coverage.ID) RtnLine,
(select SUM("Time")
from TestCoverage_Data.Coverage_Time t
where t.Coverage = coverage.ID) "Time",
(select SUM(_Time)
from TestCoverage_Data.Coverage__Time t
where t.Coverage = coverage.ID) _Time,
(select SUM(TotalTime)
from TestCoverage_Data.Coverage_TotalTime tt
where tt.Coverage = coverage.ID) TotalTime
Expand All @@ -272,10 +276,10 @@ ClassMethod AggregateCoverage(pTestIndex As %String) As %Status
insert %NOLOCK %NOCHECK into TestCoverage_Data_Aggregate.ByRun
(Run, ExecutableLines ,CoveredLines,
ExecutableMethods, CoveredMethods,
RtnLine, "Time", TotalTime)
RtnLine, _Time, TotalTime)
select Run, SUM(ExecutableLines), SUM(CoveredLines),
SUM(ExecutableMethods), SUM(CoveredMethods),
SUM(RtnLine), SUM("Time"), SUM(TotalTime)
SUM(RtnLine), SUM(_Time), SUM(TotalTime)
from TestCoverage_Data_Aggregate.ByCodeUnit
where Run = :pTestIndex
group by Run
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
Include TestCoverage

Class UnitTest.TestCoverage.Unit.TestDelimitedIdentifiers Extends %UnitTest.TestCase
{

Property InitialDelimitedIdentifiersSetting As %Boolean;

Property Run As TestCoverage.Data.Run;

Method TestWithDelimitedIdentifiers()
{
Do $System.SQL.SetDelimitedIdentifiers(0,.old)
Set ..InitialDelimitedIdentifiersSetting = old
Do $$$AssertStatusOK($System.OBJ.CompilePackage("TestCoverage","ck-d/nomulticompile"))

Set ..Run = ##class(TestCoverage.Data.Run).%New()
Set ..Run.Detail = 1 // Force calculation of rollups
For metric = $$$METRICS {
Do ..Run.Metrics.Insert(metric)
}
Do $$$AssertStatusOK(..Run.%Save())

// Other things that are likely to break:
// Dynamic SQL in TestCoverage.Data.Run:MapRunCoverage
Set sc = $$$OK
Try {
Do ##class(TestCoverage.Data.Run).MapRunCoverage(..Run.%Id())
} Catch e {
Set sc = e.AsStatus()
}
Do $$$AssertStatusOK(sc,"No exceptions thrown by TestCoverage.Data.Run:MapRunCoverage.")

// Dynamic SQL in TestCoverage.Utils:AggregateCoverage
Set sc = $$$OK
Try {
Do ##class(TestCoverage.Utils).AggregateCoverage(..Run.%Id())
} Catch e {
Set sc = e.AsStatus()
}
Do $$$AssertStatusOK(sc,"No exceptions thrown by TestCoverage.Utils:AggregateCoverage.")
}

/// Clean up: Delimited Identifiers setting, run ID
Method %OnClose() As %Status [ Private, ServerOnly = 1 ]
{
Set sc = $$$OK
If (..InitialDelimitedIdentifiersSetting '= "") {
Set sc = $System.SQL.SetDelimitedIdentifiers(..InitialDelimitedIdentifiersSetting,.old)
If (old '= ..InitialDelimitedIdentifiersSetting) {
// Recompile with original setting, just to be safe.
Set sc = $$$ADDSC(sc,$System.OBJ.Compile("TestCoverage","ck-d/nomulticompile"))
}
}
If $IsObject(..Run) {
Set sc = $$$ADDSC(sc,##class(TestCoverage.Data.Run).%DeleteId(..Run.%Id()))
}
Quit sc
}

}

2 changes: 2 additions & 0 deletions internal/testing/unit_tests/UnitTest/coverage.list
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
TestCoverage.PKG
-TestCoverage.UI.PKG