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

Skip to content

Commit dea6d3c

Browse files
committed
Refactoring.
1 parent 9961dbc commit dea6d3c

5 files changed

Lines changed: 22 additions & 72 deletions

File tree

source/core/ut_metadata.pkb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,15 @@ create or replace package body ut_metadata as
331331
end if;
332332
return l_result;
333333
end;
334+
335+
function get_object_name(a_full_object_name in varchar2) return varchar2 is
336+
l_schema varchar(250);
337+
l_object varchar(250);
338+
l_procedure_name varchar(250);
339+
begin
340+
ut_metadata.do_resolve(a_full_object_name,7,l_schema,l_object, l_procedure_name);
341+
return l_object;
342+
end;
334343

335344
end;
336345
/

source/core/ut_metadata.pks

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,10 @@ create or replace package ut_metadata authid current_user as
167167
*/
168168
function is_anytype_null(a_value in anydata, a_compound_type in varchar2) return number;
169169

170+
/**
171+
* Get object name from fully qualified name e.g ut3.test -> test
172+
*/
173+
function get_object_name(a_full_object_name in varchar2) return varchar2;
174+
170175
end ut_metadata;
171176
/

source/expectations/data_values/ut_cursor_column.tpb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ create or replace type body ut_cursor_column as
3030
when lower(self.column_type) = 'user_defined_type' then
3131
0
3232
-- Due to bug in 11g/12.1 collection fails on varchar 4000+
33-
when (lower(self.column_type) in ('varchar2','char')) and (self.column_len >= 4000) then
33+
when (lower(self.column_type) in ('varchar2','char')) and (self.column_len > 4000) then
3434
0
3535
else
3636
ut_utils.boolean_to_int(ut_compound_data_helper.is_sql_compare_allowed(self.column_type))

source/expectations/data_values/ut_data_value_anydata.tpb

Lines changed: 7 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -36,79 +36,13 @@ create or replace type body ut_data_value_anydata as
3636
return l_path;
3737
end;
3838

