8000 Merge pull request #939 from utPLSQL/feature/remove_dbms_utility_name… · utPLSQL/utPLSQL@f8e42da · GitHub
[go: up one dir, main page]

Skip to content

Commit f8e42da

Browse files
authored
Merge pull request #939 from utPLSQL/feature/remove_dbms_utility_name_resolve
Removed dependency on `dbms_utility.name_resolve`.
2 parents c6c3af5 + 823893c commit f8e42da

File tree

7 files changed

+76
-79
lines changed

7 files changed

+76
-79
lines changed

source/core/types/ut_executable.tpb

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,13 @@ create or replace type body ut_executable is
2929
return;
3030
end;
3131

32-
member function form_name return varchar2 is
32+
member function form_name(a_skip_current_user_schema boolean := false) return varchar2 is
33+
l_owner_name varchar2(250) := owner_name;
3334
begin
34-
return ut_metadata.form_name(owner_name, object_name, procedure_name);
35+
if a_skip_current_user_schema and sys_context('userenv', 'current_schema') = owner_name then
36+
l_owner_name := null;
37+
end if;
38+
return ut_metadata.form_name(l_owner_name, object_name, procedure_name);
3539
end;
3640

3741
member procedure do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item) is
@@ -71,10 +75,9 @@ create or replace type body ut_executable is
7175
begin
7276

7377
if not ut_metadata.package_valid(self.owner_name, self.object_name) then
74-
self.error_stack := l_message_part || 'package does not exist or is invalid: ' ||upper(self.owner_name||'.'||self.object_name);
78+
self.error_stack := l_message_part || 'package '||upper(self.owner_name||'.'||self.object_name)||' does not exist or is invalid.';
7579
elsif not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.procedure_name) then
76-
self.error_stack := l_message_part || 'procedure does not exist '
77-
|| upper(self.owner_name || '.' || self.object_name || '.' ||self.procedure_name);
80+
self.error_stack := l_message_part || 'procedure '||upper(self.owner_name || '.' || self.object_name || '.' ||self.procedure_name)||' does not exist.';
7881
else
7982
l_result := false;
8083
end if;
@@ -115,7 +118,7 @@ create or replace type body ut_executable is
115118
' l_error_backtrace varchar2(32767);' || chr(10) ||
116119
'begin' || chr(10) ||
117120
' begin' || chr(10) ||
118-
' ' || self.form_name() || ';' || chr(10) ||
121+
' ' || self.form_name( a_skip_current_user_schema => true ) || ';' || chr(10) ||
119122
' exception' || chr(10) ||
120123
' when others then ' || chr(10) ||
121124
' l_error_stack := dbms_utility.format_error_stack;' || chr(10) ||

