@@ -38,22 +38,20 @@ create or replace package body ut_coverage is
38
38
begin
39
39
l_result := q'[
40
40
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
- ),
49
41
sources as (
50
42
select /*+ cardinality(f {mappings_cardinality}) */
51
43
{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)
8000
51
+ else 0
52
+ end as line,
53
53
s.text
54
54
from {sources_view} s {join_file_mappings}
55
- left join trigger_source_offsets o
56
- on (s.owner = o.owner and s.name = o.name and s.type = o.type)
57
55
where s.type in ('PACKAGE BODY', 'TYPE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER')
58
56
{filters}
59
57
),
@@ -80,7 +78,11 @@ create or replace package body ut_coverage is
80
78
select /*+ no_parallel */ full_name, owner, name, type, line, to_be_skipped, text
81
79
from coverage_sources s
82
80
-- 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 )
81
+ where not exists (
82
+ select /*+ cardinality(el {skipped_objects_cardinality})*/ 1
83
+ from table(:l_skipped_objects) el
84
+ where s.owner = el.owner and s.name = el.name
85
+ )
84
86
and line > 0
85
87
]';
86
88
@@ -137,9 +139,9 @@ create or replace package body ut_coverage is
137
139
if a_coverage_options.file_mappings is not empty then
138
140
open l_cursor for l_sql using a_coverage_options.file_mappings, l_skip_objects;
139
141
elsif a_coverage_options.include_objects is not empty then
140
- open l_cursor for l_sql using a_coverage_options.include_objects, a_coverage_options.include_objects, l_skip_objects;
142
+ open l_cursor for l_sql using a_coverage_options.include_objects, l_skip_objects;
141
143
else
142
- open l_cursor for l_sql using a_coverage_options.schema_names, a_coverage_options.schema_names, l_skip_objects;
144
+ open l_cursor for l_sql using a_coverage_options.schema_names, l_skip_objects;
143
145
end if;
144
146
return l_cursor;
145
147
end;
0 commit comments