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

Skip to content

Fixed issue with parsing via trigger source with leading comments #940

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jun 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 7 additions & 3 deletions source/core/annotations/ut_annotation_manager.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -264,13 +264,17 @@ create or replace package body ut_annotation_manager as
l_sql_clob clob;
l_sql_lines ut_varchar2_rows := ut_varchar2_rows();
l_result sys_refcursor;
l_sql_text ora_name_list_t := a_sql_text;
begin
if a_parts > 0 then
l_sql_text(1) := regexp_replace(l_sql_text(1),'^\s*create(\s+or\s+replace){0,1}(\s+(editionable|noneditionable)){0,1}\s+{0,1}', modifier => 'i');
for i in 1..a_parts loop
ut_utils.append_to_clob(l_sql_clob, l_sql_text(i));
ut_utils.append_to_clob(l_sql_clob, a_sql_text(i));
end loop;
l_sql_clob := ut_utils.replace_multiline_comments(l_sql_clob);
-- replace comment lines that contain "-- create or replace"
l_sql_clob := regexp_replace(l_sql_clob, '^.*[-]{2,}\s*create(\s+or\s+replace).*$', modifier => 'mi');
-- remove the "create [or replace] [[non]editionable] " so that we have only "type|package" for parsing
-- needed for dbms_preprocessor
l_sql_clob := regexp_replace(l_sql_clob, '^(.*?\s*create(\s+or\s+replace)?(\s+(editionable|noneditionable))?\s+?)((package|type).*)', '\5', 1, 1, 'ni');
l_sql_lines := ut_utils.convert_collection( ut_utils.clob_to_table(l_sql_clob) );
end if;
open l_result for
Expand Down
4 changes: 3 additions & 1 deletion source/core/ut_utils.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,9 @@ create or replace package body ut_utils is
begin
while l_offset <= l_length loop
l_amount := a_max_amount - coalesce( length(l_last_line), 0 );
dbms_lob.read(a_clob, l_amount, l_offset, l_buffer);
-- dbms_lob.read(a_clob, l_amount, l_offset, l_buffer);
l_buffer := substr(a_clob, l_offset, l_amount);
l_amount := length(l_buffer);
l_offset := l_offset + l_amount;

l_string_results := string_to_table( l_last_line || l_buffer, a_delimiter, l_skip_leading_delimiter );
Expand Down
15 changes: 12 additions & 3 deletions test/ut3_tester/core/annotations/test_annotation_manager.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,19 @@ create or replace package body test_annotation_manager is
procedure create_dummy_test_package is
pragma autonomous_transaction;
begin
execute immediate q'[create or replace package dummy_test_package as
execute immediate q'[
/*
* Some multiline comments before package spec
create or replace package dummy_test_package dummy comment to prove that we pick the right piece of code
*/
-- create or replace package dummy_test_package dummy comment to prove that we pick the right piece of code
--Some single-line comment before package spec
create or replace package dummy_test_package as
--%suite(dummy_test_suite)
--%rollback(manual)

--create or replace package dummy_test_package dummy comment to prove that we pick the right piece of code

--%test(dummy_test)
--%beforetest(some_procedure)
procedure some_dummy_test_procedure;
Expand Down Expand Up @@ -142,9 +151,9 @@ create or replace package body test_annotation_manager is
from dual union all
select 3, 'rollback' , 'manual', '' as subobject_name
from dual union all
select 5, 'test' , 'dummy_test', 'some_dummy_test_procedure' as subobject_name
select 7, 'test' , 'dummy_test', 'some_dummy_test_procedure' as subobject_name
from dual union all
select 6, 'beforetest' , 'some_procedure', 'some_dummy_test_procedure' as subobject_name
select 8, 'beforetest' , 'some_procedure', 'some_dummy_test_procedure' as subobject_name
from dual;

ut.expect(l_actual).to_equal(l_expected);
Expand Down