source/core/types/ut_executable.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ create or replace type ut_executable under ut_event_item(
3030
*/
3131
seq_no integer,
3232
constructor function ut_executable( self in out nocopy ut_executable, a_owner varchar2, a_package varchar2, a_procedure_name varchar2, a_executable_type varchar2) return self as result,
33-
member function form_name return varchar2,
33+
member function form_name(a_skip_current_user_schema boolean := false) return varchar2,
3434
member procedure do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item),
3535
/**
3636
* executes the defines executable

source/core/ut_metadata.pkb

Lines changed: 17 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,6 @@ create or replace package body ut_metadata as
2121
g_cached_object varchar2(500);
2222
------------------------------
2323
--public definitions
24-
25-
procedure do_resolve(a_owner in out nocopy varchar2, a_object in out nocopy varchar2, a_procedure_name in out nocopy varchar2) is
26-
l_name varchar2(200);
27-
l_context integer := 1; --plsql
28-
begin
29-
l_name := form_name(a_owner, a_object, a_procedure_name);
30-
do_resolve(l_name,l_context,a_owner,a_object, a_procedure_name);
31-
end do_resolve;
32-
33-
procedure do_resolve(a_fully_qualified_name in varchar2,a_context in integer,a_owner out nocopy varchar2, a_object out nocopy varchar2,
34-
a_procedure_name out nocopy varchar2) is
35-
l_dblink varchar2(200);
36-
l_part1_type number;
37-
l_object_number number;
38-
begin
39-
dbms_utility.name_resolve(name => a_fully_qualified_name
40-
,context => a_context
41-
,schema => a_owner
42-
,part1 => a_object
43-
,part2 => a_procedure_name
44-
,dblink => l_dblink
45-
,part1_type => l_part1_type
46-
,object_number => l_object_number);
47-
end;
48-
4924
function form_name(a_owner_name varchar2, a_object varchar2, a_subprogram varchar2 default null) return varchar2 is
5025
l_name varchar2(200);
5126
begin
@@ -61,25 +36,16 @@ create or replace package body ut_metadata as
6136

6237
function package_valid(a_owner_name varchar2, a_package_name in varchar2) return boolean as
6338
l_cnt number;
64-
l_schema varchar2(200);
65-
l_package_name varchar2(200);
66-
l_procedure_name varchar2(200);
6739
l_view_name varchar2(200) := get_objects_view_name;
6840
begin
6941

70-
l_schema := a_owner_name;
71-
l_package_name := a_package_name;
72-
73-
do_resolve(l_schema, l_package_name, l_procedure_name);
74-
75-
execute immediate q'[select count(decode(status, 'VALID', 1, null)) / count(*)
42+
execute immediate q'[select count(*)
7643
from ]'||l_view_name||q'[
77-
where owner = :l_schema
78-
and object_name = :l_package_name
79-
and object_type in ('PACKAGE')]'
80-
into l_cnt using l_schema, l_package_name;
81-
82-
-- expect both package and body to be valid
44+
where owner = :a_owner_name
45+
and object_name = :a_package_name
46+
and object_type = 'PACKAGE'
47+
and status = 'VALID']'
48+
into l_cnt using upper(a_owner_name), upper(a_package_name);
8349
return l_cnt = 1;
8450
exception
8551
when others then
@@ -89,22 +55,12 @@ create or replace package body ut_metadata as
8955
function procedure_exists(a_owner_name varchar2, a_package_name in varchar2, a_procedure_name in varchar2)
9056
return boolean as
9157
l_cnt number;
92-
l_schema varchar2(200);
93-
l_package_name varchar2(200);
94-
l_procedure_name varchar2(200);
9558
l_view_name varchar2(200) := get_dba_view('dba_procedures');
9659
begin
97-
98-
l_schema := a_owner_name;
99-
l_package_name := a_package_name;
100-
l_procedure_name := a_procedure_name;
101-
102-
do_resolve(l_schema, l_package_name, l_procedure_name);
103-
10460
execute immediate
10561
'select count(*) from '||l_view_name
106-
||' where owner = :l_schema and object_name = :l_package_name and procedure_name = :l_procedure_name'
107-
into l_cnt using l_schema, l_package_name, l_procedure_name;
62+
||' where owner = :l_schema and object_name = :l_package_name and procedure_name = :l_procedure_name and rownum = 1'
63+
into l_cnt using a_owner_name, a_package_name, a_procedure_name;
10864

10965
--expect one method only for the package with that name.
11066
return l_cnt = 1;
@@ -327,12 +283,16 @@ create or replace package body ut_metadata as
327283
end;
328284

329285
function get_object_name(a_full_object_name in varchar2) return varchar2 is
330-
l_schema varchar2(250);
331-
l_object varchar2(250);
332-
l_procedure_name varchar2(250);
286+
l_result varchar2(250);
333287
begin
334-
ut_metadata.do_resolve(a_full_object_name,7,l_schema,l_object, l_procedure_name);
335-
return l_object;
288+
l_result := regexp_substr(
289+
a_full_object_name,
290+
'^([A-Za-z0-9$#_]+|".*?")\.([A-Za-z0-9$#_]+|".*?")', subexpression => 2
291+
);
292+
if not l_result like '"%"' then
293+
l_result := upper(l_result);
294+
end if;
295+
return sys.dbms_assert.qualified_sql_name(l_result);
336296
end;
337297

338298
function get_anydata_compound_type(a_data_value anydata) return varchar2 is

source/core/ut_metadata.pks

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,6 @@ create or replace package ut_metadata authid current_user as
6464
function procedure_exists(a_owner_name varchar2, a_package_name in varchar2, a_procedure_name in varchar2)
6565
return boolean;
6666

67-
/**
68-
* Resolves [owner.]object[.procedure] using dbms_utility.name_resolve and returns resolved parts
69-
*
70-
*/
71-
procedure do_resolve(a_owner in out nocopy varchar2, a_object in out nocopy varchar2, a_procedure_name in out nocopy varchar2);
72-
73-
/**
74-
* Resolves single string [owner.]object[.procedure] using dbms_utility.name_resolve and returns parts [owner] [object] [procedure]
75-
*/
76-
procedure do_resolve(a_fully_qualified_name in varchar2,a_context in integer,a_owner out nocopy varchar2,
77-
a_object out nocopy varchar2, a_procedure_name out nocopy varchar2);
78-
7967
/**
8068
* Return the text of the source line for a given object (body). It excludes package spec and type spec
8169
*/

