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

Skip to content

Commit f475b7c

Browse files
committed
Added suite_cache.
Refactored lots of code for suite parsing/building. (Acceptance) tests need rework due to changes in test execution ordering.
1 parent e41d6f9 commit f475b7c

21 files changed

Lines changed: 463 additions & 984 deletions

source/core/annotations/ut_annotated_object.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ create type ut_annotated_object as object(
1818
object_owner varchar2(250),
1919
object_name varchar2(250),
2020
object_type varchar2(50),
21-
parse_time date,
21+
parse_time timestamp,
2222
annotations ut_annotations
2323
)
2424
/

source/core/annotations/ut_annotation_cache_info.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ create table ut_annotation_cache_info (
1616
object_owner varchar2(250) not null,
1717
object_name varchar2(250) not null,
1818
object_type varchar2(250) not null,
19-
parse_time date not null,
19+
parse_time timestamp not null,
2020
constraint ut_annotation_cache_info_pk primary key(cache_id),
2121
constraint ut_annotation_cache_info_uk unique (object_owner, object_name, object_type)
2222
) organization index;

source/core/annotations/ut_annotation_cache_manager.pkb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ create or replace package body ut_annotation_cache_manager as
2222
pragma autonomous_transaction;
2323
begin
2424
update ut_annotation_cache_info i
25-
set i.parse_time = sysdate
25+
set i.parse_time = systimestamp
2626
where (i.object_owner, i.object_name, i.object_type)
2727
in ((a_object.object_owner, a_object.object_name, a_object.object_type))
2828
returning cache_id into l_cache_id;
2929
if sql%rowcount = 0 then
3030
insert into ut_annotation_cache_info
3131
(cache_id, object_owner, object_name, object_type, parse_time)
32-
values (ut_annotation_cache_seq.nextval, a_object.object_owner, a_object.object_name, a_object.object_type, sysdate)
32+
values (ut_annotation_cache_seq.nextval, a_object.object_owner, a_object.object_name, a_object.object_type, systimestamp)
3333
returning cache_id into l_cache_id;
3434
end if;
3535

@@ -66,15 +66,15 @@ create or replace package body ut_annotation_cache_manager as
6666
on (o.object_name = i.object_name
6767
and o.object_type = i.object_type
6868
and o.object_owner = i.object_owner)
69-
when matched then update set parse_time = sysdate
69+
when matched then update set parse_time = systimestamp
7070
when not matched then insert
7171
(cache_id, object_owner, object_name, object_type, parse_time)
72-
values (ut_annotation_cache_seq.nextval, o.object_owner, o.object_name, o.object_type, sysdate);
72+
values (ut_annotation_cache_seq.nextval, o.object_owner, o.object_name, o.object_type, systimestamp);
7373

7474
commit;
7575
end;
7676

77-
function get_annotations_for_objects(a_cached_objects ut_annotation_objs_cache_info, a_parse_date date) return sys_refcursor is
77+
function get_annotations_for_objects(a_cached_objects ut_annotation_objs_cache_info, a_parse_time timestamp) return sys_refcursor is
7878
l_results sys_refcursor;
7979
begin
8080
open l_results for q'[
@@ -92,9 +92,9 @@ create or replace package body ut_annotation_cache_manager as
9292
join ut_annotation_cache_info i
9393
on o.object_owner = i.object_owner and o.object_name = i.object_name and o.object_type = i.object_type
9494
join ut_annotation_cache c on i.cache_id = c.cache_id
95-
where ]'|| case when a_parse_date is null then ':a_parse_date is null' else 'i.parse_time > :a_parse_date' end ||q'[
95+
where ]'|| case when a_parse_time is null then ':a_parse_date is null' else 'i.parse_time > :a_parse_time' end ||q'[
9696
group by i.object_owner, i.object_name, i.object_type, i.parse_time]'
97-
using a_cached_objects, a_parse_date;
97+
using a_cached_objects, a_parse_time;
9898
return l_results;
9999
end;
100100

source/core/annotations/ut_annotation_cache_manager.pks

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ create or replace package ut_annotation_cache_manager authid definer as
3232
*
3333
* @param a_cached_objects a `ut_annotation_objs_cache_info` list with information about objects to get from cache
3434
*/
35-
function get_annotations_for_objects(a_cached_objects ut_annotation_objs_cache_info, a_parse_date date) return sys_refcursor;
35+
function get_annotations_for_objects(a_cached_objects ut_annotation_objs_cache_info, a_parse_time timestamp) return sys_refcursor;
3636

