@@ -90,14 +90,11 @@ create or replace package body ut_suite_manager is
9090
9191 if l_annotation_data.package_annotations.exists('rollback') then
9292 l_suite_rollback_annotation := l_annotation_data.package_annotations('rollback').text;
93- l_suite_rollback := case lower(l_suite_rollback_annotation)
94- when 'manual' then
95- ut_utils.gc_rollback_manual
96- when 'auto' then
97- ut_utils.gc_rollback_auto
98- else
99- ut_utils.gc_rollback_auto
100- end;
93+ if lower(l_suite_rollback_annotation) = 'manual' then
94+ l_suite_rollback := ut_utils.gc_rollback_manual;
95+ else
96+ l_suite_rollback := ut_utils.gc_rollback_auto;
97+ end if;
10198 else
10299 l_suite_rollback := ut_utils.gc_rollback_auto;
103100 end if;
@@ -158,16 +155,13 @@ create or replace package body ut_suite_manager is
158155
159156 if l_proc_annotations.exists('rollback') then
160157 l_rollback_annotation := l_proc_annotations('rollback').text;
161- l_rollback_type := case lower(l_rollback_annotation)
162- when 'manual' then
163- ut_utils.gc_rollback_manual
164- when 'auto' then
165- ut_utils.gc_rollback_auto
166- --when 'on-error' then
167- -- ut_utils.gc_rollback_on_error
168- else
169- l_suite_rollback
170- end;
158+ if lower(l_rollback_annotation) = 'manual' then
159+ l_rollback_type := ut_utils.gc_rollback_manual;
160+ elsif lower(l_rollback_annotation) = 'auto' then
161+ l_rollback_type := ut_utils.gc_rollback_auto;
162+ else
163+ l_rollback_type := l_suite_rollback;
164+ end if;
171165 end if;
172166
173167 l_test := ut_test(a_object_owner => l_owner_name
@@ -333,9 +327,8 @@ create or replace package body ut_suite_manager is
333327 begin
334328 -- Currently cache invalidation on DDL is not implemented so schema is rescaned each time
335329 l_schema_info := get_schema_info(a_schema_name);
336- if not g_schema_suites.exists(a_schema_name) or g_schema_suites(a_schema_name)
337- .changed_at <= l_schema_info.changed_at
338- or g_schema_suites(a_schema_name).obj_cnt != l_schema_info.obj_cnt then
330+ if not g_schema_suites.exists(a_schema_name) or g_schema_suites(a_schema_name).changed_at <= l_schema_info.changed_at or
331+ g_schema_suites(a_schema_name).obj_cnt != l_schema_info.obj_cnt then
339332 ut_utils.debug_log('Rescanning schema ' || a_schema_name);
340333 config_schema(a_schema_name);
341334 end if;
@@ -351,18 +344,31 @@ create or replace package body ut_suite_manager is
351344 l_schema_ut_packages ut_object_names := ut_object_names();
352345 l_schema_suites tt_schema_suites;
353346 l_iter varchar2(4000);
347+ procedure populate_suite_ut_packages(a_suite ut_logical_suite, a_packages in out nocopy ut_object_names) is
348+ l_sub_suite ut_logical_suite;
349+ begin
350+ if a_suite is of (ut_suite) then
351+ a_packages.extend;
352+ a_packages(a_packages.last) := ut_object_name(a_suite.object_owner, a_suite.object_name);
353+ end if;
354+ for i in 1 .. a_suite.items.count loop
355+ if a_suite.items(i) is of (ut_logical_suite) then
356+ l_sub_suite := treat(a_suite.items(i) as ut_logical_suite);
357+ populate_suite_ut_packages(l_sub_suite, a_packages);
358+ end if;
359+ end loop;
360+ end;
354361 begin
355362 if a_schema_names is not null then
356363 for i in 1 .. a_schema_names.count loop
357364 l_schema_suites := get_schema_suites(a_schema_names(i));
358365 l_iter := l_schema_suites.first;
359366 while l_iter is not null loop
360- l_schema_ut_packages.extend;
361- l_schema_ut_packages(l_schema_ut_packages.last) := ut_object_name(l_schema_suites(l_iter).object_owner, l_schema_suites(l_iter).object_name);
367+ populate_suite_ut_packages(l_schema_suites(l_iter), l_schema_ut_packages);
362368 l_iter := l_schema_suites.next(l_iter);
363369 end loop;
364370 end loop;
365- -- l_schema_ut_packages := set(l_schema_ut_packages);
371+ l_schema_ut_packages := set(l_schema_ut_packages);
366372 end if;
367373
368374 return l_schema_ut_packages;
0 commit comments