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

Skip to content

Commit 5e3e4a6

Browse files
committed
implemented warnings when savepoint is not reachable (implicit commit inside procedure)
1 parent 0e4c308 commit 5e3e4a6

4 files changed

Lines changed: 56 additions & 3 deletions

File tree

source/core/types/ut_suite_item.tpb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ create or replace type body ut_suite_item as
5858
return l_savepoint;
5959
end;
6060

61-
member procedure rollback_to_savepoint(self in ut_suite_item, a_savepoint varchar2) is
61+
member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2) is
6262
ex_savepoint_not_exists exception;
6363
pragma exception_init(ex_savepoint_not_exists, -1086);
6464
begin
@@ -67,7 +67,7 @@ create or replace type body ut_suite_item as
6767
end if;
6868
exception
6969
when ex_savepoint_not_exists then
70-
null;
70+
put_warning('Savepoint not established. Implicit commit might have occured.');
7171
end;
7272

7373
member function execution_time return number is

source/core/types/ut_suite_item.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ create or replace type ut_suite_item force under ut_suite_item_base (
2323
member procedure set_disabled_flag(self in out nocopy ut_suite_item, a_disabled_flag boolean),
2424
member function get_disabled_flag return boolean,
2525
member function create_savepoint_if_needed return varchar2,
26-
member procedure rollback_to_savepoint(self in ut_suite_item, a_savepoint varchar2),
26+
member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2),
2727
member function execution_time return number,
2828

2929
not instantiable member function do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean,

tests/RunAll.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ exec ut_coverage.coverage_start_develop();
164164
@@lib/RunTest.sql ut_test/ut_test.BeforeEachProcedureNameNull.sql
165165
@@lib/RunTest.sql ut_test/ut_test.TestOutputGathering.sql
166166
@@lib/RunTest.sql ut_test/ut_test.TestOutputGatheringForTeamcity.sql
167+
@@lib/RunTest.sql ut_test/ut_test.ReportWarningOnRollbackFailed.sql
167168

168169
@@lib/RunTest.sql ut_test_suite/ut_test_suite.ErrorsATestWhenAfterTestFails.sql
169170
@@lib/RunTest.sql ut_test_suite/ut_test_suite.ErrorsATestWhenBeforeTestFails.sql
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
create or replace package ut_output_test_rollback
2+
as
3+
--%suite
4+
5+
--%test
6+
procedure tt
7+
8+
end;
9+
/
10+
11+
create or replace package body ut_output_test_rollback
12+
as
13+
14+
procedure tt is
15+
begin
16+
commit;
17+
end;
18+
19+
end;
20+
/
21+
22+
declare
23+
l_output_data dbms_output.chararr;
24+
l_num_lines integer := 100000;
25+
l_output clob;
26+
begin
27+
--act
28+
ut.run('ut_output_test_rollback');
29+
30+
--assert
31+
dbms_output.get_lines( l_output_data, l_num_lines);
32+
dbms_lob.createtemporary(l_output,true);
33+
for i in 1 .. l_num_lines loop
34+
dbms_lob.append(l_output,l_output_data(i));
35+
end loop;
36+
37+
if l_output like '%Warnings:%Savepoint not established. Implicit commit might have occured.%0 disabled, 1 warning(s)%' then
38+
:test_result := ut_utils.tr_success;
39+
end if;
40+
41+
if :test_result != ut_utils.tr_success or :test_result is null then
42+
for i in 1 .. l_num_lines loop
43+
dbms_output.put_line(l_output_data(i));
44+
end loop;
45+
dbms_output.put_line('Failed: Wrong output');
46+
end if;
47+
end;
48+
/
49+
50+
drop package ut_output_test_rollback
51+
/
52+

0 commit comments

Comments
 (0)