-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use asset_stats() stored procedure instead of table
- Loading branch information
Showing
5 changed files
with
99 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
-- Recreate asset_stats table (taken from migration 0005) | ||
CREATE TABLE asset_stats ( | ||
id serial PRIMARY KEY, | ||
paging_token character varying(64), | ||
asset_type character varying(64), | ||
asset_code character varying(12), | ||
asset_issuer character varying(56), | ||
issued bigint, | ||
transferred bigint, | ||
accounts_with_trustline integer, | ||
accounts_with_payments integer, | ||
payments integer, | ||
created_at timestamp without time zone | ||
); | ||
|
||
CREATE OR REPLACE FUNCTION repopulate_asset_stats() | ||
RETURNS VOID | ||
AS | ||
$$ | ||
DECLARE | ||
t_row record; | ||
BEGIN | ||
TRUNCATE asset_stats; | ||
FOR t_row in SELECT paging_token, effect_id, asset_type, asset_code, asset_issuer, created_at FROM effects ORDER BY effect_id LOOP | ||
INSERT INTO asset_stats(paging_token, asset_code, asset_issuer, asset_type, created_at, issued, transferred, accounts_with_trustline, accounts_with_payments, payments) | ||
VALUES (t_row.paging_token, t_row.asset_code, t_row.asset_issuer, t_row.asset_type, t_row.created_at, | ||
(SELECT COALESCE(SUM(amount), 0) FROM effects WHERE type = 'account_debited' AND account = t_row.asset_issuer AND effect_id <= t_row.effect_id), | ||
(SELECT COALESCE(SUM(amount), 0) FROM effects WHERE type = 'account_debited' AND account != t_row.asset_issuer AND effect_id <= t_row.effect_id), | ||
(SELECT COUNT(DISTINCT account) FROM effects WHERE account != t_row.asset_issuer AND type = 'trustline_created' AND effect_id <= t_row.effect_id), | ||
(SELECT COUNT(DISTINCT account) FROM effects WHERE account != t_row.asset_issuer AND type = 'account_debited' AND effect_id <= t_row.effect_id), | ||
(SELECT COUNT(*) FROM effects WHERE type = 'account_debited' AND account != t_row.asset_issuer AND effect_id <= t_row.effect_id) | ||
); | ||
END LOOP; | ||
END; | ||
$$ | ||
LANGUAGE plpgsql; | ||
|
||
-- Re-populate asset_stats table | ||
SELECT repopulate_asset_stats(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
CREATE OR REPLACE FUNCTION asset_stats(asset_code_filter character varying(12), asset_issuer_filter character varying(56)) | ||
RETURNS TABLE ( | ||
-- TODO: ID to order required? | ||
effect_id character varying(56), | ||
paging_token character varying(64), | ||
asset_type character varying(64), | ||
asset_code character varying(12), | ||
asset_issuer character varying(56), | ||
issued bigint, | ||
transferred bigint, | ||
accounts_with_trustline integer, | ||
accounts_with_payments integer, | ||
payments integer, | ||
created_at timestamp without time zone | ||
) | ||
AS | ||
$$ | ||
#variable_conflict use_column | ||
DECLARE | ||
t_row record; | ||
BEGIN | ||
FOR t_row in SELECT effect_id, paging_token, asset_type, asset_code, asset_issuer, created_at FROM effects ORDER BY created_at LOOP | ||
-- Next if asset_code and asset_issuer do not match | ||
CONTINUE WHEN t_row.asset_code != asset_code_filter AND t_row.asset_issuer != asset_issuer_filter; | ||
|
||
effect_id := t_row.effect_id; | ||
paging_token := t_row.paging_token; | ||
asset_type := t_row.asset_type; | ||
asset_code := t_row.asset_code; | ||
asset_issuer := t_row.asset_issuer; | ||
created_at := t_row.created_at; | ||
issued := (SELECT COALESCE(SUM(amount), 0) FROM effects WHERE type = 'account_debited' AND account = t_row.asset_issuer AND effect_id <= t_row.effect_id); | ||
transferred := (SELECT COALESCE(SUM(amount), 0) FROM effects WHERE type = 'account_debited' AND account != t_row.asset_issuer AND effect_id <= t_row.effect_id); | ||
accounts_with_trustline := (SELECT COUNT(DISTINCT account) FROM effects WHERE account != t_row.asset_issuer AND type = 'trustline_created' AND effect_id <= t_row.effect_id); | ||
accounts_with_payments := (SELECT COUNT(DISTINCT account) FROM effects WHERE account != t_row.asset_issuer AND type = 'account_debited' AND effect_id <= t_row.effect_id); | ||
payments := (SELECT COUNT(*) FROM effects WHERE type = 'account_debited' AND account != t_row.asset_issuer AND effect_id <= t_row.effect_id); | ||
RETURN NEXT; | ||
END LOOP; | ||
END; | ||
$$ | ||
LANGUAGE plpgsql; | ||
|
||
DROP TABLE asset_stats; | ||
DROP FUNCTION repopulate_asset_stats; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters