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

Skip to content

Commit c5853e0

Browse files
committed
Fixed to_string(), not it returns 'NULL' for null string/clob/blob.
Added a 'hack' for DBMS_XMLGEN to return DATE as DATE-TIME representation. Removed grant for dbms_crypto. Added grant for alter session to the user.
1 parent 5cecd63 commit c5853e0

8 files changed

Lines changed: 65 additions & 16 deletions

File tree

.travis/create_utplsql_user.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ create user &ut3_user identified by &ut3_password default tablespace &ut3_tables
1313

1414
grant create session, create procedure, create type, create table to &ut3_user;
1515

16-
grant execute on sys.dbms_crypto to &ut3_user;
16+
grant alter session to &ut3_user;
1717

1818
exit success

examples/demo_expectations.pck

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,9 @@ create or replace package body demo_expectations is
286286
l_date date := sysdate;
287287
l_number number := 12345;
288288
l_cursor sys_refcursor;
289-
l_timestamp timestamp with time zone := sysdate;
290-
l_timestamp_ltz timestamp with local time zone := sysdate;
291-
l_timestamp_tz timestamp with time zone := sysdate;
289+
l_timestamp timestamp with time zone := systimestamp;
290+
l_timestamp_ltz timestamp with local time zone := l_timestamp;
291+
l_timestamp_tz timestamp with time zone := l_timestamp;
292292
l_varchar2 varchar2(100) := 'a string';
293293
begin
294294
open l_cursor for select * from user_objects where rownum <100;

source/assertions/ut_assert_processor.pkb

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
create or replace package body ut_assert_processor as
22

3+
type tt_nls_params is table of nls_session_parameters%rowtype;
4+
5+
g_session_params tt_nls_params;
6+
37
g_asserts_called ut_assert_list := ut_assert_list();
48

59
g_nulls_are_equal boolean_not_null := gc_default_nulls_are_equal;
@@ -60,5 +64,40 @@ create or replace package body ut_assert_processor as
6064
add_assert_result(ut_assert_result(ut_utils.tr_error, a_message));
6165
end;
6266