3737
/**
3838
* Removes cached information about annotations for objects on the list and updates parse_time in cache info table.

source/core/annotations/ut_annotation_manager.pkb

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ create or replace package body ut_annotation_manager as
1919
------------------------------
2020
--private definitions
2121

22-
function get_annotation_objs_info(a_object_owner varchar2, a_object_type varchar2, a_parse_date date := null) return ut_annotation_objs_cache_info is
22+
function get_annotation_objs_info(a_object_owner varchar2, a_object_type varchar2, a_parse_date timestamp := null) return ut_annotation_objs_cache_info is
2323
l_rows sys_refcursor;
2424
l_ut_owner varchar2(250) := ut_utils.ut_owner;
2525
l_objects_view varchar2(200) := ut_metadata.get_dba_view('dba_objects');
@@ -31,7 +31,7 @@ create or replace package body ut_annotation_manager as
3131
object_owner => o.owner,
3232
object_name => o.object_name,
3333
object_type => o.object_type,
34-
needs_refresh => case when o.last_ddl_time < i.parse_time then 'N' else 'Y' end
34+
needs_refresh => case when o.last_ddl_time < cast(i.parse_time as date) then 'N' else 'Y' end
3535
)
3636
from ]'||l_objects_view||q'[ o
3737
left join ]'||l_ut_owner||q'[.ut_annotation_cache_info i
@@ -44,7 +44,7 @@ create or replace package body ut_annotation_manager as
4444
|| case
4545
when a_parse_date is null
4646
then ':a_parse_date is null'
47-
else 'o.last_ddl_time > :a_parse_date'
47+
else 'o.last_ddl_time > cast(:a_parse_date as date)'
4848
end;
4949
open l_rows for l_cursor_text using a_object_owner, a_object_type, a_parse_date;
5050
fetch l_rows bulk collect into l_result limit 1000000;
@@ -148,37 +148,17 @@ create or replace package body ut_annotation_manager as
148148

149149

150150
procedure rebuild_annotation_cache( a_object_owner varchar2, a_object_type varchar2, a_info_rows ut_annotation_objs_cache_info) is
151-
l_objects_in_cache_count integer;
152151
l_objects_to_parse ut_annotation_objs_cache_info := ut_annotation_objs_cache_info();
153152
begin
154-
--get list of objects in cache
155-
select count(1) into l_objects_in_cache_count
156-
from table(a_info_rows) x where x.needs_refresh = 'N';
157-
158-
--if cache is empty and there are objects to parse
159-
if l_objects_in_cache_count = 0 and a_info_rows.count > 0 then
153+
select value(x)bulk collect into l_objects_to_parse from table(a_info_rows) x where x.needs_refresh = 'Y';
160154

155+
--if some source needs parsing and putting into cache
156+
if l_objects_to_parse.count > 0 then
161157
build_annot_cache_for_sources(
162158
a_object_owner, a_object_type,
163-
--all schema objects
164-
get_sources_to_annotate(a_object_owner, a_object_type),
165-
a_info_rows
159+
get_sources_to_annotate(a_object_owner, a_object_type, l_objects_to_parse),
160+
l_objects_to_parse
166161
);
167-
168-
--if not all in cache, get list of objects to rebuild cache for
169-
elsif l_objects_in_cache_count < a_info_rows.count then
170-
171-
select value(x)bulk collect into l_objects_to_parse from table(a_info_rows) x where x.needs_refresh = 'Y';
172-
173-
--if some source needs parsing and putting into cache
174-
if l_objects_to_parse.count > 0 then
175-
build_annot_cache_for_sources(
176-
a_object_owner, a_object_type,
177-
get_sources_to_annotate(a_object_owner, a_object_type, l_objects_to_parse),
178-
l_objects_to_parse
179-
);
180-
end if;
181-
182162
end if;
183163
end;
184164

@@ -194,7 +174,7 @@ create or replace package body ut_annotation_manager as
194174
);
195175
end;
196176

197-
function get_annotated_objects(a_object_owner varchar2, a_object_type varchar2, a_parse_date date := null) return ut_annotated_objects pipelined is
177+
function get_annotated_objects(a_object_owner varchar2, a_object_type varchar2, a_parse_date timestamp := null) return ut_annotated_objects pipelined is
198178
l_info_rows ut_annotation_objs_cache_info;
199179
l_cursor sys_refcursor;
200180
l_results ut_annotated_objects;

source/core/annotations/ut_annotation_manager.pks

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ create or replace package ut_annotation_manager authid current_user as
3030
* @param a_parse_date date when object was last parsed
3131
* @return array containing annotated objects along with annotations for each object (nested)
3232
*/
33-
function get_annotated_objects(a_object_owner varchar2, a_object_type varchar2, a_parse_date date := null) return ut_annotated_objects pipelined;
33+
function get_annotated_objects(a_object_owner varchar2, a_object_type varchar2, a_parse_date timestamp := null) return ut_annotated_objects pipelined;
3434

