galaxy(alarms): drop dead primitive branch from AlarmAttributesSql
B5: the candidate CTE's src_pri=1 (primitive-instance) UNION ALL branch was always excluded by the final WHERE r.src_pri=0, so it added work with no output change. Remove the branch and the now-constant src_pri column/filter. An alarm anchor is always a user attribute, so output is identical.
This commit is contained in:
@@ -308,11 +308,13 @@ LEFT JOIN data_type dt ON dt.mx_data_type = r.mx_data_type
|
|||||||
WHERE r.rn = 1
|
WHERE r.rn = 1
|
||||||
ORDER BY r.tag_name, r.attribute_name";
|
ORDER BY r.tag_name, r.attribute_name";
|
||||||
|
|
||||||
// Alarm-only discovery for the subtag-fallback watch-list. This deliberately reuses the
|
// Alarm-only discovery for the subtag-fallback watch-list. This reuses the candidate/ranked
|
||||||
// exact candidate/ranked CTE structure and the same `AlarmExtension`-based is_alarm
|
// CTE shape and the same `AlarmExtension`-based detection as AttributesSql. Unlike
|
||||||
// detection as AttributesSql so the two queries cannot drift: a row qualifies only when
|
// AttributesSql it keeps only the user-attribute (dynamic_attribute) candidate branch: an
|
||||||
// its user attribute (src_pri 0) anchors an `AlarmExtension` primitive on the owning
|
// alarm anchor is always a user attribute, so the primitive-instance branch AttributesSql
|
||||||
// object. It projects just what the watch-list needs — full_tag_reference (tag_name +
|
// carries would be filtered out here anyway — a row qualifies only when its user attribute
|
||||||
|
// anchors an `AlarmExtension` primitive on the owning object. It projects just what the
|
||||||
|
// watch-list needs — full_tag_reference (tag_name +
|
||||||
// '.' + attribute_name, matching AttributesSql) and the owning object's tag_name as
|
// '.' + attribute_name, matching AttributesSql) and the owning object's tag_name as
|
||||||
// source_object_reference. The array `[]` suffix is intentionally omitted: an
|
// source_object_reference. The array `[]` suffix is intentionally omitted: an
|
||||||
// alarm-bearing attribute is a scalar anchor, not an array body. It also projects the
|
// alarm-bearing attribute is a scalar anchor, not an array body. It also projects the
|
||||||
@@ -332,7 +334,7 @@ ORDER BY r.tag_name, r.attribute_name";
|
|||||||
),
|
),
|
||||||
candidate AS (
|
candidate AS (
|
||||||
SELECT
|
SELECT
|
||||||
dpc.gobject_id, g.tag_name, da.attribute_name, dpc.depth, 0 AS src_pri
|
dpc.gobject_id, g.tag_name, da.attribute_name, dpc.depth
|
||||||
FROM deployed_package_chain dpc
|
FROM deployed_package_chain dpc
|
||||||
INNER JOIN dynamic_attribute da ON da.package_id = dpc.package_id
|
INNER JOIN dynamic_attribute da ON da.package_id = dpc.package_id
|
||||||
INNER JOIN gobject g ON g.gobject_id = dpc.gobject_id
|
INNER JOIN gobject g ON g.gobject_id = dpc.gobject_id
|
||||||
@@ -341,25 +343,10 @@ candidate AS (
|
|||||||
AND da.attribute_name NOT LIKE '[_]%'
|
AND da.attribute_name NOT LIKE '[_]%'
|
||||||
AND da.attribute_name NOT LIKE '%.Description'
|
AND da.attribute_name NOT LIKE '%.Description'
|
||||||
AND da.mx_attribute_category IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 24)
|
AND da.mx_attribute_category IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 24)
|
||||||
UNION ALL
|
|
||||||
SELECT
|
|
||||||
dpc.gobject_id, g.tag_name,
|
|
||||||
CASE WHEN pi.primitive_name IS NULL OR pi.primitive_name = ''
|
|
||||||
THEN ad.attribute_name
|
|
||||||
ELSE pi.primitive_name + '.' + ad.attribute_name END AS attribute_name,
|
|
||||||
dpc.depth, 1 AS src_pri
|
|
||||||
FROM deployed_package_chain dpc
|
|
||||||
INNER JOIN primitive_instance pi ON pi.package_id = dpc.package_id
|
|
||||||
INNER JOIN attribute_definition ad ON ad.primitive_definition_id = pi.primitive_definition_id
|
|
||||||
INNER JOIN gobject g ON g.gobject_id = dpc.gobject_id
|
|
||||||
INNER JOIN template_definition td ON td.template_definition_id = g.template_definition_id
|
|
||||||
WHERE td.category_id IN (1, 3, 4, 10, 11, 13, 17, 24, 26)
|
|
||||||
AND ad.attribute_name NOT LIKE '[_]%'
|
|
||||||
AND ad.attribute_name NOT LIKE '%.Description'
|
|
||||||
),
|
),
|
||||||
ranked AS (
|
ranked AS (
|
||||||
SELECT c.*, ROW_NUMBER() OVER (
|
SELECT c.*, ROW_NUMBER() OVER (
|
||||||
PARTITION BY c.gobject_id, c.attribute_name ORDER BY c.src_pri, c.depth) AS rn
|
PARTITION BY c.gobject_id, c.attribute_name ORDER BY c.depth) AS rn
|
||||||
FROM candidate c
|
FROM candidate c
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
@@ -370,7 +357,6 @@ FROM ranked r
|
|||||||
INNER JOIN gobject g ON g.gobject_id = r.gobject_id
|
INNER JOIN gobject g ON g.gobject_id = r.gobject_id
|
||||||
LEFT JOIN gobject area ON area.gobject_id = g.area_gobject_id
|
LEFT JOIN gobject area ON area.gobject_id = g.area_gobject_id
|
||||||
WHERE r.rn = 1
|
WHERE r.rn = 1
|
||||||
AND r.src_pri = 0
|
|
||||||
AND EXISTS (
|
AND EXISTS (
|
||||||
SELECT 1 FROM deployed_package_chain dpc2
|
SELECT 1 FROM deployed_package_chain dpc2
|
||||||
INNER JOIN primitive_instance pi ON pi.package_id = dpc2.package_id AND pi.primitive_name = r.attribute_name
|
INNER JOIN primitive_instance pi ON pi.package_id = dpc2.package_id AND pi.primitive_name = r.attribute_name
|
||||||
|
|||||||
Reference in New Issue
Block a user