Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b80458f

Browse files
committed
implementation
1 parent 1470e1e commit b80458f

2 files changed

Lines changed: 24 additions & 62 deletions

File tree

source/core/ut_suite_manager.pkb

Lines changed: 24 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
create or replace package body ut_suite_manager is
22

33
type tt_schema_suits is table of ut_test_suite index by varchar2(4000 char);
4-
type tt_schena_suits_list is table of tt_schema_suits index by varchar2(32 char);
4+
type t_schema_cache is record (schema_suites tt_schema_suits, changed_at date);
5+
type tt_schena_suits_list is table of t_schema_cache index by varchar2(32 char);
56

67
g_schema_suites tt_schena_suits_list;
78

89
function trim_path(a_path varchar2, a_part varchar2) return varchar2 is
910
begin
1011
return substr(a_path, nvl(length(a_part), 0) + 1);
1112
end;
13+
14+
function get_schema_max_ddl(a_owner_name varchar2) return date is
15+
l_date date;
16+
begin
17+
select max(t.LAST_DDL_TIME)
18+
into l_date
19+
from all_objects t
20+
where t.owner = a_owner_name
21+
and t.object_type in ('PACKAGE');
22+
return l_date;
23+
end;
1224

1325
function config_package(a_owner_name varchar2, a_object_name varchar2) return ut_test_suite is
1426
l_annotation_data ut_annotations.typ_annotated_package;
@@ -169,6 +181,8 @@ create or replace package body ut_suite_manager is
169181
l_root_suite ut_test_suite;
170182

171183
l_schema_suites tt_schema_suits;
184+
185+
l_max_ddl_date date;
172186

173187
procedure put(a_root_suite in out nocopy ut_test_suite, a_path varchar2, a_suite ut_test_suite, a_parent_path varchar2 default null) is
174188
l_temp_root varchar2(4000 char);
@@ -234,6 +248,7 @@ create or replace package body ut_suite_manager is
234248
$end
235249

236250
begin
251+
l_max_ddl_date := get_schema_max_ddl(a_owner_name);
237252
-- form the single-dimension list of suites constructed from parsed packages
238253
for rec in (select t.owner
239254
,t.object_name
@@ -274,7 +289,8 @@ create or replace package body ut_suite_manager is
274289

275290
-- Each nonempty root-suite list for the schema is saved into the cache
276291
if l_schema_suites.count > 0 then
277-
g_schema_suites(a_owner_name) := l_schema_suites;
292+
g_schema_suites(a_owner_name).schema_suites := l_schema_suites;
293+
g_schema_suites(a_owner_name).changed_at := l_max_ddl_date;
278294
elsif g_schema_suites.exists(a_owner_name) then
279295
g_schema_suites.delete(a_owner_name);
280296
end if;
@@ -290,62 +306,16 @@ create or replace package body ut_suite_manager is
290306

291307
end config_schema;
292308

293-
procedure run_schema_suites(a_owner_name varchar2, a_reporter in out nocopy ut_reporter, a_force_parse_again boolean default false) is
294-
l_ind varchar2(4000 char);
295-
l_suite ut_test_suite;
296-
l_suite_list ut_objects_list := ut_objects_list();
297-
begin
298-
--TODO - we do not have a way to pass list of suites here
299-
a_reporter.before_run(ut_objects_list());
300-
if not g_schema_suites.exists(a_owner_name) or g_schema_suites(a_owner_name).count = 0 or
301-
nvl(a_force_parse_again, false) then
302-
config_schema(a_owner_name);
303-
end if;
304-
305-
if g_schema_suites.exists(a_owner_name) then
306-
l_ind := g_schema_suites(a_owner_name).first;
307-
while l_ind is not null loop
308-
l_suite := g_schema_suites(a_owner_name) (l_ind);
309-
l_suite.do_execute(a_reporter => a_reporter);
310-
l_suite_list.extend; l_suite_list(l_suite_list.last) := l_suite;
311-
l_ind := g_schema_suites(a_owner_name).next(l_ind);
312-
end loop;
313-
else
314-
-- we have to figure out what to do here
315-
null;
316-
end if;
317-
--TODO - we do not have a way to pass list of suites here
318-
a_reporter.after_run(l_suite_list);
319-
end run_schema_suites;
320-
321-
procedure run_schema_suites_static(a_owner_name varchar2, a_reporter in ut_reporter, a_force_parse_again boolean default false) is
322-
l_temp_reported ut_reporter;
323-
begin
324-
l_temp_reported := a_reporter;
325-
run_schema_suites(a_owner_name, l_temp_reported, a_force_parse_again);
326-
end run_schema_suites_static;
327-
328-
procedure run_cur_schema_suites(a_reporter in out nocopy ut_reporter, a_force_parse_again boolean default false) is
329-
begin
330-
run_schema_suites(sys_context('userenv', 'current_schema'), a_reporter, a_force_parse_again);
331-
end run_cur_schema_suites;
332-
333-
procedure run_cur_schema_suites_static(a_reporter in ut_reporter, a_force_parse_again boolean default false) is
334-
l_temp_reported ut_reporter;
335-
begin
336-
l_temp_reported := a_reporter;
337-
run_schema_suites(sys_context('userenv', 'current_schema'), l_temp_reported, a_force_parse_again);
338-
end run_cur_schema_suites_static;
339-
340309
function get_schema_suites(a_schema_name in varchar2) return tt_schema_suits is
341310
begin
342311
-- Currently cache invalidation on DDL is not implemented so schema is rescaned each time
343-
--if not g_schema_suites.exists(a_schema_name) then
344-
-- config_schema(a_schema_name);
345-
--end if;
346-
config_schema(a_schema_name);
312+
if not g_schema_suites.exists(a_schema_name)
313+
or g_schema_suites(a_schema_name).changed_at<nvl(get_schema_max_ddl(a_schema_name), date'2999-12-31') then
314+
ut_utils.debug_log('Rescanning schema ' || a_schema_name);
315+
config_schema(a_schema_name);
316+
end if;
347317

348-
return g_schema_suites(a_schema_name);
318+
return g_schema_suites(a_schema_name).schema_suites;
349319
end get_schema_suites;
350320

351321
-- Validate all paths are correctly formatted

source/core/ut_suite_manager.pks

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@ create or replace package ut_suite_manager authid definer is
33
function config_package(a_owner_name varchar2, a_object_name varchar2) return ut_test_suite;
44

55
procedure config_schema(a_owner_name varchar2);
6-
7-
procedure run_schema_suites(a_owner_name varchar2, a_reporter in out nocopy ut_reporter, a_force_parse_again boolean default false);
8-
9-
procedure run_schema_suites_static(a_owner_name varchar2, a_reporter in ut_reporter, a_force_parse_again boolean default false);
10-
11-
procedure run_cur_schema_suites(a_reporter in out nocopy ut_reporter, a_force_parse_again boolean default false);
12-
13-
procedure run_cur_schema_suites_static(a_reporter in ut_reporter, a_force_parse_again boolean default false);
146

157
procedure run(a_path in varchar2, a_reporter in ut_reporter);
168
-- to be implemented

0 commit comments

Comments
 (0)