MINOR: Fix Oracle SP Lineage for begin...end SP call (#16240)

This commit is contained in:
Mayur Singal 2024-05-15 14:46:57 +05:30 committed by GitHub
parent 3cf928bcc7
commit 945cd35148
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 46 additions and 3 deletions

View File

@ -97,7 +97,7 @@ WITH SP_HISTORY AS (SELECT
TO_TIMESTAMP(LAST_LOAD_TIME, 'YYYY-MM-DD HH24:MI:SS') + NUMTODSINTERVAL(ELAPSED_TIME / 1000, 'SECOND') AS end_time,
PARSING_SCHEMA_NAME as user_name
FROM gv$sql
WHERE UPPER(sql_text) LIKE 'CALL%%'
WHERE UPPER(sql_text) LIKE '%%CALL%%' or UPPER(sql_text) LIKE '%%BEGIN%%'
AND TO_TIMESTAMP(FIRST_LOAD_TIME, 'YYYY-MM-DD HH24:MI:SS') >= TO_TIMESTAMP('{start_date}', 'YYYY-MM-DD HH24:MI:SS')
),
Q_HISTORY AS (SELECT
@ -114,7 +114,7 @@ WITH SP_HISTORY AS (SELECT
PARSING_SCHEMA_NAME AS SCHEMA_NAME,
NULL AS DATABASE_NAME
FROM gv$sql
WHERE UPPER(sql_text) NOT LIKE '%CALL%'
WHERE UPPER(sql_text) NOT LIKE '%%CALL%%' AND UPPER(sql_text) NOT LIKE '%%BEGIN%%'
AND SQL_FULLTEXT NOT LIKE '/* {{"app": "OpenMetadata", %%}} */%%'
AND SQL_FULLTEXT NOT LIKE '/* {{"app": "dbt", %%}} */%%'
AND TO_TIMESTAMP(FIRST_LOAD_TIME, 'YYYY-MM-DD HH24:MI:SS')
@ -135,6 +135,7 @@ JOIN Q_HISTORY Q
ON Q.start_time between SP.start_time and SP.end_time
AND Q.end_time between SP.start_time and SP.end_time
AND Q.user_name = SP.user_name
AND Q.QUERY_TYPE <> 'SELECT'
ORDER BY PROCEDURE_START_TIME DESC
"""
)

View File

@ -19,7 +19,7 @@ from metadata.utils.logger import utils_logger
logger = utils_logger()
NAME_PATTERN = r"(?<=call)(.*)(?=\()"
NAME_PATTERN = r"(?<=call)(.*)(?=\()|(?<=begin)(.*)(?=\()|(?<=begin)(.*)(?=;\s*end)"
def get_procedure_name_from_call(

View File

@ -49,6 +49,48 @@ class StoredProceduresTests(TestCase):
"procedure_name",
)
self.assertEqual(
get_procedure_name_from_call(
query_text="BEGIN DB.SCHEMA.PROCEDURE_NAME; END;",
),
"procedure_name",
)
self.assertEqual(
get_procedure_name_from_call(
query_text="BEGIN schema.procedure_name; END;",
),
"procedure_name",
)
self.assertEqual(
get_procedure_name_from_call(
query_text="BEGIN procedure_name; END;",
),
"procedure_name",
)
self.assertEqual(
get_procedure_name_from_call(
query_text="BEGIN DB.SCHEMA.PROCEDURE_NAME(...); END;",
),
"procedure_name",
)
self.assertEqual(
get_procedure_name_from_call(
query_text="BEGIN schema.procedure_name(...); END;",
),
"procedure_name",
)
self.assertEqual(
get_procedure_name_from_call(
query_text="BEGIN procedure_name(...); END;",
),
"procedure_name",
)
self.assertIsNone(
get_procedure_name_from_call(
query_text="something very random",