Skip to content
Snippets Groups Projects
Commit d99af580 authored by Bartek Wrona's avatar Bartek Wrona
Browse files

bridge_api.get_ranked_posts fixes:

- fixed bugs in SQL query (typos, broken table aliases)
- used joins to eliminate 3x queries to hive_posts_data
- added missing author_rep output column in the query
parent 9f2e79f5
No related branches found
No related tags found
4 merge requests!456Release candidate v1 24,!230Setup monitoring with pghero,!135Enable postgres monitoring on CI server,!20Dk issue 3 pyresttests
...@@ -19,9 +19,12 @@ ROLES = {-2: 'muted', 0: 'guest', 2: 'member', 4: 'mod', 6: 'admin', 8: 'owner'} ...@@ -19,9 +19,12 @@ ROLES = {-2: 'muted', 0: 'guest', 2: 'member', 4: 'mod', 6: 'admin', 8: 'owner'}
SQL_TEMPLATE = """ SQL_TEMPLATE = """
SELECT hp.id, SELECT hp.id,
ha_a.name as author, ha_a.name as author,
ha_r.name as root_author,
hp.author_rep as author_rep,
hpd_p.permlink as permlink, hpd_p.permlink as permlink,
(SELECT title FROM hive_post_data WHERE hive_post_data.id = hp.id) as title, hpd_r.permlink as root_permlink,
(SELECT body FROM hive_post_data WHERE hive_post_data.id = hp.id) as body, hpd.title as title,
hpd.body as body,
(SELECT category FROM hive_category_data WHERE hive_category_data.id = hp.category_id) as category, (SELECT category FROM hive_category_data WHERE hive_category_data.id = hp.category_id) as category,
depth, depth,
promoted, promoted,
...@@ -33,7 +36,7 @@ SQL_TEMPLATE = """ ...@@ -33,7 +36,7 @@ SQL_TEMPLATE = """
hp.created_at, hp.created_at,
updated_at, updated_at,
rshares, rshares,
(SELECT json FROM hive_post_data WHERE hive_post_data.id = hp.id) as json, hpd.json as json,
is_hidden, is_hidden,
is_grayed, is_grayed,
total_votes, total_votes,
...@@ -42,11 +45,14 @@ SQL_TEMPLATE = """ ...@@ -42,11 +45,14 @@ SQL_TEMPLATE = """
ha_a.id AS acct_author_id, ha_a.id AS acct_author_id,
hive_roles.title as role_title, hive_roles.title as role_title,
hive_communities.title AS community_title, hive_communities.title AS community_title,
hive_roles.role_id AS role_id hive_roles.role_id AS role_id,
hive_posts.is_pinned AS is_pinned hp.is_pinned AS is_pinned
FROM hive_posts hp FROM hive_posts hp
INNER JOIN hive_accounts ha_a ON ha_a.id = hp.author_id INNER JOIN hive_accounts ha_a ON ha_a.id = hp.author_id
INNER JOIN hive_accounts ha_r ON ha_r.id = hp.root_author_id
INNER JOIN hive_permlink_data hpd_p ON hpd_p.id = hp.permlink_id INNER JOIN hive_permlink_data hpd_p ON hpd_p.id = hp.permlink_id
INNER JOIN hive_permlink_data hpd_r ON hpd_r.id = hp.root_permlink_id
INNER JOIN hive_post_data hpd ON hpd.id = hp.id
LEFT OUTER JOIN hive_communities ON (hp.community_id = hive_communities.id) LEFT OUTER JOIN hive_communities ON (hp.community_id = hive_communities.id)
LEFT OUTER JOIN hive_roles ON (ha_a.id = hive_roles.account_id AND hp.community_id = hive_roles.community_id) LEFT OUTER JOIN hive_roles ON (ha_a.id = hive_roles.account_id AND hp.community_id = hive_roles.community_id)
""" """
...@@ -134,26 +140,26 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='', ...@@ -134,26 +140,26 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='',
pinned_sql = '' pinned_sql = ''
if sort == 'trending': if sort == 'trending':
sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND hp.depth = 0 AND NOT hive_posts.is_deleted sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND hp.depth = 0 AND NOT hp.is_deleted
%s ORDER BY sc_trend desc, hp.id LIMIT :limit """ %s ORDER BY sc_trend desc, hp.id LIMIT :limit """
elif sort == 'hot': elif sort == 'hot':
sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND hp.depth = 0 AND NOT hive_posts.is_deleted sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND hp.depth = 0 AND NOT hp.is_deleted
%s ORDER BY sc_hot desc, hp.id LIMIT :limit """ %s ORDER BY sc_hot desc, hp.id LIMIT :limit """
elif sort == 'created': elif sort == 'created':
sql = SQL_TEMPLATE + """ WHERE hp.depth = 0 AND NOT hive_posts.is_deleted AND NOT hp.is_grayed sql = SQL_TEMPLATE + """ WHERE hp.depth = 0 AND NOT hp.is_deleted AND NOT hp.is_grayed
%s ORDER BY hp.created_at DESC, hp.id LIMIT :limit """ %s ORDER BY hp.created_at DESC, hp.id LIMIT :limit """
elif sort == 'promoted': elif sort == 'promoted':
sql = SQL_TEMPLATE + """ WHERE hp.depth > 0 AND hp.promoted > 0 AND NOT hive_posts.is_deleted sql = SQL_TEMPLATE + """ WHERE hp.depth > 0 AND hp.promoted > 0 AND NOT hp.is_deleted
AND NOT hp.is_paidout %s ORDER BY hp.promoted DESC, hp.id LIMIT :limit """ AND NOT hp.is_paidout %s ORDER BY hp.promoted DESC, hp.id LIMIT :limit """
elif sort == 'payout': elif sort == 'payout':
sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND NOT hive_posts.is_deleted %s sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND NOT hp.is_deleted %s
AND payout_at BETWEEN now() + interval '12 hours' AND now() + interval '36 hours' AND payout_at BETWEEN now() + interval '12 hours' AND now() + interval '36 hours'
ORDER BY hp.payout DESC, hp.id LIMIT :limit """ ORDER BY hp.payout DESC, hp.id LIMIT :limit """
elif sort == 'payout_comments': elif sort == 'payout_comments':
sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND NOT hive_posts.is_deleted AND hp.depth > 0 sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND NOT hp.is_deleted AND hp.depth > 0
%s ORDER BY hp.payout DESC, hp.id LIMIT :limit """ %s ORDER BY hp.payout DESC, hp.id LIMIT :limit """
elif sort == 'muted': elif sort == 'muted':
sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND NOT hive_posts.is_deleted AND hp.is_grayed sql = SQL_TEMPLATE + """ WHERE NOT hp.is_paidout AND NOT hp.is_deleted AND hp.is_grayed
AND hp.payout > 0 %s ORDER BY hp.payout DESC, hp.id LIMIT :limit """ AND hp.payout > 0 %s ORDER BY hp.payout DESC, hp.id LIMIT :limit """
sql = "---bridge_api.get_ranked_posts\n" + sql sql = "---bridge_api.get_ranked_posts\n" + sql
...@@ -194,7 +200,7 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='', ...@@ -194,7 +200,7 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='',
if sort in ['payout', 'payout_comments']: if sort in ['payout', 'payout_comments']:
sql = sql % """ AND hp.category = :tag """ sql = sql % """ AND hp.category = :tag """
else: else:
sql = sql % """ AND hp.post IN sql = sql % """ AND hp.id IN
(SELECT (SELECT
post_id post_id
FROM FROM
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment