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

Skip to content

Commit 242b2a3

Browse files
committed
Fixed issues with parsing code through trigger.
Added disabling trigger on annotation parser tests.
1 parent aa313e5 commit 242b2a3

10 files changed

Lines changed: 56 additions & 23 deletions

.travis/install.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ SQL
6969
time "$SQLCLI" sys/$ORACLE_PWD@//$CONNECTION_STR AS SYSDBA <<-SQL
7070
set feedback off
7171
@create_utplsql_owner.sql $UT3_TESTER $UT3_TESTER_PASSWORD $UT3_TABLESPACE
72+
--needed for disabling DDL trigger and testint parser without trigger enabled/present
73+
grant alter any trigger to ut3_tester;
74+
grant administer database trigger to $UT3_TESTER;
7275
exit
7376
SQL
7477

source/core/annotations/ut_annotation_manager.pkb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ create or replace package body ut_annotation_manager as
182182
fetch a_sources_cursor bulk collect into l_names, l_lines limit c_lines_fetch_limit;
183183
for i in 1 .. l_names.count loop
184184
if l_names(i) != l_name then
185-
l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines);
185+
l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines, a_object_type);
186186
ut_annotation_cache_manager.update_cache(
187187
ut_annotated_object(a_object_owner, l_name, a_object_type, l_parse_time, l_annotations)
188188
);
@@ -196,7 +196,7 @@ create or replace package body ut_annotation_manager as
196196

197197
end loop;
198198
if a_sources_cursor%rowcount > 0 then
199-
l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines);
199+
l_annotations := ut_annotation_parser.parse_object_annotations(l_object_lines, a_object_type);
200200
ut_annotation_cache_manager.update_cache(
201201
ut_annotated_object(a_object_owner, l_name, a_object_type, l_parse_time, l_annotations)
202202
);
@@ -263,14 +263,14 @@ create or replace package body ut_annotation_manager as
263263
l_sql_text ora_name_list_t := a_sql_text;
264264
begin
265265
if a_parts > 0 then
266-
l_sql_text(1) := regexp_replace(l_sql_text(1),'^\s*create(\s+or\s+replace)?(\s+(non)?editionable)?\s+', modifier => 'i');
266+
l_sql_text(1) := regexp_replace(l_sql_text(1),'^\s*create(\s+or\s+replace){0,1}(\s+(editionable|noneditionable)){0,1}\s+{0,1}', modifier => 'i');
267267
for i in 1..a_parts loop
268268
ut_utils.append_to_clob(l_sql_clob, l_sql_text(i));
269269
end loop;
270270
l_sql_lines := ut_utils.convert_collection( ut_utils.clob_to_table(l_sql_clob) );
271271
end if;
272272
open l_result for
273-
select a_object_name as name, column_value||chr(10) as text from table(l_sql_lines) where rownum <1;
273+
select a_object_name as name, column_value||chr(10) as text from table(l_sql_lines);
274274
return l_result;
275275
end;
276276
begin

source/core/annotations/ut_annotation_parser.pkb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ create or replace package body ut_annotation_parser as
223223
return l_result;
224224
end parse_object_annotations;
225225

226-
function parse_object_annotations(a_source_lines dbms_preprocessor.source_lines_t) return ut_annotations is
226+
function parse_object_annotations(a_source_lines dbms_preprocessor.source_lines_t, a_object_type varchar2) return ut_annotations is
227227
l_processed_lines dbms_preprocessor.source_lines_t;
228228
l_source clob;
229229
l_annotations ut_annotations := ut_annotations();
@@ -235,7 +235,11 @@ create or replace package body ut_annotation_parser as
235235
--convert to post-processed source clob
236236
begin
237237
--get post-processed source
238-
l_processed_lines := sys.dbms_preprocessor.get_post_processed_source(a_source_lines);
238+
if a_object_type = 'TYPE' then
239+
l_processed_lines := a_source_lines;
240+
else
241+
l_processed_lines := sys.dbms_preprocessor.get_post_processed_source(a_source_lines);
242+
end if;
239243
--convert to clob
240244
for i in 1..l_processed_lines.count loop
241245
ut_utils.append_to_clob(l_source, replace(l_processed_lines(i), chr(13)||chr(10), chr(10)));

source/core/annotations/ut_annotation_parser.pks

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ create or replace package ut_annotation_parser authid current_user as
2727
* @param a_source_lines ordered lines of source code to be parsed
2828
* @return array containing annotations
2929
*/
30-
function parse_object_annotations(a_source_lines dbms_preprocessor.source_lines_t) return ut_annotations;
30+
function parse_object_annotations(a_source_lines dbms_preprocessor.source_lines_t, a_object_type varchar2) return ut_annotations;
3131

3232

3333
/**

source/core/annotations/ut_trigger_annotation_parsing.trg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ begin
88
'ANONYMOUS','APPQOSSYS','AUDSYS','DBSFWUSER','DBSNMP','DIP','GGSYS','GSMADMIN_INTERNAL',
99
'GSMCATUSER','GSMUSER','ORACLE_OCM','OUTLN','REMOTE_SCHEDULER_AGENT','SYS','SYS$UMF',
1010
'SYSBACKUP','SYSDG','SYSKM','SYSRAC','SYSTEM','WMSYS','XDB','XS$NULL')
11+
and not (ora_dict_obj_type = 'TYPE' and ora_dict_obj_name like 'SYS\_PLSQL\_%' escape '\')
1112
)
1213
or (ora_dict_obj_owner = UPPER('&&UT3_OWNER')
1314
and ora_dict_obj_name = 'UT3_TRIGGER_ALIVE'

source/core/annotations/ut_trigger_check.pkb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ create or replace package body ut_trigger_check is
1717
*/
1818

