Skip to content

Commit b4199fa

Browse files
committed
fix(#3190): add pre filtering of active proposals to sql
1 parent 450b21a commit b4199fa

File tree

2 files changed

+80
-55
lines changed

2 files changed

+80
-55
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ changes.
1616

1717
### Fixed
1818

19+
- hotfix for ada handle and payment address validation order [Issue 3155](https://github.com/IntersectMBO/govtool/issues/3155)
20+
- fix proposal list performance by pre-filtering active proposals [Issue 3190](https://github.com/IntersectMBO/govtool/issues/3190)
21+
1922
### Changed
2023

2124
- Exclude network total stake and info from network metrics [Issue 3189](https://github.com/IntersectMBO/govtool/issues/3189)

govtool/backend/sql/list-proposals.sql

Lines changed: 77 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1-
WITH LatestDrepDistr AS (
2-
SELECT
3-
*,
4-
ROW_NUMBER() OVER (PARTITION BY hash_id ORDER BY epoch_no DESC) AS rn
1+
WITH ActiveProposals AS (
2+
SELECT id
3+
FROM gov_action_proposal
4+
WHERE expiration > (SELECT MAX(no) FROM epoch)
5+
AND ratified_epoch IS NULL
6+
AND enacted_epoch IS NULL
7+
AND expired_epoch IS NULL
8+
AND dropped_epoch IS NULL
9+
),
10+
LatestDrepDistr AS (
11+
SELECT DISTINCT ON (hash_id)
12+
*
513
FROM
614
drep_distr
15+
ORDER BY
16+
hash_id, epoch_no DESC
717
),
818
LatestEpoch AS (
919
SELECT
@@ -46,6 +56,7 @@ ParsedDescription AS (
4656
gov_action_proposal
4757
WHERE
4858
gov_action_proposal.type = 'NewCommittee'
59+
AND gov_action_proposal.id IN (SELECT id FROM ActiveProposals)
4960
),
5061
MembersToBeRemoved AS (
5162
SELECT
@@ -96,19 +107,28 @@ EnrichedCurrentMembers AS (
96107
pcm.id
97108
),
98109
RankedPoolVotes AS (
99-
SELECT
100-
*,
101-
ROW_NUMBER() OVER (PARTITION BY vp.pool_voter ORDER BY vp.tx_id DESC) AS rn
110+
SELECT DISTINCT ON (vp.pool_voter, vp.gov_action_proposal_id)
111+
vp.gov_action_proposal_id,
112+
vp.pool_voter,
113+
vp.vote
102114
FROM
103115
voting_procedure vp
116+
WHERE
117+
vp.pool_voter IS NOT NULL
118+
AND vp.gov_action_proposal_id IN (SELECT id FROM ActiveProposals)
119+
ORDER BY
120+
vp.pool_voter,
121+
vp.gov_action_proposal_id,
122+
vp.tx_id DESC,
123+
vp.id DESC
104124
),
105125
PoolVotes AS (
106126
SELECT
107127
rpv.gov_action_proposal_id,
108128
ps.epoch_no,
109-
COUNT(DISTINCT CASE WHEN vote = 'Yes' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes,
110-
COUNT(DISTINCT CASE WHEN vote = 'No' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes,
111-
COUNT(DISTINCT CASE WHEN vote = 'Abstain' THEN rpv.pool_voter ELSE 0 END) AS total_unique_votes,
129+
COUNT(DISTINCT CASE WHEN vote = 'Yes' THEN rpv.pool_voter ELSE 0 END) AS total_yes_votes,
130+
COUNT(DISTINCT CASE WHEN vote = 'No' THEN rpv.pool_voter ELSE 0 END) AS total_no_votes,
131+
COUNT(DISTINCT CASE WHEN vote = 'Abstain' THEN rpv.pool_voter ELSE 0 END) AS total_abstain_votes,
112132
SUM(CASE WHEN rpv.vote = 'Yes' THEN ps.voting_power ELSE 0 END) AS poolYesVotes,
113133
SUM(CASE WHEN rpv.vote = 'No' THEN ps.voting_power ELSE 0 END) AS poolNoVotes,
114134
SUM(CASE WHEN rpv.vote = 'Abstain' THEN ps.voting_power ELSE 0 END) AS poolAbstainVotes
@@ -118,48 +138,58 @@ PoolVotes AS (
118138
pool_stat ps
119139
ON rpv.pool_voter = ps.pool_hash_id
120140
WHERE
121-
rpv.rn = 1 AND ps.epoch_no = (SELECT MAX(no) FROM epoch)
141+
ps.epoch_no = (SELECT MAX(no) FROM epoch)
122142
GROUP BY
123143
rpv.gov_action_proposal_id, ps.epoch_no
124144
),
125145
RankedDRepVotes AS (
126146
SELECT DISTINCT ON (vp.drep_voter, vp.gov_action_proposal_id)
127-
*
147+
vp.gov_action_proposal_id,
148+
vp.drep_voter,
149+
vp.vote
128150
FROM
129151
voting_procedure vp
152+
WHERE
153+
vp.drep_voter IS NOT NULL
154+
AND vp.gov_action_proposal_id IN (SELECT id FROM ActiveProposals)
130155
ORDER BY
131-
vp.drep_voter,
132-
vp.gov_action_proposal_id,
133-
vp.tx_id DESC
156+
vp.drep_voter,
157+
vp.gov_action_proposal_id,
158+
vp.tx_id DESC,
159+
vp.id DESC
134160
),
135161
RankedDRepRegistration AS (
136162
SELECT DISTINCT ON (dr.drep_hash_id)
137-
*
163+
dr.*
138164
FROM
139165
drep_registration dr
140166
ORDER BY
141167
dr.drep_hash_id,
142-
dr.tx_id DESC
168+
dr.tx_id DESC,
169+
dr.id DESC
143170
),
144171
CommitteeVotes AS (
145172
SELECT
146-
gov_action_proposal_id,
147-
148-
SUM(CASE WHEN vote = 'Yes' THEN 1 ELSE 0 END) AS ccYesVotes,
149-
SUM(CASE WHEN vote = 'No' THEN 1 ELSE 0 END) AS ccNoVotes,
150-
SUM(CASE WHEN vote = 'Abstain' THEN 1 ELSE 0 END) AS ccAbstainVotes
151-
FROM
152-
voting_procedure AS vp
153-
WHERE
154-
vp.committee_voter IS NOT NULL
155-
AND (vp.tx_id, vp.committee_voter, vp.gov_action_proposal_id) IN (
156-
SELECT MAX(tx_id), committee_voter, gov_action_proposal_id
157-
FROM voting_procedure
158-
WHERE committee_voter IS NOT NULL
159-
GROUP BY committee_voter, gov_action_proposal_id
160-
)
173+
vp.gov_action_proposal_id,
174+
SUM(CASE WHEN vp.vote = 'Yes' THEN 1 ELSE 0 END) AS ccYesVotes,
175+
SUM(CASE WHEN vp.vote = 'No' THEN 1 ELSE 0 END) AS ccNoVotes,
176+
SUM(CASE WHEN vp.vote = 'Abstain' THEN 1 ELSE 0 END) AS ccAbstainVotes
177+
FROM (
178+
SELECT DISTINCT ON (committee_voter, gov_action_proposal_id)
179+
gov_action_proposal_id,
180+
committee_voter,
181+
vote
182+
FROM voting_procedure
183+
WHERE committee_voter IS NOT NULL
184+
AND gov_action_proposal_id IN (SELECT id FROM ActiveProposals)
185+
ORDER BY
186+
committee_voter,
187+
gov_action_proposal_id,
188+
tx_id DESC,
189+
id DESC
190+
) vp
161191
GROUP BY
162-
gov_action_proposal_id
192+
vp.gov_action_proposal_id
163193
)
164194
SELECT
165195
gov_action_proposal.id,
@@ -228,7 +258,7 @@ SELECT
228258
NULL
229259
END
230260
, '{}'::JSON) AS description,
231-
CASE
261+
CASE
232262
WHEN meta.network_name::text = 'mainnet' OR meta.network_name::text = 'preprod' THEN
233263
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '5 days'
234264
ELSE
@@ -266,16 +296,17 @@ SELECT
266296
drep_voting_power.no_confidence
267297
END) no_votes,
268298
COALESCE(SUM(ldd_drep.amount) FILTER (WHERE rdv.vote::text = 'Abstain'), 0) abstain_votes,
269-
COALESCE(ps.poolYesVotes, 0) pool_yes_votes,
270-
COALESCE(ps.poolNoVotes, 0) pool_no_votes,
271-
COALESCE(ps.poolAbstainVotes, 0) pool_abstain_votes,
299+
COALESCE(ps.poolYesVotes, 0) pool_yes_votes,
300+
COALESCE(ps.poolNoVotes, 0) pool_no_votes,
301+
COALESCE(ps.poolAbstainVotes, 0) pool_abstain_votes,
272302
COALESCE(cv.ccYesVotes, 0) cc_yes_votes,
273303
COALESCE(cv.ccNoVotes, 0) cc_no_votes,
274304
COALESCE(cv.ccAbstainVotes, 0) cc_abstain_votes,
275305
prev_gov_action.index as prev_gov_action_index,
276306
encode(prev_gov_action_tx.hash, 'hex') as prev_gov_action_tx_hash
277307
FROM
278308
gov_action_proposal
309+
JOIN ActiveProposals ON gov_action_proposal.id = ActiveProposals.id
279310
CROSS JOIN LatestEpoch AS latest_epoch
280311
CROSS JOIN DRepVotingPower AS drep_voting_power
281312
CROSS JOIN meta
@@ -286,30 +317,21 @@ FROM
286317
LEFT JOIN off_chain_vote_gov_action_data ON off_chain_vote_gov_action_data.off_chain_vote_data_id = off_chain_vote_data.id
287318
LEFT JOIN param_proposal AS proposal_params ON gov_action_proposal.param_proposal = proposal_params.id
288319
LEFT JOIN cost_model AS cost_model ON proposal_params.cost_model_id = cost_model.id
289-
LEFT JOIN PoolVotes ps ON gov_action_proposal.id = ps.gov_action_proposal_id
320+
LEFT JOIN PoolVotes ps ON gov_action_proposal.id = ps.gov_action_proposal_id
290321
LEFT JOIN CommitteeVotes cv ON gov_action_proposal.id = cv.gov_action_proposal_id
291322
LEFT JOIN RankedDRepVotes rdv ON rdv.gov_action_proposal_id = gov_action_proposal.id
292323
LEFT JOIN RankedDRepRegistration rdr ON rdr.drep_hash_id = rdv.drep_voter AND COALESCE(rdr.deposit, 0) >= 0
293-
LEFT JOIN LatestDrepDistr ldd_drep ON ldd_drep.hash_id = rdr.drep_hash_id
324+
LEFT JOIN LatestDrepDistr ldd_drep ON ldd_drep.hash_id = rdr.drep_hash_id
294325
AND ldd_drep.epoch_no = latest_epoch.no
295326
LEFT JOIN gov_action_proposal AS prev_gov_action ON gov_action_proposal.prev_gov_action_proposal = prev_gov_action.id
296-
LEFT JOIN tx AS prev_gov_action_tx ON prev_gov_action.tx_id = prev_gov_action_tx.id
327+
LEFT JOIN tx AS prev_gov_action_tx ON prev_gov_action.tx_id = prev_gov_action_tx.id
297328
WHERE
298329
(COALESCE(?, '') = '' OR
299330
off_chain_vote_gov_action_data.title ILIKE ? OR
300331
off_chain_vote_gov_action_data.abstract ILIKE ? OR
301332
off_chain_vote_gov_action_data.motivation ILIKE ? OR
302333
off_chain_vote_gov_action_data.rationale ILIKE ? OR
303334
concat(encode(creator_tx.hash, 'hex'), '#', gov_action_proposal.index) ILIKE ?)
304-
AND gov_action_proposal.expiration >(
305-
SELECT
306-
Max(NO)
307-
FROM
308-
epoch)
309-
AND gov_action_proposal.ratified_epoch IS NULL
310-
AND gov_action_proposal.enacted_epoch IS NULL
311-
AND gov_action_proposal.expired_epoch IS NULL
312-
AND gov_action_proposal.dropped_epoch IS NULL
313335
GROUP BY
314336
gov_action_proposal.id,
315337
creator_tx.hash,
@@ -323,14 +345,14 @@ GROUP BY
323345
cv.ccAbstainVotes,
324346
proposal_params,
325347
ps.poolYesVotes,
326-
ps.poolNoVotes,
327-
ps.poolAbstainVotes,
328-
meta.network_name,
329-
voting_anchor.url,
330-
voting_anchor.data_hash,
348+
ps.poolNoVotes,
349+
ps.poolAbstainVotes,
350+
meta.network_name,
351+
voting_anchor.url,
352+
voting_anchor.data_hash,
331353
prev_gov_action.index,
332354
prev_gov_action_tx.hash,
333355
off_chain_vote_gov_action_data.title,
334356
off_chain_vote_gov_action_data.abstract,
335357
off_chain_vote_gov_action_data.motivation,
336-
off_chain_vote_gov_action_data.rationale
358+
off_chain_vote_gov_action_data.rationale;

0 commit comments

Comments
 (0)