@@ -16,10 +16,26 @@ create or replace package body ut_coverage is
1616 limitations under the License.
1717 */
1818
19-
20- type t_source_lines is table of binary_integer;
19+ g_coverage_id tt_coverage_id_arr;
20+ g_develop_mode boolean not null := false;
21+ g_is_started boolean not null := false;
22+
23+ procedure set_develop_mode(a_develop_mode in boolean) is
24+ begin
25+ g_develop_mode := a_develop_mode;
26+ end;
27+
28+ function get_coverage_id(a_coverage_type in varchar2) return integer is
29+ begin
30+ return g_coverage_id(a_coverage_type);
31+ end;
2132
22- function get_cov_sources_sql(a_coverage_options ut_coverage_options, a_skipped_lines varchar2 default 'Y') return varchar2 is
33+ function is_develop_mode return boolean is
34+ begin
35+ return g_develop_mode;
36+ end;
37+
38+ function get_cov_sources_sql(a_coverage_options ut_coverage_options) return varchar2 is
2339 l_result varchar2(32767);
2440 l_full_name varchar2(100);
2541 l_view_name varchar2(200) := ut_metadata.get_dba_view('dba_source');
@@ -44,8 +60,7 @@ create or replace package body ut_coverage is
4460 and regexp_like( t.text, '[A-Za-z0-9$#_]*(begin|declare|compound).*','i'))
4561 ) as line,
4662 s.text, ]';
47- if a_skipped_lines = 'Y' then
48- l_result := l_result ||
63+ l_result := l_result ||
4964 q'[case
5065 when
5166 -- to avoid execution of regexp_like on every line
@@ -62,10 +77,7 @@ create or replace package body ut_coverage is
6277 )
6378 then 'Y'
6479 end as to_be_skipped ]';
65- else
66- l_result := l_result || q'['N' as to_be_skipped ]';
67- end if;
68-
80+
6981 l_result := l_result ||' from '||l_view_name||q'[ s]';
7082
7183 if a_coverage_options.file_mappings is not empty then
@@ -96,7 +108,7 @@ create or replace package body ut_coverage is
96108 l_skip_objects ut_object_names;
97109 l_sql varchar2(32767);
98110 begin
99- if not ut_coverage_helper. is_develop_mode() then
111+ if not is_develop_mode() then
100112 --skip all the utplsql framework objects and all the unit test packages that could potentially be reported by coverage.
101113 l_skip_objects := ut_utils.get_utplsql_objects_list() multiset union all coalesce(a_coverage_options.exclude_objects, ut_object_names());
102114 end if;
@@ -111,13 +123,13 @@ create or replace package body ut_coverage is
111123 return l_cursor;
112124 end;
113125
114- procedure populate_tmp_table(a_coverage_options in ut_coverage_options,a_sql in varchar2) is
126+ procedure populate_tmp_table(a_coverage_options ut_coverage_options, a_sql in varchar2) is
115127 pragma autonomous_transaction;
116128 l_cov_sources_crsr sys_refcursor;
117129 l_cov_sources_data ut_coverage_helper.t_coverage_sources_tmp_rows;
118130 begin
119131
120- if not ut_coverage_helper.is_tmp_table_populated() or ut_coverage_helper. is_develop_mode() then
132+ if not ut_coverage_helper.is_tmp_table_populated() or is_develop_mode() then
121133 ut_coverage_helper.cleanup_tmp_table();
122134
123135 l_cov_sources_crsr := get_cov_sources_cursor(a_coverage_options,a_sql);
@@ -140,33 +152,54 @@ create or replace package body ut_coverage is
140152 * Public functions
141153 */
142154 procedure coverage_start(a_coverage_options ut_coverage_options default null) is
155+ l_run_comment varchar2(200) := 'utPLSQL Code coverage run '||ut_utils.to_string(systimestamp);
143156 begin
144- ut_coverage_helper.coverage_start('utPLSQL Code coverage run '||ut_utils.to_string(systimestamp));
157+ if not is_develop_mode() and not g_is_started then
158+ $if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
159+ ut_coverage_helper_block.coverage_start( l_run_comment, g_coverage_id(gc_block_coverage) );
160+ $end
161+ ut_coverage_helper_profiler.coverage_start( l_run_comment, g_coverage_id(gc_proftab_coverage) );
162+ coverage_pause();
163+ g_is_started := true;
164+ end if;
145165 end;
146166
147- procedure coverage_start_develop(a_coverage_options ut_coverage_options default null) is
167+ procedure coverage_pause is
148168 begin
149- ut_coverage_helper.coverage_start_develop;
169+ if not is_develop_mode() then
170+ ut_coverage_helper_profiler.coverage_pause();
171+ end if;
150172 end;
151173
152- procedure coverage_pause is
174+ procedure coverage_resume is
153175 begin
154- ut_coverage_helper.coverage_pause ();
176+ ut_coverage_helper_profiler.coverage_resume ();
155177 end;
156178
157- procedure coverage_resume is
179+ procedure mock_coverage_id(a_coverage_id integer,a_coverage_type in varchar2) is
158180 begin
159- ut_coverage_helper.coverage_resume();
181+ g_develop_mode := true;
182+ g_is_started := true;
183+ g_coverage_id(a_coverage_type) := a_coverage_id;
160184 end;
161185
162- procedure coverage_stop is
186+ procedure mock_coverage_id(a_coverage_id tt_coverage_id_arr) is
163187 begin
164- ut_coverage_helper.coverage_stop();
188+ g_develop_mode := true;
189+ g_is_started := true;
190+ g_coverage_id := a_coverage_id;
165191 end;
166192
167- procedure coverage_stop_develop is
193+ procedure coverage_stop is
168194 begin
169- ut_coverage_helper.coverage_stop_develop();
195+ if not is_develop_mode() then
196+ g_is_started := false;
197+ $if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
198+ ut_coverage_helper_block.coverage_stop();
199+ $end
200+ ut_coverage_helper_profiler.coverage_stop();
201+ g_is_started := false;
202+ end if;
170203 end;
171204
172205 function get_coverage_data(a_coverage_options ut_coverage_options) return t_coverage is
@@ -175,13 +208,16 @@ create or replace package body ut_coverage is
175208 l_object ut_coverage.t_full_name;
176209 l_line_no binary_integer;
177210 begin
178- -- Get raw data for both reporters, order is important as tmp table will skip headers and dont populate
211+ --prepare global temp table with sources
212+ populate_tmp_table(a_coverage_options, get_cov_sources_sql(a_coverage_options));
213+
214+ -- Get raw data for both reporters, order is important as tmp table will skip headers and dont populate
179215 -- tmp table for block again.
180- l_result_profiler_enrich:= ut_coverage_profiler.get_coverage_data(a_coverage_options => a_coverage_options );
216+ l_result_profiler_enrich:= ut_coverage_profiler.get_coverage_data( a_coverage_options, get_coverage_id(gc_proftab_coverage) );
181217
182218 -- If block coverage available we will use it.
183219 $if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
184- l_result_block := ut_coverage_block.get_coverage_data(a_coverage_options => a_coverage_options );
220+ l_result_block := ut_coverage_block.get_coverage_data( a_coverage_options, get_coverage_id(gc_block_coverage) );
185221
186222 -- Enrich profiler results with some of the block results
187223 l_object := l_result_profiler_enrich.objects.first;
0 commit comments