@@ -38,18 +38,18 @@ create or replace package body ut_coverage is
3838 begin
3939 l_result := q'[
4040 with
41- trigger_source_offsets as (
42- select min(s.line) - 1 offset, s.owner, s.name, s.type
43- from {sources_view} s
44- where s.type = 'TRIGGER'
45- {filters}
46- and (lower(s.text) like '%begin%' or lower(s.text) like '%declare%' or lower(s.text) like '%compound%')
47- group by s.owner, s.name, s.type
48- ),
4941 sources as (
5042 select /*+ cardinality(f {mappings_cardinality}) */
5143 {l_full_name} as full_name, s.owner, s.name, s.type,
52- s.line - case when s.type = 'TRIGGER' then o.offset else 0 end as line,
44+ s.line
45+ - case
46+ when s.type = 'TRIGGER'
47+ then
48+ /* calculate offset of line number for trigger source in coverage reporting */
49+ min(case when lower(s.text) like '%begin%' or lower(s.text) like '%declare%' or lower(s.text) like '%compound%' then s.line-1 end)
50+ over (partition by s.owner, s.type, s.name)
51+ else 0
52+ end as line,
5353 s.text
5454 from {sources_view} s {join_file_mappings}
5555 left join trigger_source_offsets o
@@ -80,7 +80,11 @@ create or replace package body ut_coverage is
8080 select /*+ no_parallel */ full_name, owner, name, type, line, to_be_skipped, text
8181 from coverage_sources s
8282 -- Exclude calls to utPLSQL framework, Unit Test packages and objects from a_exclude_list parameter of coverage reporter
83- where (s.owner, s.name) not in ( select /*+ cardinality(el {skipped_objects_cardinality})*/el.owner, el.name from table(:l_skipped_objects) el )
83+ where not exists (
84+ select /*+ cardinality(el {skipped_objects_cardinality})*/ 1
85+ from table(:l_skipped_objects) el
86+ where s.owner = el.owner and s.name = el.name
87+ )
8488 and line > 0
8589 ]';
8690
0 commit comments