test/ut3_tester/core/annotations/test_before_after_annotations.pkb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,7 @@ create or replace package body test_before_after_annotations is
282282
);
283283
ut.expect(g_tests_results).to_match(
284284
'1\) beforetest_missing_procedure\s+' ||
285-
'Call params for beforetest are not valid: procedure does not exist ' ||
286-
'UT3_TESTER.DUMMY_BEFORE_AFTER_TEST.NON_EXISTENT_PROCEDURE'
285+
'Call params for beforetest are not valid: procedure UT3_TESTER\.DUMMY_BEFORE_AFTER_TEST\.NON_EXISTENT_PROCEDURE does not exist\.'
287286
,'m'
288287
);
289288
end;

test/ut3_user/api/test_ut_run.pkb

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
create or replace package body test_ut_run is
22

3+
g_owner varchar2(250) := sys_context('userenv', 'current_schema');
4+
35
procedure clear_expectations is
46
begin
57
ut3_tester_helper.main_helper.clear_expectations();
@@ -576,7 +578,7 @@ Failures:%
576578
select * bulk collect into l_results from table(ut3.ut.run('failing_invalid_spec'));
577579

578580
l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results);
579-
ut.expect(l_actual).to_be_like('%Call params for % are not valid: package does not exist or is invalid: %FAILING_INVALID_SPEC%');
581+
ut.expect(l_actual).to_be_like('%Call params for % are not valid: package %FAILING_INVALID_SPEC% does not exist or is invalid.%');
580582

581583
end;
582584

@@ -739,6 +741,40 @@ Failures:%
739741
end loop;
740742
end;
741743

744+
procedure run_schema_name_test is
745+
l_results ut3.ut_varchar2_list;
746+
l_expected clob;
747+
begin
748+
select * bulk collect into l_results
749+
from table ( ut3.ut.run( g_owner||'.'||g_owner ) );
750+
l_expected := '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%';
751+
ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected );
752+
end;
753+
754+
procedure create_schema_name_package is
755+
pragma autonomous_transaction;
756+
begin
757+
execute immediate '
758+
create or replace package '||g_owner||'.'||g_owner||' as
759+
--%suite
760+
761+
--%test
762+
procedure sample_test;
763+
end;';
764+
765+
execute immediate '
766+
create or replace package body '||g_owner||'.'||g_owner||' as
767+
procedure sample_test is begin ut.expect(1).to_equal(1); end;
768+
end;';
769+
770+
end;
771+
772+
procedure drop_schema_name_package is
773+
pragma autonomous_transaction;
774+
begin
775+
execute immediate 'drop package '||g_owner||'.'||g_owner;
776+
end;
777+
742778
procedure run_with_random_order is
743779
l_random_results ut3.ut_varchar2_list;
744780
l_results ut3.ut_varchar2_list;

test/ut3_user/api/test_ut_run.pks

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ create or replace package test_ut_run is
8585

8686

8787
--%context(ut_run_function)
88+
8889
--%displayname(ut.run() function options)
8990
--%beforeall(create_ut3$user#_tests)
9091
--%afterall(drop_ut3$user#_tests)
@@ -145,9 +146,18 @@ create or replace package test_ut_run is
145146
procedure run_and_report_warnings;
146147
procedure create_bad_annot;
147148
procedure drop_bad_annot;
149+
150+
--%test(Can run test package that is named the same as schema name)
151+
--%beforetest(create_schema_name_package)
152+
--%aftertest(drop_schema_name_package)
153+
procedure run_schema_name_test;
154+
procedure create_schema_name_package;
155+
procedure drop_schema_name_package;
156+
148157
--%endcontext
149158

150159
--%context(random_order)
160+
151161
--%displayname(Random test execution order)
152162
--%beforeall(create_ut3$user#_tests)
153163
--%afterall(drop_ut3$user#_tests)
@@ -164,6 +174,7 @@ create or replace package test_ut_run is
164174
--%endcontext
165175

166176
--%context(run with tags)
177+
167178
--%displayname(Call ut.run with #tags)
168179
--%beforeall(create_ut3$user#_tests)
169180
--%afterall(drop_ut3$user#_tests)

0 commit comments

Comments
 (0)
0