CORE/database/mviews/nav_overview_mvw.sql
2022-10-27 09:46:01 +02:00

139 lines
4.2 KiB
MySQL

BEGIN
DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP MATERIALIZED VIEW NAV_OVERVIEW_MVW');
DBMS_OUTPUT.PUT_LINE('--');
DBMS_OUTPUT.PUT_LINE('-- MATERIALIZED VIEW NAV_OVERVIEW_MVW DROPPED');
DBMS_OUTPUT.PUT_LINE('--');
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
/
--
CREATE MATERIALIZED VIEW nav_overview_mvw
BUILD DEFERRED
REFRESH COMPLETE ON DEMAND
AS
WITH t AS (
SELECT /*+ MATERIALIZE */
ROWNUM AS r#, -- to keep hierarchy sorted
t.*
FROM (
SELECT
n.app_id,
n.page_id,
n.order#,
--
REPLACE(p.page_name, '&' || 'APP_NAME.', a.application_name) AS page_name,
REPLACE(p.page_title, '&' || 'APP_NAME.', a.application_name) AS page_title,
--
p.page_alias,
p.page_group,
p.authorization_scheme,
p.page_css_classes,
p.page_mode,
p.page_template,
p.page_comment AS comments,
--
'#' AS javascript_target,
i.item_source AS javascript,
--
LEVEL - 1 AS depth,
CONNECT_BY_ROOT NVL(n.order#, n.page_id) AS page_root
FROM navigation n
JOIN apps a
ON a.app_id = n.app_id
LEFT JOIN apex_application_pages p
ON p.application_id = n.app_id
AND p.page_id = n.page_id
LEFT JOIN apex_applications a
ON a.application_id = p.application_id
LEFT JOIN apex_application_page_items i
ON i.application_id = n.app_id
AND i.item_name = 'P' || TO_CHAR(n.page_id) || '_JAVASCRIPT_TARGET'
CONNECT BY n.parent_id = PRIOR n.page_id
AND n.app_id = PRIOR n.app_id
START WITH n.parent_id IS NULL
ORDER SIBLINGS BY n.app_id, n.order#, n.page_id
) t
)
SELECT
n.app_id,
n.page_id,
n.parent_id,
n.order#,
t.r#,
--
t.page_root,
t.page_root || ' ' || COALESCE (
t.page_group,
(
SELECT t.page_group
FROM t
WHERE t.app_id = n.app_id
AND t.page_id = n.parent_id
)
) AS page_group,
--
t.page_alias,
t.depth,
t.page_name,
t.page_title,
t.page_css_classes AS css_class,
t.page_template,
--
n.is_hidden,
n.is_reset,
n.is_shared,
--
CASE WHEN t.page_mode = 'Normal' THEN NULL ELSE 'Y' END AS is_modal,
CASE WHEN t.javascript IS NOT NULL THEN 'Y' END AS is_javascript,
t.javascript,
t.javascript_target,
--
CASE
WHEN t.authorization_scheme LIKE '%MUST_NOT_BE_PUBLIC_USER%'
THEN app.get_icon('fa-check-square', 'MUST_NOT_BE_PUBLIC_USER')
--
WHEN t.authorization_scheme IS NULL AND n.page_id NOT IN (0, 9999)
THEN app.get_icon('fa-warning', 'Auth scheme is missing')
--
ELSE nav.get_html_a(app.get_page_url (
in_page_id => 920,
in_app_id => n.app_id,
in_names => 'P920_AUTH_SCHEME',
in_values => t.authorization_scheme
), t.authorization_scheme)
END AS auth_scheme,
--
CASE
WHEN t.javascript_target IS NOT NULL
THEN t.javascript_target
--
WHEN n.page_id > 0
THEN app.get_page_url (
in_page_id => n.page_id,
in_app_id => n.app_id,
in_session_id => CASE WHEN n.page_id = 9999 THEN 0 END
)
END AS page_url,
--
t.comments,
--
'UD' AS allow_changes, -- U = update, D = delete
--
t.page_root || '.' || TO_CHAR(10000 + t.r#) || '.' || NVL(t.order#, t.page_id) || '.' || n.page_id AS sort_order
FROM navigation n
JOIN apps a
ON a.app_id = n.app_id
LEFT JOIN t
ON t.app_id = n.app_id
AND t.page_id = n.page_id
WHERE (n.app_id, n.page_id) NOT IN (
SELECT
app.get_core_app_id() AS app_id,
947 AS page_id
FROM DUAL
);
--