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';