8000 Improved get_cov_sources SQL query. · utPLSQL/utPLSQL@51dbe87 · GitHub
[go: up one dir, main page]

Skip to content

Commit 51dbe87

Browse files
committed
Improved get_cov_sources SQL query.
References #1169
1 parent 7ecc9b2 commit 51dbe87

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

source/core/coverage/ut_coverage.pkb

Lines changed: 16 additions & 14 deletions
8000
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,20 @@ 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}
55-
left join trigger_source_offsets o
56-
on (s.owner = o.owner and s.name = o.name and s.type = o.type)
5755
where s.type in ('PACKAGE BODY', 'TYPE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER')
5856
{filters}
5957
),
@@ -80,7 +78,11 @@ create or replace package body ut_coverage is
8078
select /*+ no_parallel */ full_name, owner, name, type, line, to_be_skipped, text
8179
from coverage_sources s
8280
-- 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+
)
8486
and line > 0
8587
]';
8688

@@ -137,9 +139,9 @@ create or replace package body ut_coverage is
137139
if a_coverage_options.file_mappings is not empty then
138140
open l_cursor for l_sql using a_coverage_options.file_mappings, l_skip_objects;
139141
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;
141143
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;
143145
end if;
144146
return l_cursor;
145147
end;

0 commit comments

Comments
 (0)
0