67+
function get_session_parameters return tt_nls_params is
68+
l_session_params tt_nls_params;
69+
begin
70+
select nsp.parameter, nsp.value
71+
bulk collect into l_session_params
72+
from nls_session_parameters nsp
73+
where parameter
74+
in ( 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT', 'NLS_TIMESTAMP_TZ_FORMAT');
75+
76+
return l_session_params;
77+
end;
78+
79+
procedure set_xml_nls_params is
80+
begin
81+
g_session_params := get_session_parameters();
82+
83+
execute immediate q'[alter session set events '19119 trace name context forever, level 0x8']';
84+
85+
execute immediate 'alter session set nls_date_format = '''||ut_utils.gc_date_format||'''';
86+
execute immediate 'alter session set nls_timestamp_format = '''||ut_utils.gc_timestamp_format||'''';
87+
execute immediate 'alter session set nls_timestamp_tz_format = '''||ut_utils.gc_timestamp_tz_format||'''';
88+
end;
89+
90+
procedure reset_nls_params is
91+
begin
92+
execute immediate q'[alter session set events '19119 trace name context off']';
93+
94+
if g_session_params is not null then
95+
for i in 1 .. g_session_params.count loop
96+
execute immediate 'alter session set '||g_session_params(i).parameter||' = '''||g_session_params(i).value||'''';
97+
end loop;
98+
end if;
99+
100+
end;
101+
63102
end;
64103
/

source/assertions/ut_assert_processor.pks

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,9 @@ create or replace package ut_assert_processor authid current_user as
1818

1919
procedure report_error(a_message in varchar2);
2020

21+
procedure set_xml_nls_params;
22+
23+
procedure reset_nls_params;
24+
2125
end;
2226
/

source/expectation_data_values/ut_data_value_anydata.tpb

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,17 @@ create or replace type body ut_data_value_anydata as
3636
end;
3737

3838
overriding member function to_string return varchar2 is
39+
l_result varchar2(32767);
3940
begin
40-
return
41-
ut_utils.to_string(
42-
case
43-
when self.is_null() then to_clob(null)
44-
else xmltype(self.value).getclobval()
45-
end
46-
);
41+
if self.is_null() then
42+
l_result := ut_utils.to_string( to_char(null) );
43+
else
44+
ut_assert_processor.set_xml_nls_params();
45+
l_result := ut_utils.to_string( xmltype(self.value).getclobval() );
46+
ut_assert_processor.reset_nls_params();
47+
end if;
48+
return l_result;
4749
end;
4850

49-
5051
end;
5152
/

source/expectation_data_values/ut_data_value_refcursor.tpb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ create or replace type body ut_data_value_refcursor as
2929
l_result clob;
3030
begin
3131
if self.value is not null then
32-
--TODO - set formatting of date/timestamp/number for XML
32+
ut_assert_processor.set_xml_nls_params();
3333
dbms_xmlgen.setMaxRows(self.value, 100);
3434
l_result := dbms_xmlgen.getxml(self.value);
3535
dbms_xmlgen.restartQuery(self.value);
36-
--TODO - clear formatting of date/timestamp/number for XML
36+
ut_assert_processor.reset_nls_params();
3737
end if;
3838
return ut_utils.to_string(l_result);
3939
end;

source/expectations/equal.tpb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ create or replace type body equal as
8787
l_expected ut_data_value_anydata := treat(self.expected as ut_data_value_anydata);
8888
l_actual ut_data_value_anydata := treat(a_actual as ut_data_value_anydata);
8989
begin
90+
ut_assert_processor.set_xml_nls_params();
9091
l_result := equal_with_nulls((xmltype(l_expected.value).getclobval() = xmltype(l_actual.value).getclobval()), a_actual);
92+
ut_assert_processor.reset_nls_params();
9193
end;
9294
elsif self.expected is of (ut_data_value_blob) and a_actual is of (ut_data_value_blob) then
9395
declare
@@ -133,9 +135,9 @@ create or replace type body equal as
133135
--fetch 1M rows max
134136
dbms_xmlgen.setMaxRows(l_expected.value, 1000000);
135137
dbms_xmlgen.setMaxRows(l_actual.value, 1000000);
136-
--TODO - set formatting of date/timestamp/number for XML
138+
ut_assert_processor.set_xml_nls_params();
137139
l_result := dbms_lob.compare( dbms_xmlgen.getxml(l_expected.value), dbms_xmlgen.getxml(l_actual.value) ) = 0;
138-
--TODO - clear formatting of date/timestamp/number for XML
140+
ut_assert_processor.reset_nls_params();
139141
else
140142
l_result := equal_with_nulls( null, a_actual);
141143
end if;

source/ut_utils.pkb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ create or replace package body ut_utils is
5757
begin
5858
return
5959
case
60+
when l_len = 0 then gc_null_string
6061
when l_len <= gc_max_input_string_length then quote_string(a_value)
6162
else quote_string(substr(a_value,1,gc_overflow_substr_len)) || gc_more_data_string
6263
end;
@@ -67,6 +68,7 @@ create or replace package body ut_utils is
6768
begin
6869
return
6970
case
71+
when l_len = 0 then gc_null_string
7072
when l_len <= gc_max_input_string_length then quote_string(a_value)
7173
else quote_string(dbms_lob.substr(a_value, gc_overflow_substr_len)) || gc_more_data_string
7274
end;
@@ -77,6 +79,7 @@ create or replace package body ut_utils is
7779
begin
7880
return
7981
case
82+
when l_len = 0 then gc_null_string
8083
when l_len <= gc_max_input_string_length then quote_string(rawtohex(a_value))
8184
else to_string( rawtohex(dbms_lob.substr(a_value, gc_overflow_substr_len)) )
8285
end;

0 commit comments

Comments
 (0)