diff --git a/hive/db/schema.py b/hive/db/schema.py index 5be435ebb6916305012c52bff43e9890b1a371e7..c9699f7706f321d5567c8560e9a69e71f464d5fc 100644 --- a/hive/db/schema.py +++ b/hive/db/schema.py @@ -872,14 +872,15 @@ def setup(db): db.query_no_return(sql) sql = """ - DROP VIEW IF EXISTS list_votes_by_voter_comment; + DROP VIEW IF EXISTS list_votes( character varying, character varying, character varying, int, bool ); - CREATE OR REPLACE FUNCTION public.list_votes_by_voter_comment + CREATE OR REPLACE FUNCTION public.list_votes ( in _VOTER hive_accounts.name%TYPE, in _AUTHOR hive_accounts.name%TYPE, in _PERMLINK hive_permlink_data.permlink%TYPE, - in _LIMIT INT + in _LIMIT INT, + in _IS_VOTER_COMMENT_SORT BOOLEAN ) RETURNS TABLE ( @@ -912,29 +913,55 @@ def setup(db): _PERMLINK_ID = find_comment_id( _AUTHOR, _PERMLINK, True); - RETURN QUERY - ( - SELECT - v.voter, - v.author, - v.permlink, - v.weight, - v.rshares, - v.percent, - v.time, - v.num_changes, - v.reputation - FROM - hive_votes_accounts_permlinks_view v - WHERE - ( v.voter_id = _VOTER_ID and v.permlink_id >= _PERMLINK_ID ) - OR - ( v.voter_id > _VOTER_ID ) - ORDER BY - voter_id, - permlink_id - LIMIT _LIMIT - ); + IF _IS_VOTER_COMMENT_SORT = True THEN + RETURN QUERY + ( + SELECT + v.voter, + v.author, + v.permlink, + v.weight, + v.rshares, + v.percent, + v.time, + v.num_changes, + v.reputation + FROM + hive_votes_accounts_permlinks_view v + WHERE + ( v.voter_id = _VOTER_ID and v.permlink_id >= _PERMLINK_ID ) + OR + ( v.voter_id > _VOTER_ID ) + ORDER BY + voter_id, + permlink_id + LIMIT _LIMIT + ); + ELSE + RETURN QUERY + ( + SELECT + v.voter, + v.author, + v.permlink, + v.weight, + v.rshares, + v.percent, + v.time, + v.num_changes, + v.reputation + FROM + hive_votes_accounts_permlinks_view v + WHERE + ( v.permlink_id = _PERMLINK_ID and v.voter_id >= _VOTER_ID ) + OR + ( v.permlink_id > _PERMLINK_ID ) + ORDER BY + permlink_id, + voter_id + LIMIT _LIMIT + ); + END IF; END $BODY$; diff --git a/hive/server/database_api/methods.py b/hive/server/database_api/methods.py index 2d3129933e228579b73079737054982f47b150dc..96fc8a299ecb75cc4c456a94c1e8c846584a1514 100644 --- a/hive/server/database_api/methods.py +++ b/hive/server/database_api/methods.py @@ -224,24 +224,12 @@ async def list_votes(context, start: list, limit: int, order: str, votes_present assert len(start) == 3, "Expecting 3 elements in start array" db = context['db'] - sql = "" - - if order == "by_comment_voter": - sql += """ - WHERE - author >= :author AND - permlink >= :permlink AND - voter >= :voter - ORDER BY - post_id ASC, - voter_id ASC - LIMIT - :limit - """ - rows = await db.query_all(sql, author=start[0], permlink=start[1], voter=start[2], limit=limit) + sql="" if order == "by_voter_comment": - sql = "select * from list_votes_by_voter_comment( '{}', '{}', '{}', {} )".format( start[0], start[1], start[2], limit ) + sql = "select * from list_votes( '{}', '{}', '{}', {}, true )".format( start[0], start[1], start[2], limit ) + else: + sql = "select * from list_votes( '{}', '{}', '{}', {}, false )".format( start[2], start[0], start[1], limit ) rows = await db.query_all(sql)