3535
/**
3636
* Rebuilds annotation cache for a specified schema and object type.

source/core/types/ut_logical_suite.tpb

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ create or replace type body ut_logical_suite as
2121
) return self as result is
2222
begin
2323
self.self_type := $$plsql_unit;
24-
self.init(a_object_owner, a_object_name, a_name, 0);
24+
self.init(a_object_owner, a_object_name, a_name, null);
2525
self.path := a_path;
2626
self.disabled_flag := ut_utils.boolean_to_int(false);
2727
self.items := ut_suite_items();
@@ -33,10 +33,26 @@ create or replace type body ut_logical_suite as
3333
return true;
3434
end;
3535

36-
member procedure add_item(self in out nocopy ut_logical_suite, a_item ut_suite_item) is
36+
overriding member procedure add_item(
37+
self in out nocopy ut_logical_suite,
38+
a_item ut_suite_item,
39+
a_expected_level integer := 1,
40+
a_current_level integer :=1
41+
) is
3742
begin
38-
self.items.extend;
39-
self.items(self.items.last) := a_item;
43+
if a_expected_level > a_current_level then
44+
if self.items.last is not null then
45+
self.items(self.items.last).add_item(a_item, a_expected_level, a_current_level+1);
46+
else
47+
raise_application_error(-20000, 'cannot add suite item to sub suite at level '||a_expected_level||'. suite items at level '||a_current_level||' are empty');
48+
end if;
49+
else
50+
if self.items is null then
51+
self.items := ut_suite_items();
52+
end if;
53+
self.items.extend;
54+
self.items(self.items.last) := a_item;
55+
end if;
4056
end;
4157

4258
overriding member procedure mark_as_skipped(self in out nocopy ut_logical_suite) is

source/core/types/ut_logical_suite.tps

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ create or replace type ut_logical_suite under ut_suite_item (
2525
self in out nocopy ut_logical_suite, a_object_owner varchar2, a_object_name varchar2, a_name varchar2, a_path varchar2
2626
) return self as result,
2727
member function is_valid(self in out nocopy ut_logical_suite) return boolean,
28-
member procedure add_item(self in out nocopy ut_logical_suite, a_item ut_suite_item),
28+
overriding member procedure add_item(
29+
self in out nocopy ut_logical_suite,
30+
a_item ut_suite_item,
31+
a_expected_level integer := 1,
32+
a_current_level integer :=1
33+
),
2934
overriding member procedure mark_as_skipped(self in out nocopy ut_logical_suite),
3035
overriding member procedure set_rollback_type(self in out nocopy ut_logical_suite, a_rollback_type integer),
3136
overriding member function do_execute(self in out nocopy ut_logical_suite) return boolean,

source/core/types/ut_run.tpb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ create or replace type body ut_run as
5151
null;
5252
end;
5353

54+
overriding member procedure add_item(
55+
self in out nocopy ut_run,
56+
a_item ut_suite_item,
57+
a_expected_level integer := 1,
58+
a_current_level integer :=1
59+
) is
60+
begin
61+
raise_application_error(-20000, 'Cannot add a suite item to ut_run');
62+
end;
63+
5464
overriding member function do_execute(self in out nocopy ut_run) return boolean is
5565
l_completed_without_errors boolean;
5666
begin

source/core/types/ut_run.tps

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ create or replace type ut_run under ut_suite_item (
3636
a_client_character_set varchar2 := null
3737
) return self as result,
3838
overriding member procedure mark_as_skipped(self in out nocopy ut_run),
39+
overriding member procedure add_item(
40+
self in out nocopy ut_run,
41+
a_item ut_suite_item,
42+
a_expected_level integer := 1,
43+
a_current_level integer :=1
44+
),
3945
overriding member function do_execute(self in out nocopy ut_run) return boolean,
4046
overriding member procedure calc_execution_result(self in out nocopy ut_run),
4147
overriding member procedure mark_as_errored(self in out nocopy ut_run, a_error_stack_trace varchar2),

0 commit comments

Comments
 (0)