@@ -42,6 +42,21 @@ CommitteeData AS (
4242 FROM
4343 committee_member cm
4444 JOIN committee_hash ch ON cm .committee_hash_id = ch .id
45+ WHERE EXISTS (
46+ SELECT 1
47+ FROM committee_registration cr
48+ WHERE cr .cold_key_id = ch .id
49+ )
50+ AND NOT EXISTS (
51+ SELECT 1
52+ FROM committee_de_registration cdr
53+ WHERE cdr .cold_key_id = ch .id
54+ AND cdr .tx_id > (
55+ SELECT MAX (cr2 .tx_id )
56+ FROM committee_registration cr2
57+ WHERE cr2 .cold_key_id = ch .id
58+ )
59+ )
4560 ORDER BY
4661 ch .raw , cm .expiration_epoch DESC
4762),
@@ -61,10 +76,31 @@ ParsedDescription AS (
6176MembersToBeRemoved AS (
6277 SELECT
6378 id,
64- json_agg(VALUE- >> ' keyHash' ) AS members_to_be_removed
79+ json_agg(
80+ json_build_object(
81+ ' hash' , COALESCE(
82+ VALUE- >> ' keyHash' ,
83+ VALUE- >> ' scriptHash'
84+ ),
85+ ' type' , CASE
86+ WHEN VALUE- >> ' keyHash' IS NOT NULL THEN ' keyHash'
87+ WHEN VALUE- >> ' scriptHash' IS NOT NULL THEN ' scriptHash'
88+ ELSE ' unknown'
89+ END,
90+ ' hasScript' , CASE
91+ WHEN VALUE- >> ' scriptHash' IS NOT NULL THEN true
92+ ELSE false
93+ END
94+ )
95+ ) AS members_to_be_removed
6596 FROM
6697 ParsedDescription pd,
67- json_array_elements(members_to_be_removed::json) AS value
98+ json_array_elements(
99+ CASE
100+ WHEN pd .members_to_be_removed IS NULL THEN ' []' ::json
101+ ELSE pd .members_to_be_removed ::json
102+ END
103+ ) AS value
68104 GROUP BY
69105 id
70106),
@@ -73,7 +109,15 @@ ProcessedCurrentMembers AS (
73109 pd .id ,
74110 json_agg(
75111 json_build_object(
76- ' hash' , regexp_replace(kv .key , ' ^keyHash-' , ' ' ),
112+ ' hash' , COALESCE(
113+ regexp_replace(kv .key , ' ^keyHash-' , ' ' ),
114+ regexp_replace(kv .key , ' ^scriptHash-' , ' ' )
115+ ),
116+ ' type' , CASE
117+ WHEN kv .key LIKE ' keyHash-%' THEN ' keyHash'
118+ WHEN kv .key LIKE ' scriptHash-%' THEN ' scriptHash'
119+ ELSE ' unknown'
120+ END,
77121 ' newExpirationEpoch' , kv .value ::int
78122 )
79123 ) AS current_members
@@ -88,9 +132,17 @@ EnrichedCurrentMembers AS (
88132 pcm .id ,
89133 json_agg(
90134 json_build_object(
91- ' hash' , cm .hash ,
135+ ' hash' , CASE
136+ WHEN (member- >> ' hash' ) LIKE ' scriptHash-%' THEN
137+ regexp_replace(member- >> ' hash' , ' ^scriptHash-' , ' ' )
138+ WHEN (member- >> ' hash' ) LIKE ' keyHash-%' THEN
139+ regexp_replace(member- >> ' hash' , ' ^keyHash-' , ' ' )
140+ ELSE
141+ member- >> ' hash'
142+ END,
143+ ' type' , member- >> ' type' ,
92144 ' expirationEpoch' , cm .expiration_epoch ,
93- ' hasScript' , cm .has_script ,
145+ ' hasScript' , COALESCE( cm .has_script , member - >> ' type ' = ' scriptHash ' ) ,
94146 ' newExpirationEpoch' , (member- >> ' newExpirationEpoch' )::int
95147 )
96148 ) AS enriched_members
@@ -247,9 +299,9 @@ SELECT
247299 )
248300 FROM
249301 ParsedDescription pd
250- JOIN
302+ LEFT JOIN
251303 MembersToBeRemoved mtr ON pd .id = mtr .id
252- JOIN
304+ LEFT JOIN
253305 EnrichedCurrentMembers em ON pd .id = em .id
254306 WHERE
255307 pd .id = gov_action_proposal .id
0 commit comments