1919
g_is_trigger_live boolean := false;
20-
gc_check_object_name constant varchar2(128) := 'UT3_TRIGGER_ALIVE';
2120

2221
function is_alive return boolean is
2322
pragma autonomous_transaction;
@@ -32,6 +31,8 @@ create or replace package body ut_trigger_check is
3231
begin
3332
if ora_dict_obj_owner = ut_utils.ut_owner and ora_dict_obj_name = gc_check_object_name and ora_dict_obj_type = 'SYNONYM' then
3433
g_is_trigger_live := true;
34+
else
35+
g_is_trigger_live := false;
3536
end if;
3637
end;
3738

source/core/annotations/ut_trigger_check.pks

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@ create or replace package ut_trigger_check authid definer is
1616
limitations under the License.
1717
*/
1818

19+
gc_check_object_name constant varchar2(128) := 'UT3_TRIGGER_ALIVE';
20+
1921
/**
2022
* checks if the trigger &&UT3_OWNER._PARSE is enabled and operational.
2123
*/
22-
2324
function is_alive return boolean;
2425

26+
/**
27+
* If called from a DDL trigger when creating object gc_check_object_name, sts alive flag to true
28+
* Otherwise sets alive flag to false.
29+
*/
2530
procedure is_alive;
2631

2732
end;

test/ut3_tester/core/annotations/test_annotation_manager.pkb

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
create or replace package body test_annotation_manager is
22

3+
procedure disable_ddl_trigger is
4+
pragma autonomous_transaction;
5+
begin
6+
execute immediate 'alter trigger ut3.ut_trigger_annotation_parsing disable';
7+
execute immediate 'begin ut3.ut_trigger_check.is_alive(); end;';
8+
end;
9+
10+
procedure enable_ddl_trigger is
11+
pragma autonomous_transaction;
12+
begin
13+
execute immediate 'alter trigger ut3.ut_trigger_annotation_parsing enable';
14+
end;
15+
316
procedure create_dummy_package is
417
pragma autonomous_transaction;
518
begin
@@ -49,6 +62,9 @@ create or replace package body test_annotation_manager is
4962
pragma autonomous_transaction;
5063
begin
5164
execute immediate q'[drop package dummy_test_package]';
65+
exception
66+
when others then
67+
null;
5268
end;
5369

5470
procedure recompile_dummy_test_package is
@@ -241,8 +257,7 @@ create or replace package body test_annotation_manager is
241257
order by annotation_position;
242258

243259
open l_expected for
244-
select 2 as annotation_position, 'suite' as annotation_name,
245-
'dummy_test_suite' as annotation_text, '' as subobject_name
260+
select 2 as annotation_position, 'suite' as annotation_name, 'dummy_test_suite' as annotation_text, '' as subobject_name
246261
from dual union all
247262
select 3, 'rollback' , 'manual', '' as subobject_name
248263
from dual union all

test/ut3_tester/core/annotations/test_annotation_manager.pks

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,21 @@ create or replace package test_annotation_manager is
1818

1919
procedure drop_dummy_test_package;
2020

21+
--%context(Without DDL trigger)
22+
23+
--%beforeall
24+
procedure disable_ddl_trigger;
25+
26+
--%afterall
27+
procedure enable_ddl_trigger;
28+
29+
--%beforeeach(create_dummy_package)
30+
--%aftereach(drop_dummy_package)
31+
2132
--%test(Adds new package to annotation cache info)
22-
--%beforetest(create_dummy_package)
23-
--%aftertest(drop_dummy_package)
24-
--%disabled(TODO - make it run with triger disabled)
2533
procedure add_new_package;
2634

2735
--%test(Updates annotation cache info for modified package)
28-
--%beforetest(create_dummy_package)
29-
--%aftertest(drop_dummy_package)
30-
--%disabled(TODO - make it run with triger disabled)
3136
procedure update_modified_package;
3237

3338
--%test(Adds annotations to cache for unit test package)
@@ -36,23 +41,22 @@ create or replace package test_annotation_manager is
3641
procedure add_new_test_package;
3742

3843
--%test(Updates annotations in cache for modified test package)
39-
--%beforetest(create_dummy_test_package)
40-
--%aftertest(drop_dummy_test_package)
4144
procedure update_modified_test_package;
4245

4346
--%test(Keeps annotations in cache when object was removed but user can't see whole schema)
4447
--%beforetest(create_dummy_test_package,create_parse_proc_as_ut3$user#)
4548
--%aftertest(drop_parse_proc_as_ut3$user#)
46-
--%disabled(no longer true with trigger enabled)
4749
procedure keep_dropped_data_in_cache;
4850

4951
--%test(Does not return data for dropped object)
50-
--%beforetest(create_dummy_test_package)
5152
procedure no_data_for_dropped_object;
5253

5354
--%test(Remove object from cache when object dropped and user can see whole schema)
54-
--%beforetest(create_dummy_test_package)
5555
procedure cleanup_dropped_data_in_cache;
5656

57+
--%endcontext
58+
59+
--TODO add tests with trigger
60+
5761
end test_annotation_manager;
5862
/

test/ut3_tester/core/annotations/test_annotation_parser.pkb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ v58yvbLAXLi9gYHwoIvAgccti+Cmpg0DKLY=
305305
-- %some_annotation_like_text
306306
';
307307
--Act
308-
l_actual := ut3.ut_annotation_parser.parse_object_annotations(l_source);
308+
l_actual := ut3.ut_annotation_parser.parse_object_annotations(l_source,'PACKAGE');
309309
--Assert
310310
ut.expect(anydata.convertCollection(l_actual)).to_be_empty();
311311
end;

0 commit comments

Comments
 (0)