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

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e41d6f9
Interim commit with lots of dirty code - got to a place where I get t…
jgebal Oct 30, 2018
f475b7c
Added `suite_cache`.
jgebal Nov 2, 2018
4dc48e6
Interim commit - performance check on Travis.
jgebal Nov 4, 2018
1611e09
Interim commit some fixes to old tests, examples and code itself.
jgebal Nov 4, 2018
15163a8
Resolved issue with sorting of nested-tables.
jgebal Nov 4, 2018
1b14bb5
Fixing re-enabled test.
jgebal Nov 4, 2018
3bc8da5
Adding missing items to uninstall.
jgebal Nov 4, 2018
8911f97
Small improvements and cleanup.
jgebal Nov 5, 2018
a1f6b34
Removing duplicate with block.
jgebal Nov 6, 2018
59f7738
Adding cache cleanup and "intelligent" join to all_source, only when …
jgebal Nov 11, 2018
cb9cf97
Resolving some sonar violations.
jgebal Nov 11, 2018
8779025
Moving away from full outer join.
jgebal Nov 11, 2018
b3e98be
Reorganizing code a bit.
jgebal Nov 11, 2018
64dfb41
Output buffer&reporters performance improvements
jgebal Nov 12, 2018
9ea805b
Increased fetch size for coverage sources tmp seeding.
jgebal Nov 12, 2018
248bf8c
Small refactoring.
jgebal Nov 13, 2018
8fc2ea6
Further optimizations to suite parsing.
jgebal Nov 15, 2018
3543e3d
Disabled `PLSQL_OPTIMIZE_LEVEL=0` for testing
jgebal Nov 15, 2018
23c0557
Fixed formal parameter names
jgebal Nov 15, 2018
f7f6811
Revert "Disabled `PLSQL_OPTIMIZE_LEVEL=0` for testing"
jgebal Nov 15, 2018
d002d18
Refactored procedure `get_unit_test_info` to return more relevant inf…
jgebal Nov 16, 2018
e1f1eec
Renamed `get_unit_test_info` to `get_suites_info` - the latter one wa…
jgebal Nov 16, 2018
d8d251f
Improved automation of `refresh_sources.sh`
jgebal Nov 16, 2018
eb3df21
Fixing failing test.
jgebal Nov 16, 2018
d211348
Added control over rollback behavior in `ut_runner.run`
jgebal Nov 17, 2018
f342195
Reverting rollback changes - they should go as a separate PR.
jgebal Nov 17, 2018
eeae79b
Added documentation for new functionality.
jgebal Nov 17, 2018
74ec9a1
Removed unused code.
jgebal Nov 18, 2018
44d61d9
Recovering exception handlers as they are needed for handling invalid…
jgebal Nov 18, 2018
360a889
Moved some of old tests into new tests.
jgebal Nov 18, 2018
0ee3ce2
Added missing endcontext in `test_ut_test`
jgebal Nov 18, 2018
48aa338
Removed unused constants.
jgebal Nov 18, 2018
b33aaae
Added additional test for display of parser warnings.
jgebal Nov 18, 2018
e8ea644
Merge branch 'develop' into feature/suite_query_api
jgebal Nov 18, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Output buffer&reporters performance improvements
  • Loading branch information
