Skip to content

Commit 09e495e

Browse files
authored
Merge pull request #1091 from utPLSQL/feature/fix_coverage_uk_violation_on_dup_obj_name
Feature/fix coverage uk violation on dup obj name
2 parents 461bc01 + e96b978 commit 09e495e

18 files changed

+127
-50
lines changed

.travis/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ PROMPT Grants for testing coverage outside of main $UT3_DEVELOP_SCHEMA schema.
147147
grant create any procedure, drop any procedure, execute any procedure, create any type, drop any type, execute any type, under any type,
148148
select any table, update any table, insert any table, delete any table, create any table, drop any table, alter any table,
149149
select any dictionary, create any synonym, drop any synonym,
150-
grant any object privilege, grant any privilege, create public synonym, drop public synonym
150+
grant any object privilege, grant any privilege, create public synonym, drop public synonym, create any trigger
151151
to $UT3_TESTER_HELPER;
152152
153153
grant create job to $UT3_TESTER_HELPER;

source/core/coverage/ut_coverage.pkb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ create or replace package body ut_coverage is
4848
),
4949
sources as (
5050
select /*+ cardinality(f {mappings_cardinality}) */
51-
{l_full_name} as full_name, s.owner, s.name,
51+
{l_full_name} as full_name, s.owner, s.name, s.type,
5252
s.line - case when s.type = 'TRIGGER' then o.offset else 0 end as line,
5353
s.text
5454
from {sources_view} s {join_file_mappings}
@@ -58,7 +58,7 @@ create or replace package body ut_coverage is
5858
{filters}
5959
),
6060
coverage_sources as (
61-
select full_name, owner, name, line, text,
61+
select full_name, owner, name, type, line, text,
6262
case
6363
when
6464
-- to avoid execution of regexp_like on every line
@@ -77,7 +77,7 @@ create or replace package body ut_coverage is
7777
end as to_be_skipped
7878
from sources s
7979
)
80-
select full_name, owner, name, line, to_be_skipped, text
80+
select 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
8383
where (s.owner, s.name) not in ( select /*+ cardinality(el {skipped_objects_cardinality})*/el.owner, el.name from table(:l_skipped_objects) el )
@@ -93,7 +93,7 @@ create or replace package body ut_coverage is
9393
and s.type = f.object_type
9494
and s.owner = f.object_owner';
9595
else
96-
l_full_name := q'[lower(s.owner||'.'||s.name)]';
96+
l_full_name := q'[lower(s.type||' '||s.owner||'.'||s.name)]';
9797
l_filters := case
9898
when a_coverage_options.include_objects is not empty then '
9999
and (s.owner, s.name) in (

source/core/coverage/ut_coverage_block.pkb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ create or replace package body ut_coverage_block is
4040
exit when l_source_objects_crsr%notfound;
4141

4242
--get coverage data
43-
l_line_calls := ut_coverage_helper_block.get_raw_coverage_data(
44-
l_source_object.owner,
45-
l_source_object.name,
46-
a_coverage_options.coverage_run_id
47-
);
43+
l_line_calls := ut_coverage_helper_block.get_raw_coverage_data(l_source_object, a_coverage_options.coverage_run_id);
4844
--if there is coverage, we need to filter out the garbage (badly indicated data)
4945
if l_line_calls.count > 0 then
5046
--remove lines that should not be indicted as meaningful

source/core/coverage/ut_coverage_helper.pkb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ create or replace package body ut_coverage_helper is
3636
begin
3737
forall i in 1 .. a_data.count
3838
insert into ut_coverage_sources_tmp
39-
(full_name,owner,name,line,text, to_be_skipped)
40-
values(a_data(i).full_name,a_data(i).owner,a_data(i).name,a_data(i).line,a_data(i).text,a_data(i).to_be_skipped);
39+
(full_name,owner,name,type,line,text,to_be_skipped)
40+
values(a_data(i).full_name,a_data(i).owner,a_data(i).name,a_data(i).type,a_data(i).line,a_data(i).text,a_data(i).to_be_skipped);
4141
end;
4242

4343
procedure cleanup_tmp_table is
@@ -60,12 +60,12 @@ create or replace package body ut_coverage_helper is
6060
l_result t_tmp_table_objects_crsr;
6161
begin
6262
open l_result for
63-
select o.owner, o.name, o.full_name, max(o.line) as lines_count,
63+
select o.owner, o.name, o.type, o.full_name, max(o.line) as lines_count,
6464
cast(
6565
collect(decode(to_be_skipped, 'Y', to_char(line))) as ut_varchar2_list
6666
) as to_be_skipped_list
6767
from ut_coverage_sources_tmp o
68-
group by o.owner, o.name, o.full_name;
68+
group by o.owner, o.name, o.type, o.full_name;
6969

7070
return l_result;
7171
end;

source/core/coverage/ut_coverage_helper.pks

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ create or replace package ut_coverage_helper authid definer is
3232
full_name ut_coverage_sources_tmp.full_name%type,
3333
owner ut_coverage_sources_tmp.owner%type,
3434
name ut_coverage_sources_tmp.name%type,
35+
type ut_coverage_sources_tmp.type%type,
3536
line ut_coverage_sources_tmp.line%type,
3637
to_be_skipped ut_coverage_sources_tmp.to_be_skipped%type,
3738
text ut_coverage_sources_tmp.text%type
@@ -42,6 +43,7 @@ create or replace package ut_coverage_helper authid definer is
4243
type t_tmp_table_object is record(
4344
owner ut_coverage_sources_tmp.owner%type,
4445
name ut_coverage_sources_tmp.name%type,
46+
type ut_coverage_sources_tmp.type%type,
4547
full_name ut_coverage_sources_tmp.full_name%type,
4648
lines_count integer,
4749
to_be_skipped_list ut_varchar2_list

source/core/coverage/ut_coverage_helper_block.pkb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ create or replace package body ut_coverage_helper_block is
4141
$end
4242
end;
4343

44-
function block_results(a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw) return t_block_rows is
44+
function block_results(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return t_block_rows is
4545
l_coverage_rows t_block_rows;
4646
l_ut_owner varchar2(250) := ut_utils.ut_owner;
4747
begin
@@ -61,23 +61,27 @@ create or replace package body ut_coverage_helper_block is
6161
where r.coverage_run_id = :a_coverage_run_id
6262
and ccu.owner = :a_object_owner
6363
and ccu.name = :a_object_name
64+
and ccu.type = :a_object_type
6465
group by ccb.line, ccb.block
6566
)
6667
group by line
68+
having count(block) > 1
6769
order by line]'
68-
bulk collect into l_coverage_rows using a_coverage_run_id, a_object_owner, a_object_name;
70+
bulk collect into l_coverage_rows
71+
using
72+
a_coverage_run_id, a_object.owner,
73+
a_object.name, a_object.type;
74+
6975
return l_coverage_rows;
7076
end;
7177

72-
function get_raw_coverage_data(
73-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
74-
) return ut_coverage_helper.t_unit_line_calls is
78+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls is
7579
l_tmp_data t_block_rows;
7680
l_results ut_coverage_helper.t_unit_line_calls;
7781

7882
begin
7983
$if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
80-
l_tmp_data := block_results(a_object_owner, a_object_name, a_coverage_run_id);
84+
l_tmp_data := block_results(a_object, a_coverage_run_id);
8185

8286
for i in 1 .. l_tmp_data.count loop
8387
l_results(l_tmp_data(i).line).blocks := l_tmp_data(i).blocks;

source/core/coverage/ut_coverage_helper_block.pks

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ create or replace package ut_coverage_helper_block authid current_user is
2020

2121
procedure coverage_stop;
2222

23-
function get_raw_coverage_data(
24-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
25-
) return ut_coverage_helper.t_unit_line_calls;
23+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls;
2624

2725
end;
2826
/

source/core/coverage/ut_coverage_helper_profiler.pkb

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ create or replace package body ut_coverage_helper_profiler is
5555
dbms_profiler.stop_profiler();
5656
end;
5757

58-
function proftab_results(a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw) return t_proftab_rows is
58+
function proftab_results(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return t_proftab_rows is
5959
l_coverage_rows t_proftab_rows;
6060
begin
6161
select
@@ -69,21 +69,19 @@ create or replace package body ut_coverage_helper_profiler is
6969
join ut_coverage_runs r
7070
on r.line_coverage_id = u.runid
7171
where r.coverage_run_id = a_coverage_run_id
72-
and u.unit_owner = a_object_owner
73-
and u.unit_name = a_object_name
74-
and u.unit_type in ('PACKAGE BODY', 'TYPE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER')
72+
and u.unit_owner = a_object.owner
73+
and u.unit_name = a_object.name
74+
and u.unit_type = a_object.type
7575
group by d.line#;
7676

7777
return l_coverage_rows;
7878
end;
7979

80-
function get_raw_coverage_data(
81-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
82-
) return ut_coverage_helper.t_unit_line_calls is
80+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls is
8381
l_tmp_data t_proftab_rows;
8482
l_results ut_coverage_helper.t_unit_line_calls;
8583
begin
86-
l_tmp_data := proftab_results(a_object_owner, a_object_name, a_coverage_run_id);
84+
l_tmp_data := proftab_results(a_object, a_coverage_run_id);
8785

8886
for i in 1 .. l_tmp_data.count loop
8987
l_results(l_tmp_data(i).line).calls := l_tmp_data(i).calls;

source/core/coverage/ut_coverage_helper_profiler.pks

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ create or replace package ut_coverage_helper_profiler authid definer is
2424

2525
procedure coverage_resume;
2626

27-
function get_raw_coverage_data(
28-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
29-
) return ut_coverage_helper.t_unit_line_calls;
27+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls;
3028

3129
end;
3230
/

source/core/coverage/ut_coverage_profiler.pkb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@ create or replace package body ut_coverage_profiler is
3434
exit when l_source_objects_crsr%notfound;
3535

3636
--get coverage data
37-
l_line_calls := ut_coverage_helper_profiler.get_raw_coverage_data(
38-
l_source_object.owner,
39-
l_source_object.name,
40-
a_coverage_options.coverage_run_id
41-
);
37+
l_line_calls := ut_coverage_helper_profiler.get_raw_coverage_data( l_source_object, a_coverage_options.coverage_run_id);
4238

4339
--if there is coverage, we need to filter out the garbage (badly indicated data from dbms_profiler)
4440
if l_line_calls.count > 0 then

0 commit comments

Comments
 (0)