diff --git a/apex/f770/application/pages/page_00960.sql b/apex/f770/application/pages/page_00960.sql index b323a52..515be87 100644 --- a/apex/f770/application/pages/page_00960.sql +++ b/apex/f770/application/pages/page_00960.sql @@ -24,14 +24,26 @@ wwv_flow_api.create_page( ,p_last_updated_by=>'DEV' ,p_last_upd_yyyymmddhh24miss=>'20220121205716' ); +wwv_flow_api.create_page_plug( + p_id=>wwv_flow_api.id(21452402618924104) +,p_plug_name=>'PACKAGES' +,p_region_template_options=>'#DEFAULT#' +,p_plug_template=>wwv_flow_api.id(9049155795569902) +,p_plug_display_sequence=>10 +,p_include_in_reg_disp_sel_yn=>'Y' +,p_plug_display_point=>'BODY' +,p_plug_query_options=>'DERIVED_REPORT_COLUMNS' +,p_attribute_01=>'N' +,p_attribute_02=>'HTML' +); wwv_flow_api.create_page_plug( p_id=>wwv_flow_api.id(14931272082872321) ,p_plug_name=>'Packages' +,p_parent_plug_id=>wwv_flow_api.id(21452402618924104) ,p_icon_css_classes=>'fa-table-pointer' ,p_region_template_options=>'#DEFAULT#' ,p_plug_template=>wwv_flow_api.id(9070356145569920) -,p_plug_display_sequence=>10 -,p_include_in_reg_disp_sel_yn=>'Y' +,p_plug_display_sequence=>30 ,p_plug_display_point=>'BODY' ,p_plug_query_options=>'DERIVED_REPORT_COLUMNS' ,p_attribute_01=>'N' @@ -41,10 +53,10 @@ wwv_flow_api.create_page_plug( p_id=>wwv_flow_api.id(14931328612872322) ,p_plug_name=>'Packages [GRID]' ,p_region_name=>'PACKAGES' +,p_parent_plug_id=>wwv_flow_api.id(21452402618924104) ,p_region_template_options=>'#DEFAULT#' ,p_plug_template=>wwv_flow_api.id(9078290074569925) -,p_plug_display_sequence=>20 -,p_include_in_reg_disp_sel_yn=>'Y' +,p_plug_display_sequence=>40 ,p_plug_display_point=>'BODY' ,p_query_type=>'TABLE' ,p_query_table=>'OBJ_PACKAGES' @@ -361,17 +373,29 @@ wwv_flow_api.create_ig_report_column( ,p_is_frozen=>false ); wwv_flow_api.create_page_plug( - p_id=>wwv_flow_api.id(14931458804872323) -,p_plug_name=>'Package Modules' -,p_icon_css_classes=>'fa-table-search' + p_id=>wwv_flow_api.id(21452599953924105) +,p_plug_name=>'MODULES' ,p_region_template_options=>'#DEFAULT#' -,p_plug_template=>wwv_flow_api.id(9070356145569920) -,p_plug_display_sequence=>30 +,p_plug_template=>wwv_flow_api.id(9049155795569902) +,p_plug_display_sequence=>20 ,p_include_in_reg_disp_sel_yn=>'Y' ,p_plug_display_point=>'BODY' ,p_plug_query_options=>'DERIVED_REPORT_COLUMNS' ,p_plug_display_condition_type=>'ITEM_IS_NOT_NULL' -,p_plug_display_when_condition=>'P960_PACKAGE_NAME' +,p_plug_display_when_condition=>'P960_SHOW_MODULES' +,p_attribute_01=>'N' +,p_attribute_02=>'HTML' +); +wwv_flow_api.create_page_plug( + p_id=>wwv_flow_api.id(14931458804872323) +,p_plug_name=>'Package Modules' +,p_parent_plug_id=>wwv_flow_api.id(21452599953924105) +,p_icon_css_classes=>'fa-table-search' +,p_region_template_options=>'#DEFAULT#' +,p_plug_template=>wwv_flow_api.id(9070356145569920) +,p_plug_display_sequence=>40 +,p_plug_display_point=>'BODY' +,p_plug_query_options=>'DERIVED_REPORT_COLUMNS' ,p_attribute_01=>'N' ,p_attribute_02=>'HTML' ); @@ -379,11 +403,11 @@ wwv_flow_api.create_page_plug( p_id=>wwv_flow_api.id(14931574823872324) ,p_plug_name=>'Package Modules [GRID]' ,p_region_name=>'MODULES' +,p_parent_plug_id=>wwv_flow_api.id(21452599953924105) ,p_region_template_options=>'#DEFAULT#' ,p_component_template_options=>'#DEFAULT#' ,p_plug_template=>wwv_flow_api.id(9078290074569925) -,p_plug_display_sequence=>40 -,p_include_in_reg_disp_sel_yn=>'Y' +,p_plug_display_sequence=>50 ,p_plug_display_point=>'BODY' ,p_query_type=>'TABLE' ,p_query_table=>'OBJ_MODULES' @@ -393,8 +417,6 @@ wwv_flow_api.create_page_plug( ,p_include_rowid_column=>false ,p_plug_source_type=>'NATIVE_IG' ,p_plug_query_options=>'DERIVED_REPORT_COLUMNS' -,p_plug_display_condition_type=>'ITEM_IS_NOT_NULL' -,p_plug_display_when_condition=>'P960_PACKAGE_NAME' ,p_prn_content_disposition=>'ATTACHMENT' ,p_prn_document_header=>'APEX' ,p_prn_units=>'MILLIMETERS' @@ -1005,12 +1027,16 @@ wwv_flow_api.create_ig_report_view( wwv_flow_api.create_ig_report_column( p_id=>wwv_flow_api.id(15054580481502742) ,p_view_id=>wwv_flow_api.id(15054065173502740) -,p_display_seq=>1 +,p_display_seq=>2 ,p_column_id=>wwv_flow_api.id(14931760880872326) ,p_is_visible=>false ,p_is_frozen=>false ,p_width=>200 ,p_sort_order=>1 +,p_break_order=>2.5 +,p_break_is_enabled=>true +,p_break_sort_direction=>'ASC' +,p_break_sort_nulls=>'LAST' ,p_sort_direction=>'ASC' ,p_sort_nulls=>'LAST' ); @@ -1089,6 +1115,18 @@ wwv_flow_api.create_ig_report_column( ,p_is_frozen=>false ,p_width=>80 ); +wwv_flow_api.component_end; +end; +/ +begin +wwv_flow_api.component_begin ( + p_version_yyyy_mm_dd=>'2021.04.15' +,p_release=>'21.1.7' +,p_default_workspace_id=>9014660246496943 +,p_default_application_id=>770 +,p_default_id_offset=>0 +,p_default_owner=>'CORE' +); wwv_flow_api.create_ig_report_column( p_id=>wwv_flow_api.id(15063524211502764) ,p_view_id=>wwv_flow_api.id(15054065173502740) @@ -1116,18 +1154,6 @@ wwv_flow_api.create_ig_report_column( ,p_is_frozen=>false ,p_width=>70 ); -wwv_flow_api.component_end; -end; -/ -begin -wwv_flow_api.component_begin ( - p_version_yyyy_mm_dd=>'2021.04.15' -,p_release=>'21.1.7' -,p_default_workspace_id=>9014660246496943 -,p_default_application_id=>770 -,p_default_id_offset=>0 -,p_default_owner=>'CORE' -); wwv_flow_api.create_ig_report_column( p_id=>wwv_flow_api.id(15066272572502771) ,p_view_id=>wwv_flow_api.id(15054065173502740) @@ -1184,6 +1210,21 @@ wwv_flow_api.create_ig_report_column( ,p_is_frozen=>false ,p_width=>80 ); +wwv_flow_api.create_page_button( + p_id=>wwv_flow_api.id(20858676684868443) +,p_button_sequence=>90 +,p_button_plug_id=>wwv_flow_api.id(14931272082872321) +,p_button_name=>'SEARCH' +,p_button_action=>'SUBMIT' +,p_button_template_options=>'#DEFAULT#' +,p_button_template_id=>wwv_flow_api.id(9145249029569999) +,p_button_is_hot=>'Y' +,p_button_image_alt=>'Search' +,p_button_position=>'BODY' +,p_button_css_classes=>'SEARCH_FIELDS' +,p_grid_new_row=>'N' +,p_grid_new_column=>'Y' +); wwv_flow_api.create_page_button( p_id=>wwv_flow_api.id(15123829307615721) ,p_button_sequence=>10 @@ -1197,6 +1238,38 @@ wwv_flow_api.create_page_button( ,p_button_redirect_url=>'f?p=&APP_ID.:960:&SESSION.::&DEBUG.:960::' ,p_icon_css_classes=>'fa-refresh' ); +wwv_flow_api.create_page_button( + p_id=>wwv_flow_api.id(20858880066868445) +,p_button_sequence=>20 +,p_button_plug_id=>wwv_flow_api.id(14931272082872321) +,p_button_name=>'SHOW_SEARCH' +,p_button_static_id=>'BUTTON_SHOW_SEARCH' +,p_button_action=>'DEFINED_BY_DA' +,p_button_template_options=>'#DEFAULT#' +,p_button_template_id=>wwv_flow_api.id(9144574670569995) +,p_button_image_alt=>'Search' +,p_button_position=>'RIGHT_OF_TITLE' +,p_button_execute_validations=>'N' +,p_warn_on_unsaved_changes=>null +,p_icon_css_classes=>'fa-search' +,p_button_cattributes=>'style="margin-right: 0;"' +); +wwv_flow_api.create_page_button( + p_id=>wwv_flow_api.id(20859170627868448) +,p_button_sequence=>30 +,p_button_plug_id=>wwv_flow_api.id(14931272082872321) +,p_button_name=>'CLOSE_SEARCH' +,p_button_static_id=>'BUTTON_CLOSE_SEARCH' +,p_button_action=>'DEFINED_BY_DA' +,p_button_template_options=>'#DEFAULT#' +,p_button_template_id=>wwv_flow_api.id(9144574670569995) +,p_button_image_alt=>'Close Search' +,p_button_position=>'RIGHT_OF_TITLE' +,p_button_execute_validations=>'N' +,p_warn_on_unsaved_changes=>null +,p_icon_css_classes=>'fa-times' +,p_button_cattributes=>'style="margin-right: 0; display: none;"' +); wwv_flow_api.create_page_item( p_id=>wwv_flow_api.id(15123714972615720) ,p_name=>'P960_PACKAGE_NAME' @@ -1213,6 +1286,184 @@ wwv_flow_api.create_page_item( ,p_display_as=>'NATIVE_HIDDEN' ,p_attribute_01=>'Y' ); +wwv_flow_api.create_page_item( + p_id=>wwv_flow_api.id(20858494816868441) +,p_name=>'P960_SEARCH_PACKAGES' +,p_item_sequence=>50 +,p_item_plug_id=>wwv_flow_api.id(14931272082872321) +,p_prompt=>'Package Like' +,p_display_as=>'NATIVE_TEXT_FIELD' +,p_cSize=>30 +,p_grid_row_css_classes=>'HIDDEN' +,p_colspan=>2 +,p_field_template=>wwv_flow_api.id(9142775823569991) +,p_item_css_classes=>'SEARCH_FIELDS' +,p_item_template_options=>'#DEFAULT#' +,p_attribute_01=>'Y' +,p_attribute_02=>'N' +,p_attribute_04=>'TEXT' +,p_attribute_05=>'BOTH' +); +wwv_flow_api.create_page_item( + p_id=>wwv_flow_api.id(20858592092868442) +,p_name=>'P960_SEARCH_SOURCE' +,p_item_sequence=>80 +,p_item_plug_id=>wwv_flow_api.id(14931272082872321) +,p_prompt=>'Source Contains' +,p_display_as=>'NATIVE_TEXT_FIELD' +,p_cSize=>30 +,p_begin_on_new_line=>'N' +,p_colspan=>3 +,p_field_template=>wwv_flow_api.id(9142775823569991) +,p_item_css_classes=>'SEARCH_FIELDS' +,p_item_template_options=>'#DEFAULT#' +,p_attribute_01=>'Y' +,p_attribute_02=>'N' +,p_attribute_04=>'TEXT' +,p_attribute_05=>'BOTH' +); +wwv_flow_api.create_page_item( + p_id=>wwv_flow_api.id(20858798281868444) +,p_name=>'P960_SEARCH_ARGUMENTS' +,p_item_sequence=>70 +,p_item_plug_id=>wwv_flow_api.id(14931272082872321) +,p_prompt=>'Argument Like' +,p_display_as=>'NATIVE_TEXT_FIELD' +,p_cSize=>30 +,p_begin_on_new_line=>'N' +,p_colspan=>2 +,p_field_template=>wwv_flow_api.id(9142775823569991) +,p_item_css_classes=>'SEARCH_FIELDS' +,p_item_template_options=>'#DEFAULT#' +,p_attribute_01=>'Y' +,p_attribute_02=>'N' +,p_attribute_04=>'TEXT' +,p_attribute_05=>'BOTH' +); +wwv_flow_api.create_page_item( + p_id=>wwv_flow_api.id(21452396894924103) +,p_name=>'P960_SEARCH_MODULES' +,p_item_sequence=>60 +,p_item_plug_id=>wwv_flow_api.id(14931272082872321) +,p_prompt=>'Module Like' +,p_display_as=>'NATIVE_TEXT_FIELD' +,p_cSize=>30 +,p_begin_on_new_line=>'N' +,p_colspan=>2 +,p_field_template=>wwv_flow_api.id(9142775823569991) +,p_item_css_classes=>'SEARCH_FIELDS' +,p_item_template_options=>'#DEFAULT#' +,p_attribute_01=>'Y' +,p_attribute_02=>'N' +,p_attribute_04=>'TEXT' +,p_attribute_05=>'BOTH' +); +wwv_flow_api.create_page_item( + p_id=>wwv_flow_api.id(21452605699924106) +,p_name=>'P960_SHOW_MODULES' +,p_item_sequence=>40 +,p_item_plug_id=>wwv_flow_api.id(14931272082872321) +,p_display_as=>'NATIVE_HIDDEN' +,p_attribute_01=>'Y' +); +wwv_flow_api.create_page_item( + p_id=>wwv_flow_api.id(21452740453924107) +,p_name=>'P960_SHOW_SEARCH' +,p_item_sequence=>30 +,p_item_plug_id=>wwv_flow_api.id(14931272082872321) +,p_display_as=>'NATIVE_HIDDEN' +,p_attribute_01=>'Y' +); +wwv_flow_api.create_page_da_event( + p_id=>wwv_flow_api.id(20859208251868449) +,p_name=>'CLOSE_SEARCH' +,p_event_sequence=>10 +,p_triggering_element_type=>'BUTTON' +,p_triggering_button_id=>wwv_flow_api.id(20859170627868448) +,p_bind_type=>'bind' +,p_bind_event_type=>'click' +); +wwv_flow_api.create_page_da_action( + p_id=>wwv_flow_api.id(21456727751924147) +,p_event_id=>wwv_flow_api.id(20859208251868449) +,p_event_result=>'TRUE' +,p_action_sequence=>10 +,p_execute_on_page_init=>'N' +,p_action=>'NATIVE_JAVASCRIPT_CODE' +,p_attribute_01=>wwv_flow_string.join(wwv_flow_t_varchar2( +'$(''.SEARCH_FIELDS'').hide();', +'$(''#BUTTON_CLOSE_SEARCH'').hide();', +'$(''#BUTTON_SHOW_SEARCH'').show().focus();', +'')) +); +wwv_flow_api.create_page_da_event( + p_id=>wwv_flow_api.id(21452157309924101) +,p_name=>'SHOW_SEARCH' +,p_event_sequence=>20 +,p_triggering_element_type=>'BUTTON' +,p_triggering_button_id=>wwv_flow_api.id(20858880066868445) +,p_bind_type=>'bind' +,p_bind_event_type=>'click' +); +wwv_flow_api.create_page_da_action( + p_id=>wwv_flow_api.id(21456604758924146) +,p_event_id=>wwv_flow_api.id(21452157309924101) +,p_event_result=>'TRUE' +,p_action_sequence=>10 +,p_execute_on_page_init=>'N' +,p_action=>'NATIVE_JAVASCRIPT_CODE' +,p_attribute_01=>wwv_flow_string.join(wwv_flow_t_varchar2( +'$(''.t-HeroRegion-col.t-HeroRegion-col--content .HIDDEN'').removeClass(''HIDDEN'');', +'//', +'$(''.SEARCH_FIELDS'').show();', +'$(''#BUTTON_SHOW_SEARCH'').hide();', +'$(''#BUTTON_CLOSE_SEARCH'').show().focus();', +'')) +); +wwv_flow_api.create_page_da_action( + p_id=>wwv_flow_api.id(21456866742924148) +,p_event_id=>wwv_flow_api.id(21452157309924101) +,p_event_result=>'TRUE' +,p_action_sequence=>20 +,p_execute_on_page_init=>'Y' +,p_action=>'NATIVE_JAVASCRIPT_CODE' +,p_attribute_01=>wwv_flow_string.join(wwv_flow_t_varchar2( +'$(''.t-HeroRegion-col.t-HeroRegion-col--content .HIDDEN'').removeClass(''HIDDEN'');', +'//', +'$(''.SEARCH_FIELDS'').show();', +'$(''#BUTTON_SHOW_SEARCH'').hide();', +'$(''#BUTTON_CLOSE_SEARCH'').show().focus();', +'')) +,p_server_condition_type=>'ITEM_IS_NOT_NULL' +,p_server_condition_expr1=>'P960_SHOW_SEARCH' +); +wwv_flow_api.create_page_process( + p_id=>wwv_flow_api.id(21452841275924108) +,p_process_sequence=>10 +,p_process_point=>'BEFORE_HEADER' +,p_process_type=>'NATIVE_PLSQL' +,p_process_name=>'INIT_DEFAULTS' +,p_process_sql_clob=>wwv_flow_string.join(wwv_flow_t_varchar2( +':P960_SHOW_SEARCH := NULL;', +':P960_SHOW_MODULES := NULL;', +'--', +'IF (:P960_SEARCH_PACKAGES IS NOT NULL', +' OR :P960_SEARCH_MODULES IS NOT NULL', +' OR :P960_SEARCH_ARGUMENTS IS NOT NULL', +' OR :P960_SEARCH_SOURCE IS NOT NULL', +') THEN', +' :P960_PACKAGE_NAME := NULL;', +' :P960_SHOW_SEARCH := ''Y'';', +' :P960_SHOW_MODULES := ''Y'';', +'END IF;', +'--', +'IF :P960_PACKAGE_NAME IS NOT NULL THEN', +' :P960_SHOW_MODULES := ''Y'';', +'END IF;', +'')) +,p_process_clob_language=>'PLSQL' +,p_error_display_location=>'INLINE_IN_NOTIFICATION' +); wwv_flow_api.component_end; end; / diff --git a/views/obj_modules.sql b/views/obj_modules.sql index deacee9..e8d6204 100644 --- a/views/obj_modules.sql +++ b/views/obj_modules.sql @@ -1,8 +1,13 @@ CREATE OR REPLACE VIEW obj_modules AS WITH x AS ( SELECT /*+ MATERIALIZE */ - app.get_item('$PACKAGE_NAME') AS package_name, - app.get_item('$MODULE_TYPE') AS module_type + app.get_item('$PACKAGE_NAME') AS package_name, + app.get_item('$MODULE_TYPE') AS module_type, + -- + UPPER(app.get_item('$SEARCH_PACKAGES')) AS search_packages, + UPPER(app.get_item('$SEARCH_MODULES')) AS search_modules, + UPPER(app.get_item('$SEARCH_ARGUMENTS')) AS search_arguments, + LOWER(app.get_item('$SEARCH_SOURCE')) AS search_source FROM DUAL ), p AS ( @@ -29,16 +34,27 @@ p AS ( AND NVL(p.overload, 1) = 1 JOIN x ON s.name = NVL(x.package_name, s.name) + AND (p.object_name LIKE x.search_packages || '%' ESCAPE '\' OR x.search_packages IS NULL) WHERE i.type IN ('PROCEDURE', 'FUNCTION') AND i.object_type IN ('PACKAGE', 'PACKAGE BODY') AND i.usage = CASE s.type WHEN 'PACKAGE BODY' THEN 'DEFINITION' ELSE 'DECLARATION' END ), -e AS ( - -- find ending lines - SELECT s.* +s AS ( + SELECT + s.name, + s.type, + s.line, + s.text, + CASE WHEN LOWER(s.text) LIKE '%' || x.search_source || '%' ESCAPE '\' THEN 'Y' END AS is_found_text FROM user_source s JOIN x - ON s.name = NVL(x.package_name, s.name) + ON s.name = NVL(x.package_name, s.name) + AND (s.name LIKE x.search_packages || '%' ESCAPE '\' OR x.search_packages IS NULL) +), +e AS ( + -- find ending lines + SELECT s.name, s.type, s.line + FROM s WHERE ( (s.type = 'PACKAGE BODY' AND REGEXP_LIKE(UPPER(s.text), '^\s*END(\s+[A-Z0-9_]+)?\s*;')) OR (s.type = 'PACKAGE' AND REGEXP_LIKE(UPPER(s.text), ';')) @@ -70,44 +86,50 @@ t AS ( a AS ( -- arguments SELECT - a.package_name, - a.object_name AS module_name, - MIN(CASE WHEN a.in_out = 'OUT' AND a.position = 0 THEN 'FUNCTION' ELSE 'PROCEDURE' END) AS module_type, - a.overload, - NULLIF(SUM(CASE WHEN a.in_out LIKE 'IN%' THEN 1 ELSE 0 END), 0) AS args_in, - NULLIF(SUM(CASE WHEN a.in_out LIKE '%OUT' AND position > 0 THEN 1 ELSE 0 END), 0) AS args_out - FROM user_arguments a - JOIN x - ON a.package_name = NVL(x.package_name, a.package_name) - GROUP BY a.package_name, a.object_name, a.overload + t.package_name, + t.module_name, + t.module_type, + t.overload, + -- + NULLIF(SUM(CASE WHEN a.in_out LIKE 'IN%' THEN 1 ELSE 0 END), 0) AS args_in, + NULLIF(SUM(CASE WHEN a.in_out LIKE '%OUT' AND position > 0 THEN 1 ELSE 0 END), 0) AS args_out, + MAX(CASE WHEN (a.argument_name LIKE x.search_arguments || '%' ESCAPE '\') THEN 'Y' END) AS is_arg_present + FROM t + CROSS JOIN x + LEFT JOIN user_arguments a + ON a.package_name = t.package_name + AND a.object_name = t.module_name + AND NVL(a.overload, 0) = NVL(t.overload, 0) + GROUP BY t.package_name, t.module_name, t.module_type, t.overload ), d AS ( -- documentation lines SELECT - d.package_name, d.module_name, d.module_type, d.overload, --x.line, x.text - LISTAGG(REGEXP_SUBSTR(x.text, '^\s*--\s*(.*)\s*$', 1, 1, NULL, 1), '
') WITHIN GROUP (ORDER BY x.line) AS comment_, - MIN(x.line) AS doc_start + d.package_name, d.module_name, d.module_type, d.overload, --s.line, s.text + LISTAGG(REGEXP_SUBSTR(s.text, '^\s*--\s*(.*)\s*$', 1, 1, NULL, 1), '
') WITHIN GROUP (ORDER BY s.line) AS comment_, + MIN(s.line) AS doc_start FROM ( SELECT t.package_name, t.module_name, t.module_type, t.overload, - MAX(x.line) + 1 AS doc_start, + MAX(s.line) + 1 AS doc_start, t.spec_start - 1 AS doc_end FROM t - LEFT JOIN user_source x - ON x.name = t.package_name - AND x.type = 'PACKAGE' - AND x.line < t.spec_start - AND REGEXP_LIKE(x.text, '^\s*$') + LEFT JOIN s + ON s.name = t.package_name + AND s.type = 'PACKAGE' + AND s.line < t.spec_start + AND REGEXP_LIKE(s.text, '^\s*$') GROUP BY t.package_name, t.module_name, t.module_type, t.overload, t.spec_start ) d - LEFT JOIN user_source x - ON x.name = d.package_name - AND x.type = 'PACKAGE' - AND x.line BETWEEN d.doc_start AND d.doc_end - AND NOT REGEXP_LIKE(x.text, '^\s*--\s*$') + LEFT JOIN s + ON s.name = d.package_name + AND s.type = 'PACKAGE' + AND s.line BETWEEN d.doc_start AND d.doc_end + AND NOT REGEXP_LIKE(s.text, '^\s*--\s*$') GROUP BY d.package_name, d.module_name, d.module_type, d.overload ), g AS ( + -- group for related modules SELECT s.name, s.line, @@ -115,9 +137,21 @@ g AS ( RPAD(' ', ROW_NUMBER() OVER(ORDER BY s.line DESC)) AS group_sort FROM user_source s JOIN x - ON s.name = NVL(x.package_name, s.name) - WHERE s.type = 'PACKAGE' + ON s.name = NVL(x.package_name, s.name) + AND (s.name LIKE x.search_packages || '%' ESCAPE '\' OR x.search_packages IS NULL) + WHERE s.type = 'PACKAGE' AND REGEXP_LIKE(s.text, '^\s*--\s*###') +), +f AS ( + -- search source code + SELECT t.package_name, t.module_name, t.overload + FROM t + JOIN s + ON s.name = t.package_name + AND s.type = 'PACKAGE BODY' + AND s.line BETWEEN t.body_start AND t.body_end + AND s.is_found_text = 'Y' + GROUP BY t.package_name, t.module_name, t.overload ) SELECT t.package_name, @@ -134,7 +168,7 @@ SELECT -- CASE WHEN t.module_type = 'FUNCTION' THEN 'Y' END AS is_function, CASE WHEN b.text IS NOT NULL THEN 'Y' END AS is_private, - CASE WHEN a.text IS NOT NULL THEN 'Y' END AS is_autonomous, + CASE WHEN n.text IS NOT NULL THEN 'Y' END AS is_autonomous, CASE WHEN t.result_cache = 'YES' THEN 'Y' END AS is_cached, CASE WHEN t.authid = 'DEFINER' THEN 'Y' END AS is_definer, -- @@ -153,26 +187,33 @@ FROM t JOIN x ON t.package_name = NVL(x.package_name, t.package_name) AND SUBSTR(t.module_type, 1, 1) = NVL(x.module_type, SUBSTR(t.module_type, 1, 1)) -LEFT JOIN a + -- + AND (t.package_name LIKE x.search_packages || '%' ESCAPE '\' OR x.search_packages IS NULL) + AND (t.module_name LIKE x.search_modules || '%' ESCAPE '\' OR x.search_modules IS NULL) +JOIN a ON a.package_name = t.package_name AND a.module_name = t.module_name - AND a.module_type = t.module_type - AND NVL(a.overload, 1) = NVL(t.overload, 1) -LEFT JOIN d + AND NVL(a.overload, 0) = NVL(t.overload, 0) + AND (a.is_arg_present = 'Y' OR x.search_arguments IS NULL) +JOIN d ON d.package_name = t.package_name AND d.module_name = t.module_name - AND d.module_type = t.module_type - AND NVL(d.overload, 1) = NVL(t.overload, 1) -LEFT JOIN user_source b - ON b.name = t.package_name - AND b.type = 'PACKAGE' - AND b.line BETWEEN t.spec_start AND t.spec_end + AND NVL(d.overload, 0) = NVL(t.overload, 0) +LEFT JOIN s b + ON b.name = t.package_name + AND b.type = 'PACKAGE' + AND b.line BETWEEN t.spec_start AND t.spec_end AND REGEXP_LIKE(b.text, '^\s*(ACCESSIBLE BY)') -LEFT JOIN user_source a - ON a.name = t.package_name - AND a.type = 'PACKAGE BODY' - AND a.line BETWEEN t.body_start AND t.body_end - AND REGEXP_LIKE(a.text, 'PRAGMA\s+AUTONOMOUS_TRANSACTION'); +LEFT JOIN s n + ON n.name = t.package_name + AND n.type = 'PACKAGE BODY' + AND n.line BETWEEN t.body_start AND t.body_end + AND REGEXP_LIKE(n.text, 'PRAGMA\s+AUTONOMOUS_TRANSACTION') +LEFT JOIN f + ON f.package_name = t.package_name + AND f.module_name = t.module_name + AND NVL(f.overload, 0) = NVL(t.overload, 0) +WHERE (f.module_name IS NOT NULL OR x.search_source IS NULL); -- COMMENT ON TABLE obj_modules IS 'Find package modules (procedures and functions) and their boundaries (start-end lines)'; -- diff --git a/views/obj_packages.sql b/views/obj_packages.sql index 105d38e..f74d691 100644 --- a/views/obj_packages.sql +++ b/views/obj_packages.sql @@ -1,45 +1,48 @@ CREATE OR REPLACE VIEW obj_packages AS -WITH x AS ( - SELECT /*+ MATERIALIZE */ - app.get_item('$PACKAGE_NAME') AS package_name - FROM DUAL -), -s AS ( +WITH s AS ( SELECT - s.name AS package_name, - COUNT(*) AS count_lines + s.name AS package_name, + COUNT(s.line) AS count_lines FROM user_source s - WHERE s.type = 'PACKAGE BODY' + JOIN ( + SELECT m.package_name + FROM obj_modules m + GROUP BY m.package_name + ) m + ON m.package_name = s.name + WHERE s.type = 'PACKAGE BODY' GROUP BY s.name ), f AS ( SELECT a.package_name, SUM(CASE WHEN a.position = 0 THEN 1 ELSE 0 END) AS count_functions - FROM user_arguments a + FROM s + LEFT JOIN user_arguments a + ON a.package_name = s.package_name GROUP BY a.package_name ) SELECT p.object_name AS package_name, -- - COUNT(p.procedure_name) - MIN(f.count_functions) AS count_procedures, + COUNT(p.procedure_name) - MIN(f.count_functions) AS count_procedures, -- MIN(f.count_functions) AS count_functions, MAX(s.count_lines) AS count_lines, MAX(o.last_ddl_time) AS last_ddl_time, -- - -- dependencies? + -- @TODO: dependencies? -- - NULL AS desc_ + NULL AS desc_ -- @TODO: get from specification FROM user_objects o -CROSS JOIN x JOIN user_procedures p - ON p.object_name = o.object_name - AND o.object_type = 'PACKAGE' + ON p.object_name = o.object_name + AND o.object_type = 'PACKAGE' JOIN s - ON s.package_name = p.object_name -LEFT JOIN f - ON f.package_name = p.object_name -WHERE o.object_name = NVL(x.package_name, o.object_name) + ON s.package_name = p.object_name +JOIN f + ON f.package_name = p.object_name GROUP BY p.object_name; +-- +COMMENT ON TABLE obj_packages IS 'List of packages';