jgebal committed Nov 12, 2018
commit 64dfb41ab3ca8165ca976c0ab9624820ee7b8692
1 change: 1 addition & 0 deletions source/core/output_buffers/ut_output_buffer_base.tps
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ create or replace type ut_output_buffer_base authid definer as object(
member procedure init(self in out nocopy ut_output_buffer_base),
not instantiable member procedure close(self in ut_output_buffer_base),
not instantiable member procedure send_line(self in ut_output_buffer_base, a_text varchar2),
not instantiable member procedure send_lines(self in ut_output_buffer_base, a_text_list ut_varchar2_rows),
not instantiable member function get_lines(a_initial_timeout natural := null, a_timeout_sec natural := null) return ut_varchar2_rows pipelined,
not instantiable member function get_lines_cursor(a_initial_timeout natural := null, a_timeout_sec natural := null) return sys_refcursor,
not instantiable member procedure lines_to_dbms_output(self in ut_output_buffer_base, a_initial_timeout natural := null, a_timeout_sec natural := null)
Expand Down
23 changes: 17 additions & 6 deletions source/core/output_buffers/ut_output_table_buffer.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,15 @@ create or replace type body ut_output_table_buffer is
end;

overriding member procedure send_line(self in ut_output_table_buffer, a_text varchar2) is
l_text_list ut_varchar2_rows;
pragma autonomous_transaction;
begin
if a_text is not null then
if length(a_text) > ut_utils.gc_max_storage_varchar2_len then
l_text_list := ut_utils.convert_collection(ut_utils.clob_to_table(a_text, ut_utils.gc_max_storage_varchar2_len));
insert
into ut_output_buffer_tmp(output_id, message_id, text)
select self.output_id, ut_message_id_seq.nextval, t.column_value
from table(l_text_list) t;
self.send_lines(
ut_utils.convert_collection(
ut_utils.clob_to_table(a_text, ut_utils.gc_max_storage_varchar2_len)
)
);
else
insert into ut_output_buffer_tmp(output_id, message_id, text)
values (self.output_id, ut_message_id_seq.nextval, a_text);
Expand All @@ -65,6 +64,18 @@ create or replace type body ut_output_table_buffer is
end if;
end;

overriding member procedure send_lines(self in ut_output_table_buffer, a_text_list ut_varchar2_rows) is
pragma autonomous_transaction;
begin
insert into ut_output_buffer_tmp(output_id, message_id, text)
select self.output_id, ut_message_id_seq.nextval, t.column_value
from table(a_text_list) t
where t.column_value is not null;

commit;
end;


overriding member function get_lines(a_initial_timeout natural := null, a_timeout_sec natural := null) return ut_varchar2_rows pipelined is
l_buffer_data ut_varchar2_rows;
l_already_waited_for number(10,2) := 0;
Expand Down
1 change: 1 addition & 0 deletions source/core/output_buffers/ut_output_table_buffer.tps
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ create or replace type ut_output_table_buffer under ut_output_buffer_base (
constructor function ut_output_table_buffer(self in out nocopy ut_output_table_buffer, a_output_id raw := null) return self as result,
overriding member procedure init(self in out nocopy ut_output_table_buffer),
overriding member procedure send_line(self in ut_output_table_buffer, a_text varchar2),
overriding member procedure send_lines(self in ut_output_table_buffer, a_text_list ut_varchar2_rows),
overriding member procedure close(self in ut_output_table_buffer),
overriding member function get_lines(a_initial_timeout natural := null, a_timeout_sec natural := null) return ut_varchar2_rows pipelined,
overriding member function get_lines_cursor(a_initial_timeout natural := null, a_timeout_sec natural := null) return sys_refcursor,
Expand Down
5 changes: 5 additions & 0 deletions source/core/types/ut_output_reporter_base.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ create or replace type body ut_output_reporter_base is
self.output_buffer.send_line(a_text);
end;

member procedure print_text_lines(self in out nocopy ut_output_reporter_base, a_text_lines ut_varchar2_rows) is
begin
self.output_buffer.send_lines(a_text_lines);
end;

final member function get_lines(a_initial_timeout natural := null, a_timeout_sec natural) return ut_varchar2_rows pipelined is
begin
for i in (select column_value from table(self.output_buffer.get_lines(a_initial_timeout, a_timeout_sec))) loop
Expand Down
2 changes: 1 addition & 1 deletion source/core/types/ut_output_reporter_base.tps
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ create or replace type ut_output_reporter_base under ut_reporter_base(
overriding member procedure before_calling_run(self in out nocopy ut_output_reporter_base, a_run in ut_run),

member procedure print_text(self in out nocopy ut_output_reporter_base, a_text varchar2),

member procedure print_text_lines(self in out nocopy ut_output_reporter_base, a_text_lines ut_varchar2_rows),
member procedure print_clob(self in out nocopy ut_output_reporter_base, a_clob clob),

final member function get_lines(a_initial_timeout natural := null, a_timeout_sec natural := null) return ut_varchar2_rows pipelined,
Expand Down
48 changes: 46 additions & 2 deletions source/core/ut_utils.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,51 @@ create or replace package body ut_utils is
end if;
end append_to_list;

procedure append_to_clob(a_src_clob in out nocopy clob, a_clob_table t_clob_tab, a_delimiter varchar2:= chr(10)) is
procedure append_to_list(a_list in out nocopy ut_varchar2_rows, a_items ut_varchar2_rows) is
begin
if a_items is not null then
if a_list is null then
a_list := ut_varchar2_rows();
end if;
for i in 1 .. a_items.count loop
a_list.extend;
a_list(a_list.last) := a_items(i);
end loop;
end if;
end;

procedure append_to_list(a_list in out nocopy ut_varchar2_rows, a_item clob) is
begin
append_to_list(
a_list,
convert_collection(
clob_to_table( a_item, ut_utils.gc_max_storage_varchar2_len )
)
);
end;

procedure append_to_list(a_list in out nocopy ut_varchar2_rows, a_item varchar2) is
l_items ut_varchar2_rows;
begin
if a_item is not null then
if a_list is null then
a_list := ut_varchar2_rows();
end if;
if length(a_item) > gc_max_storage_varchar2_len then
append_to_list(
a_list,
ut_utils.convert_collection(
ut_utils.clob_to_table( a_item, gc_max_storage_varchar2_len )
)
);
else
a_list.extend;
a_list(a_list.last) := a_item;
end if;
end if;
end append_to_list;

procedure append_to_clob(a_src_clob in out nocopy clob, a_clob_table t_clob_tab, a_delimiter varchar2:= chr(10)) is
begin
if a_clob_table is not null and cardinality(a_clob_table) > 0 then
if a_src_clob is null then
Expand Down Expand Up @@ -522,7 +566,7 @@ procedure append_to_clob(a_src_clob in out nocopy clob, a_clob_table t_clob_tab,
||'?>';
end;

function trim_list_elements(a_list IN ut_varchar2_list, a_regexp_to_trim in varchar2 default '[:space:]') return ut_varchar2_list is
function trim_list_elements(a_list ut_varchar2_list, a_regexp_to_trim varchar2 default '[:space:]') return ut_varchar2_list is
l_trimmed_list ut_varchar2_list;
l_index integer;
begin
Expand Down
15 changes: 15 additions & 0 deletions source/core/ut_utils.pks
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,21 @@ create or replace package ut_utils authid definer is
*/
procedure append_to_list(a_list in out nocopy ut_varchar2_list, a_item varchar2);

/**
* Append a item to the end of ut_varchar2_rows
*/
procedure append_to_list(a_list in out nocopy ut_varchar2_rows, a_item varchar2);

/**
* Append a item to the end of ut_varchar2_rows
*/
procedure append_to_list(a_list in out nocopy ut_varchar2_rows, a_item clob);

/**
* Append a list of items to the end of ut_varchar2_rows
*/
procedure append_to_list(a_list in out nocopy ut_varchar2_rows, a_items ut_varchar2_rows);

procedure append_to_clob(a_src_clob in out nocopy clob, a_clob_table t_clob_tab, a_delimiter varchar2 := chr(10));

procedure append_to_clob(a_src_clob in out nocopy clob, a_new_data clob);
Expand Down
79 changes: 41 additions & 38 deletions source/reporters/ut_coverage_cobertura_reporter.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ create or replace type body ut_coverage_cobertura_reporter is
l_line_no := a_unit_coverage.lines.first;
if l_line_no is null then
for i in 1 .. a_unit_coverage.total_lines loop
l_file_part := '<line number="'||i||'" hits="0" branch="false"/>'||chr(10);
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_clob(l_result, '<line number="'||i||'" hits="0" branch="false"/>');
end loop;
else
while l_line_no is not null loop
Expand Down Expand Up @@ -68,79 +67,83 @@ create or replace type body ut_coverage_cobertura_reporter is
function get_coverage_xml(
a_coverage_data ut_coverage.t_coverage,
a_run ut_run
) return clob is
) return ut_varchar2_rows is
l_file_part varchar2(32767);
l_result clob;
l_result ut_varchar2_rows := ut_varchar2_rows();
l_unit ut_coverage.t_full_name;
l_obj_name ut_coverage.t_object_name;
c_coverage_def constant varchar2(200) := '<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">'||chr(10);
c_file_footer constant varchar2(30) := '</file>'||chr(10);
c_coverage_def constant varchar2(200) := '<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">';
c_file_footer constant varchar2(30) := '</file>';
c_coverage_footer constant varchar2(30) := '</coverage>';
c_sources_footer constant varchar2(30) := '</sources>'||chr(10);
c_packages_footer constant varchar2(30) := '</packages>'||chr(10);
c_package_footer constant varchar2(30) := '</package>'||chr(10);
c_class_footer constant varchar2(30) := '</class>'||chr(10);
c_lines_footer constant varchar2(30) := '</lines>'||chr(10);
c_sources_footer constant varchar2(30) := '</sources>';
c_packages_footer constant varchar2(30) := '</packages>';
c_package_footer constant varchar2(30) := '</package>';
c_class_footer constant varchar2(30) := '</class>';
c_lines_footer constant varchar2(30) := '</lines>';
l_epoch varchar2(50) := (sysdate - to_date('01-01-1970 00:00:00', 'dd-mm-yyyy hh24:mi:ss')) * 24 * 60 * 60;
begin

dbms_lob.createtemporary(l_result,true);

ut_utils.append_to_clob(l_result, ut_utils.get_xml_header(a_run.client_character_set)||chr(10));
ut_utils.append_to_clob(l_result, c_coverage_def);
ut_utils.append_to_list( l_result, ut_utils.get_xml_header(a_run.client_character_set) );
ut_utils.append_to_list( l_result, c_coverage_def );

--write header
l_file_part:= '<coverage line-rate="0" branch-rate="0.0" lines-covered="'||a_coverage_data.covered_lines||'" lines-valid="'||TO_CHAR(a_coverage_data.covered_lines + a_coverage_data.uncovered_lines)||'" branches-covered="0" branches-valid="0" complexity="0" version="1" timestamp="'||l_epoch||'">';
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_list(
l_result,
'<coverage line-rate="0" branch-rate="0.0" lines-covered="'
||a_coverage_data.covered_lines||'" lines-valid="'
||TO_CHAR(a_coverage_data.covered_lines + a_coverage_data.uncovered_lines)
||'" branches-covered="0" branches-valid="0" complexity="0" version="1" timestamp="'||l_epoch||'">'
);


--Write sources
l_unit := a_coverage_data.objects.first;
l_file_part := '<sources>'||CHR(10);
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_list( l_result, '<sources>' );

while l_unit is not null loop
l_file_part := '<source>'||dbms_xmlgen.convert(l_unit)||'</source>'||chr(10);
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_list(l_result, '<source>'||dbms_xmlgen.convert(l_unit)||'</source>');
l_unit := a_coverage_data.objects.next(l_unit);
end loop;
ut_utils.append_to_clob(l_result, c_sources_footer);
ut_utils.append_to_list(l_result, c_sources_footer);

--write packages
l_unit := a_coverage_data.objects.first;
l_file_part := '<packages>'||CHR(10);
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_list(l_result, '<packages>');

while l_unit is not null loop
l_obj_name := a_coverage_data.objects(l_unit).name;
l_file_part := '<package name="'||dbms_xmlgen.convert(l_obj_name)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'||CHR(10);
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_list(
l_result,
'<package name="'||dbms_xmlgen.convert(l_obj_name)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'
);

l_file_part := '<class name="'||dbms_xmlgen.convert(l_obj_name)||'" filename="'||dbms_xmlgen.convert(l_unit)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'||CHR(10);
ut_utils.append_to_clob(l_result, l_file_part);
ut_utils.append_to_list(
l_result,
'<class name="'||dbms_xmlgen.convert(l_obj_name)||'" filename="'
||dbms_xmlgen.convert(l_unit)||'" line-rate="0.0" branch-rate="0.0" complexity="0.0">'
);

l_file_part := '<lines>'||CHR(10);
ut_utils.append_to_clob(l_result, l_file_part);

dbms_lob.append(l_result,get_lines_xml(a_coverage_data.objects(l_unit)));
ut_utils.append_to_list(l_result, '<lines>');

ut_utils.append_to_list( l_result, get_lines_xml(a_coverage_data.objects(l_unit)) );

ut_utils.append_to_clob(l_result, c_lines_footer);
ut_utils.append_to_clob(l_result, c_class_footer);
ut_utils.append_to_clob(l_result, c_package_footer);
ut_utils.append_to_list(l_result, c_lines_footer);
ut_utils.append_to_list(l_result, c_class_footer);
ut_utils.append_to_list(l_result, c_package_footer);

l_unit := a_coverage_data.objects.next(l_unit);
end loop;

ut_utils.append_to_clob(l_result, c_packages_footer);
ut_utils.append_to_clob(l_result, c_coverage_footer);
ut_utils.append_to_list(l_result, c_packages_footer);
ut_utils.append_to_list(l_result, c_coverage_footer);
return l_result;
end;
begin
ut_coverage.coverage_stop();

l_coverage_data := ut_coverage.get_coverage_data(a_run.coverage_options);

self.print_clob( get_coverage_xml( l_coverage_data, a_run ) );
self.print_text_lines( get_coverage_xml( l_coverage_data, a_run ) );

(self as ut_reporter_base).after_calling_run(a_run);
end;
Expand Down
3 changes: 1 addition & 2 deletions source/reporters/ut_coverage_html_reporter.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,12 @@ create or replace type body ut_coverage_html_reporter is
end;

overriding member procedure after_calling_run(self in out nocopy ut_coverage_html_reporter, a_run in ut_run) as
l_report_lines ut_varchar2_list;
l_coverage_data ut_coverage.t_coverage;
begin
ut_coverage.coverage_stop();
l_coverage_data := ut_coverage.get_coverage_data(a_run.coverage_options);

self.print_clob(
self.print_text_lines(
ut_coverage_report_html_helper.get_index(
a_coverage_data => l_coverage_data,
a_assets_path => self.assets_path,
Expand Down
Loading