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

Skip to content

Commit cc3a7e4

Browse files
committed
Extracted duplicated code from pipelined functions into get_report_outputs iterator function.
1 parent 73669eb commit cc3a7e4

1 file changed

Lines changed: 47 additions & 79 deletions

File tree

source/api/ut.pkb

Lines changed: 47 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ create or replace package body ut is
2020
g_nls_date_format varchar2(4000);
2121
gc_fail_on_errors constant boolean := false;
2222

23+
g_result_line_no binary_integer;
24+
g_result_lines ut_varchar2_list := ut_varchar2_list();
25+
2326
function version return varchar2 is
2427
begin
2528
return ut_runner.version();
@@ -164,6 +167,31 @@ create or replace package body ut is
164167
rollback;
165168
end;
166169

170+
function get_report_outputs( a_cursor sys_refcursor ) return varchar2 is
171+
l_clob clob;
172+
l_item_type varchar2(32767);
173+
l_result varchar2(4000);
174+
begin
175+
if g_result_line_no is null then
176+
fetch a_cursor into l_clob, l_item_type;
177+
if a_cursor%notfound then
178+
close a_cursor;
179+
g_result_line_no := null;
180+
g_result_lines := ut_varchar2_list();
181+
raise_if_packages_invalidated();
182+
raise no_data_found;
183+
end if;
184+
g_result_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
185+
g_result_line_no := g_result_lines.first;
186+
end if;
187+
188+
if g_result_line_no is not null then
189+
l_result := g_result_lines(g_result_line_no);
190+
g_result_line_no := g_result_lines.next(g_result_line_no);
191+
end if;
192+
return l_result;
193+
end;
194+
167195
function run(
168196
a_reporter ut_reporter_base := null,
169197
a_color_console integer := 0,
@@ -175,10 +203,7 @@ create or replace package body ut is
175203
a_client_character_set varchar2 := null
176204
) return ut_varchar2_rows pipelined is
177205
l_reporter ut_reporter_base := a_reporter;
178-
l_data sys_refcursor;
179-
l_clob clob;
180-
l_item_type varchar2(32767);
181-
l_lines ut_varchar2_list;
206+
l_results sys_refcursor;
182207
begin
183208
run_autonomous(
184209
ut_varchar2_list(),
@@ -192,18 +217,11 @@ create or replace package body ut is
192217
a_client_character_set
193218
);
194219
if l_reporter is of (ut_output_reporter_base) then
195-
l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
220+
l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
196221
loop
197-
fetch l_data into l_clob, l_item_type;
198-
exit when l_data%notfound;
199-
l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
200-
for i in 1 .. l_lines.count loop
201-
pipe row(l_lines(i));
202-
end loop;
222+
pipe row( get_report_outputs( l_results ) );
203223
end loop;
204-
close l_data;
205224
end if;
206-
raise_if_packages_invalidated();
207225
return;
208226
end;
209227

@@ -218,10 +236,7 @@ create or replace package body ut is
218236
a_client_character_set varchar2 := null
219237
) return ut_varchar2_rows pipelined is
220238
l_reporter ut_reporter_base := a_reporter;
221-
l_data sys_refcursor;
222-
l_clob clob;
223-
l_item_type varchar2(32767);
224-
l_lines ut_varchar2_list;
239+
l_results sys_refcursor;
225240
begin
226241
run_autonomous(
227242
ut_varchar2_list(),
@@ -235,18 +250,11 @@ create or replace package body ut is
235250
a_client_character_set
236251
);
237252
if l_reporter is of (ut_output_reporter_base) then
238-
l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
253+
l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
239254
loop
240-
fetch l_data into l_clob, l_item_type;
241-
exit when l_data%notfound;
242-
l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
243-
for i in 1 .. l_lines.count loop
244-
pipe row(l_lines(i));
245-
end loop;
255+
pipe row( get_report_outputs( l_results ) );
246256
end loop;
247-
close l_data;
248257
end if;
249-
raise_if_packages_invalidated();
250258
return;
251259
end;
252260

@@ -262,10 +270,7 @@ create or replace package body ut is
262270
a_client_character_set varchar2 := null
263271
) return ut_varchar2_rows pipelined is
264272
l_reporter ut_reporter_base := a_reporter;
265-
l_data sys_refcursor;
266-
l_clob clob;
267-
l_item_type varchar2(32767);
268-
l_lines ut_varchar2_list;
273+
l_results sys_refcursor;
269274
begin
270275
run_autonomous(
271276
a_paths,
@@ -279,18 +284,11 @@ create or replace package body ut is
279284
a_client_character_set
280285
);
281286
if l_reporter is of (ut_output_reporter_base) then
282-
l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
287+
l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
283288
loop
284-
fetch l_data into l_clob, l_item_type;
285-
exit when l_data%notfound;
286-
l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
287-
for i in 1 .. l_lines.count loop
288-
pipe row(l_lines(i));
289-
end loop;
289+
pipe row( get_report_outputs( l_results ) );
290290
end loop;
291-
close l_data;
292291
end if;
293-
raise_if_packages_invalidated();
294292
return;
295293
end;
296294

@@ -306,10 +304,7 @@ create or replace package body ut is
306304
a_client_character_set varchar2 := null
307305
) return ut_varchar2_rows pipelined is
308306
l_reporter ut_reporter_base := a_reporter;
309-
l_data sys_refcursor;
310-
l_clob clob;
311-
l_item_type varchar2(32767);
312-
l_lines ut_varchar2_list;
307+
l_results sys_refcursor;
313308
begin
314309
run_autonomous(
315310
a_paths,
@@ -323,18 +318,11 @@ create or replace package body ut is
323318
a_client_character_set
324319
);
325320
if l_reporter is of (ut_output_reporter_base) then
326-
l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
321+
l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
327322
loop
328-
fetch l_data into l_clob, l_item_type;
329-
exit when l_data%notfound;
330-
l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
331-
for i in 1 .. l_lines.count loop
332-
pipe row(l_lines(i));
333-
end loop;
323+
pipe row( get_report_outputs( l_results ) );
334324
end loop;
335-
close l_data;
336325
end if;
337-
raise_if_packages_invalidated();
338326
return;
339327
end;
340328

@@ -349,11 +337,8 @@ create or replace package body ut is
349337
a_exclude_objects ut_varchar2_list := null,
350338
a_client_character_set varchar2 := null
351339
) return ut_varchar2_rows pipelined is
352-
l_reporter ut_reporter_base := a_reporter;
353-
l_data sys_refcursor;
354-
l_clob clob;
355-
l_item_type varchar2(32767);
356-
l_lines ut_varchar2_list;
340+
l_reporter ut_reporter_base := a_reporter;
341+
l_results sys_refcursor;
357342
begin
358343
run_autonomous(
359344
ut_varchar2_list(a_path),
@@ -367,18 +352,11 @@ create or replace package body ut is
367352
a_client_character_set
368353
);
369354
if l_reporter is of (ut_output_reporter_base) then
370-
l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
355+
l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
371356
loop
372-
fetch l_data into l_clob, l_item_type;
373-
exit when l_data%notfound;
374-
l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
375-
for i in 1 .. l_lines.count loop
376-
pipe row(l_lines(i));
377-
end loop;
357+
pipe row( get_report_outputs( l_results ) );
378358
end loop;
379-
close l_data;
380359
end if;
381-
raise_if_packages_invalidated();
382360
return;
383361
end;
384362

@@ -394,10 +372,7 @@ create or replace package body ut is
394372
a_client_character_set varchar2 := null
395373
) return ut_varchar2_rows pipelined is
396374
l_reporter ut_reporter_base := a_reporter;
397-
l_data sys_refcursor;
398-
l_clob clob;
399-
l_item_type varchar2(32767);
400-
l_lines ut_varchar2_list;
375+
l_results sys_refcursor;
401376
begin
402377
run_autonomous(
403378
ut_varchar2_list(a_path),
@@ -411,18 +386,11 @@ create or replace package body ut is
411386
a_client_character_set
412387
);
413388
if l_reporter is of (ut_output_reporter_base) then
414-
l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
389+
l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
415390
loop
416-
fetch l_data into l_clob, l_item_type;
417-
exit when l_data%notfound;
418-
l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
419-
for i in 1 .. l_lines.count loop
420-
pipe row(l_lines(i));
421-
end loop;
391+
pipe row( get_report_outputs( l_results ) );
422392
end loop;
423-
close l_data;
424393
end if;
425-
raise_if_packages_invalidated();
426394
return;
427395
end;
428396

0 commit comments

Comments
 (0)