39-
overriding member procedure extract_cursor(self in out nocopy ut_data_value_anydata, a_value sys_refcursor)
40-
is
41-
c_bulk_rows constant integer := 10000;
42-
l_cursor sys_refcursor := a_value;
43-
l_ctx number;
44-
l_xml xmltype;
45-
l_ut_owner varchar2(250) := ut_utils.ut_owner;
46-
l_set_id integer := 0;
47-
l_elements_count number := 0;
48-
begin
49-
-- We use DBMS_XMLGEN in order to:
50-
-- 1) be able to process data in bulks (set of rows)
51-
-- 2) be able to influence the ROWSET/ROW tags
52-
-- 3) be able to influence the way NULL values are handled (empty TAG)
53-
-- 4) be able to influence the way TIMESTAMP is formatted.
54-
-- Due to Oracle feature/bug, it is not possible to change the DATE formatting of cursor data
55-
-- AFTER the cursor was opened.
56-
-- The only solution for this is to change NLS settings before opening the cursor.
57-
--
58-
-- This would work fine if we could use DBMS_XMLGEN.restartQuery.
59-
-- The restartQuery fails however if PLSQL variables of TIMESTAMP/INTERVAL or CLOB/BLOB are used.
60-
ut_expectation_processor.set_xml_nls_params();
61-
l_ctx := dbms_xmlgen.newContext(l_cursor);
62-
dbms_xmlgen.setNullHandling(l_ctx, dbms_xmlgen.empty_tag);
63-
dbms_xmlgen.setMaxRows(l_ctx, c_bulk_rows);
64-
loop
65-
l_xml := dbms_xmlgen.getxmltype(l_ctx);
66-
exit when dbms_xmlgen.getNumRowsProcessed(l_ctx) = 0;
67-
l_elements_count := l_elements_count + dbms_xmlgen.getNumRowsProcessed(l_ctx);
68-
execute immediate
69-
'insert into ' || l_ut_owner || '.ut_compound_data_tmp(data_id, item_no, item_data) ' ||
70-
'values (:self_guid, :self_row_count, :l_xml)'
71-
using in self.data_id, l_set_id, l_xml;
72-
l_set_id := l_set_id + c_bulk_rows;
73-
end loop;
74-
ut_expectation_processor.reset_nls_params();
75-
dbms_xmlgen.closeContext(l_ctx);
76-
self.elements_count := l_elements_count;
77-
exception
78-
when others then
79-
ut_expectation_processor.reset_nls_params();
80-
dbms_xmlgen.closeContext(l_ctx);
81-
raise;
82-
end;
83-
8439
member procedure init(self in out nocopy ut_data_value_anydata, a_value anydata) is
8540
l_refcursor sys_refcursor;
8641
l_ctx number;
8742
l_ut_owner varchar2(250) := ut_utils.ut_owner;
8843
cursor_not_open exception;
8944
l_cursor_number number;
90-
l_anydata_sql varchar2(4000);
91-
l_cursor_sql varchar2(2000);
92-
93-
function resolve_name(a_object_name in varchar2) return varchar2 is
94-
l_schema varchar(250);
95-
l_object varchar(250);
96-
l_procedure_name varchar(250);
97-
begin
98-
ut_metadata.do_resolve(a_object_name,7,l_schema,l_object, l_procedure_name);
99-
return l_object;
100-
end;
101-
102-
function get_object_name(a_value anydata) return varchar2 is
103-
begin
104-
return resolve_name(ut_metadata.get_collection_element(a_value));
105-
end;
106-
107-
function get_object_name(a_datatype in varchar2) return varchar2 is
108-
begin
109-
return resolve_name(a_datatype);
110-
end;
111-
45+
l_anydata_sql varchar2(4000);
11246
begin
11347
self.data_type := ut_metadata.get_anydata_typename(a_value);
11448
self.compound_type := get_instance(a_value);
@@ -131,15 +65,18 @@ create or replace type body ut_data_value_anydata as
13165
begin
13266
l_status := l_value.get'||self.compound_type||'(l_data); '||
13367
case when self.compound_type = 'collection' then
134-
q'[ open :l_tmp_refcursor for select value(x) as "]'||get_object_name(a_value)||q'[" from table(l_data) x;]'
68+
q'[ open :l_tmp_refcursor for select value(x) as "]'||
69+
ut_metadata.get_object_name(ut_metadata.get_collection_element(a_value))||
70+
q'[" from table(l_data) x;]'
13571
else
136-
q'[ open :l_tmp_refcursor for select l_data as "]'||get_object_name(self.data_type)||q'[" from dual;]'
72+
q'[ open :l_tmp_refcursor for select l_data as "]'||ut_metadata.get_object_name(self.data_type)||
73+
q'[" from dual;]'
13774
end ||
13875
'end;';
13976
execute immediate l_anydata_sql using in a_value, in out l_refcursor;
14077

14178
if l_refcursor%isopen then
142-
extract_cursor(l_refcursor);
79+
self.extract_cursor(l_refcursor);
14380
l_cursor_number := dbms_sql.to_cursor_number(l_refcursor);
14481
self.cursor_details := ut_cursor_details(l_cursor_number);
14582
dbms_sql.close_cursor(l_cursor_number);

source/expectations/data_values/ut_data_value_anydata.tps

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ create or replace type ut_data_value_anydata under ut_data_value_refcursor(
1818

1919
overriding member function get_object_info return varchar2,
2020
member function get_extract_path(a_data_value anydata) return varchar2,
21-
overriding member procedure extract_cursor(self in out nocopy ut_data_value_anydata, a_value sys_refcursor),
2221
member procedure init(self in out nocopy ut_data_value_anydata, a_value anydata),
2322
member function get_instance(a_data_value anydata) return varchar2,
2423
constructor function ut_data_value_anydata(self in out nocopy ut_data_value_anydata, a_value anydata) return self as result,

0 commit comments

Comments
 (0)