Skip to content
Snippets Groups Projects
Commit 9ee5c2fb authored by Andrzej Lisak's avatar Andrzej Lisak
Browse files

[ABW] bridge_api and database_api main queries replaced with use of vw_hive_posts view

view definition extended to cover all needed fields
unique constraint replaced with primary key (first) for hive_roles
parent d2dc1f46
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,!47bridge_api and database_api main queries replaced with use of vw_hive_posts view
......@@ -335,7 +335,7 @@ def build_metadata_community(metadata=None):
sa.Column('role_id', SMALLINT, nullable=False, server_default='0'),
sa.Column('title', sa.String(140), nullable=False, server_default=''),
sa.UniqueConstraint('account_id', 'community_id', name='hive_roles_ux1'),
sa.PrimaryKeyConstraint('account_id', 'community_id', name='hive_roles_pk'),
sa.Index('hive_roles_ix1', 'community_id', 'account_id', 'role_id'),
)
......@@ -635,7 +635,13 @@ def setup(db):
rpd.title AS root_title,
hp.sc_trend,
hp.sc_hot,
hp.is_deleted
hp.is_deleted,
hp.is_pinned,
hr.title AS role_title,
hr.role_id AS role_is,
hc.title AS community_title,
hc.name AS community_name,
htd.tag AS tag
FROM hive_posts hp
JOIN hive_posts rp ON rp.author_id = hp.root_author_id AND rp.permlink_id = hp.root_permlink_id
JOIN hive_post_data rpd ON rp.id = rpd.id
......@@ -647,7 +653,11 @@ def setup(db):
JOIN hive_accounts ha_pa ON ha_pa.id = hp.parent_author_id
JOIN hive_permlink_data hpd_pp ON hpd_pp.id = hp.parent_permlink_id
JOIN hive_accounts ha_ra ON ha_ra.id = hp.root_author_id
JOIN hive_permlink_data hpd_rp ON hpd_rp.id = hp.root_permlink_id;
JOIN hive_permlink_data hpd_rp ON hpd_rp.id = hp.root_permlink_id
JOIN hive_post_tags hpt ON hpt.post_id = hp.id
JOIN hive_tag_data htd ON hpt.tag_id=htd.id
LEFT OUTER JOIN hive_communities hc ON (hp.community_id = hc.id)
LEFT OUTER JOIN hive_roles hr ON (hp.author_id = hr.account_id AND hp.community_id = hr.community_id)
;
"""
db.query_no_return(sql)
......
......@@ -17,55 +17,46 @@ from hive.server.common.mutes import Mutes
ROLES = {-2: 'muted', 0: 'guest', 2: 'member', 4: 'mod', 6: 'admin', 8: 'owner'}
SQL_TEMPLATE = """
SELECT hp.id,
ha_a.name as author,
ha_r.name as root_author,
hp.author_rep as author_rep,
hp.allow_replies AS allow_replies,
hp.allow_votes AS allow_votes,
hp.allow_curation_rewards AS allow_curation_rewards,
hp.root_title AS root_title,
hp.beneficiaries AS beneficiaries,
hp.max_accepted_payout AS max_accepted_payout,
hp.percent_hbd AS percent_hbd,
hp.url AS url,
hpd_p.permlink as permlink,
hpd_r.permlink as root_permlink,
hpd.title as title,
hpd.body as body,
(SELECT category FROM hive_category_data WHERE hive_category_data.id = hp.category_id) as category,
depth,
promoted,
payout,
payout_at,
is_paidout,
children,
(0) as votes,
SELECT
hp.id,
hp.author,
hp.root_author,
hp.author_rep,
hp.allow_replies,
hp.allow_votes,
hp.allow_curation_rewards,
hp.root_title,
hp.beneficiaries,
hp.max_accepted_payout,
hp.percent_hbd,
hp.url,
hp.permlink,
hp.root_permlink,
hp.title,
hp.body,
hp.category,
hp.depth,
hp.promoted,
hp.payout,
hp.payout_at,
hp.is_paidout,
hp.children,
hp.votes,
hp.created_at,
updated_at,
rshares,
hpd.json as json,
is_hidden,
is_grayed,
total_votes,
flag_weight,
sc_trend,
ha_a.id AS acct_author_id,
hive_roles.title as role_title,
hive_communities.title AS community_title,
hive_roles.role_id AS role_id,
hp.is_pinned AS is_pinned,
curator_payout_value
FROM hive_posts hp
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_r ON hpd_r.id = hp.root_permlink_id
INNER JOIN hive_post_data hpd ON hpd.id = hp.id
INNER JOIN hive_post_tags hpt ON hpt.post_id = hp.id
INNER JOIN hive_tag_data htd ON hpt.tag_id=htd.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)
hp.updated_at,
hp.rshares,
hp.json,
hp.is_hidden,
hp.is_grayed,
hp.total_votes,
hp.flag_weight,
hp.sc_trend,
hp.role_title,
hp.community_title,
hr.role_id,
hp.is_pinned,
hp.curator_payout_value
FROM vw_hive_posts hp
WHERE
"""
......@@ -125,7 +116,7 @@ async def get_post(context, author, permlink, observer=None):
if observer and context:
blacklists_for_user = await Mutes.get_blacklists_for_observer(observer, context)
sql = "---bridge_api.get_post\n" + SQL_TEMPLATE + """ ha_a.name = :author AND hpd_p.permlink = :permlink AND NOT hp.is_deleted """
sql = "---bridge_api.get_post\n" + SQL_TEMPLATE + """ hp.author = :author AND hp.permlink = :permlink AND NOT hp.is_deleted """
result = await db.query_all(sql, author=author, permlink=permlink)
assert len(result) == 1, 'invalid author/permlink or post not found in cache'
......@@ -153,10 +144,10 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='',
if sort == 'trending':
sql = SQL_TEMPLATE + """ 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 hp.sc_trend DESC, hp.id LIMIT :limit """
elif sort == 'hot':
sql = SQL_TEMPLATE + """ 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 hp.sc_hot DESC, hp.id LIMIT :limit """
elif sort == 'created':
sql = SQL_TEMPLATE + """ hp.depth = 0 AND NOT hp.is_deleted AND NOT hp.is_grayed
%s ORDER BY hp.created_at DESC, hp.id LIMIT :limit """
......@@ -165,7 +156,7 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='',
AND NOT hp.is_paidout %s ORDER BY hp.promoted DESC, hp.id LIMIT :limit """
elif sort == 'payout':
sql = SQL_TEMPLATE + """ NOT hp.is_paidout AND NOT hp.is_deleted %s
AND payout_at BETWEEN now() + interval '12 hours' AND now() + interval '36 hours'
AND hp.payout_at BETWEEN now() + interval '12 hours' AND now() + interval '36 hours'
ORDER BY hp.payout DESC, hp.id LIMIT :limit """
elif sort == 'payout_comments':
sql = SQL_TEMPLATE + """ NOT hp.is_paidout AND NOT hp.is_deleted AND hp.depth > 0
......@@ -203,16 +194,16 @@ async def get_ranked_posts(context, sort, start_author='', start_permlink='',
if start_author and start_permlink:
sql = sql % """ AND hp.community_id = (SELECT hive_communities.id FROM hive_communities WHERE name = :community_name ) """
else:
sql = sql % """ AND hive_communities.name = :community_name """
sql = sql % """ AND hp.community_name = :community_name """
if sort == 'trending' or sort == 'created':
pinned_sql = SQL_TEMPLATE + """ is_pinned AND hive_communities.name = :community_name ORDER BY hp.created_at DESC """
pinned_sql = SQL_TEMPLATE + """ hp.is_pinned AND hp.community_name = :community_name ORDER BY hp.created_at DESC """
else:
if sort in ['payout', 'payout_comments']:
sql = sql % """ AND hp.category = :tag """
else:
sql = sql % """ AND htd.tag = :tag """
sql = sql % """ AND hp.tag = :tag """
if not observer:
observer = ''
......@@ -302,11 +293,11 @@ async def get_account_posts(context, sort, account, start_author='', start_perml
post['reblogged_by'] = [account]
return posts
elif sort == 'posts':
sql = sql % """ ha_a.name = :account AND NOT hp.is_deleted AND hp.depth = 0 %s ORDER BY hp.id DESC LIMIT :limit"""
sql = sql % """ hp.author = :account AND NOT hp.is_deleted AND hp.depth = 0 %s ORDER BY hp.id DESC LIMIT :limit"""
elif sort == 'comments':
sql = sql % """ ha_a.name = :account AND NOT hp.is_deleted AND hp.depth > 0 %s ORDER BY hp.id DESC, depth LIMIT :limit"""
sql = sql % """ hp.author = :account AND NOT hp.is_deleted AND hp.depth > 0 %s ORDER BY hp.id DESC, hp.depth LIMIT :limit"""
elif sort == 'payout':
sql = sql % """ ha_a.name = :account AND NOT hp.is_deleted AND NOT hp.is_paidout %s ORDER BY payout DESC, hp.id LIMIT :limit"""
sql = sql % """ hp.author = :account AND NOT hp.is_deleted AND NOT hp.is_paidout %s ORDER BY hp.payout DESC, hp.id LIMIT :limit"""
elif sort == 'feed':
res = await cursor.pids_by_feed_with_reblog(db, account, *start, limit)
return await load_posts_reblogs(context['db'], res)
......
......@@ -41,7 +41,7 @@ SQL_TEMPLATE = """
hp.created_at,
hp.updated_at,
hp.rshares,
hp.json as json,
hp.json,
hp.is_hidden,
hp.is_grayed,
hp.total_votes,
......@@ -226,9 +226,9 @@ async def get_discussions_by(discussion_type, context, start_author: str = '',
sql = sql + """ NOT hp.is_deleted """
if discussion_type == 'trending':
sql = sql + """ AND NOT hp.is_paidout %s ORDER BY sc_trend DESC LIMIT :limit """
sql = sql + """ AND NOT hp.is_paidout %s ORDER BY hp.sc_trend DESC LIMIT :limit """
elif discussion_type == 'hot':
sql = sql + """ AND NOT hp.is_paidout %s ORDER BY sc_hot DESC LIMIT :limit """
sql = sql + """ AND NOT hp.is_paidout %s ORDER BY hp.sc_hot DESC LIMIT :limit """
elif discussion_type == 'created':
sql = sql + """ AND hp.depth = 0 %s ORDER BY hp.created_at DESC LIMIT :limit """
elif discussion_type == 'promoted':
......@@ -433,7 +433,7 @@ async def get_discussions_by_comments(context, start_author: str = None, start_p
"""
sql += """
ORDER BY hp.id DESC, depth LIMIT :limit
ORDER BY hp.id DESC, hp.depth LIMIT :limit
"""
posts = []
......
......@@ -3,48 +3,43 @@ from hive.server.common.helpers import return_error_info, valid_limit, valid_acc
from hive.server.common.objects import condenser_post_object
SQL_TEMPLATE = """
SELECT hp.id,
SELECT
hp.id,
hp.community_id,
ha_a.name as author,
hpd_p.permlink as permlink,
(SELECT title FROM hive_post_data WHERE hive_post_data.id = hp.id) as title,
(SELECT body FROM hive_post_data WHERE hive_post_data.id = hp.id) as body,
(SELECT category FROM hive_category_data WHERE hive_category_data.id = hp.category_id) as category,
depth,
promoted,
payout,
payout_at,
is_paidout,
children,
(0) as votes,
hp.author,
hp.permlink,
hp.title,
hp.body,
hp.category,
hp.depth,
hp.promoted,
hp.payout,
hp.payout_at,
hp.is_paidout,
hp.children,
hp.votes,
hp.created_at,
updated_at,
rshares,
(SELECT json FROM hive_post_data WHERE hive_post_data.id = hp.id) as json,
is_hidden,
is_grayed,
total_votes,
flag_weight,
ha_pa.name as parent_author,
hpd_pp.permlink as parent_permlink,
curator_payout_value,
ha_ra.name as root_author,
hpd_rp.permlink as root_permlink,
max_accepted_payout,
percent_hbd,
allow_replies,
allow_votes,
allow_curation_rewards,
beneficiaries,
url,
root_title
FROM hive_posts hp
INNER JOIN hive_accounts ha_a ON ha_a.id = hp.author_id
INNER JOIN hive_permlink_data hpd_p ON hpd_p.id = hp.permlink_id
INNER JOIN hive_accounts ha_pa ON ha_pa.id = hp.parent_author_id
INNER JOIN hive_permlink_data hpd_pp ON hpd_pp.id = hp.parent_permlink_id
INNER JOIN hive_accounts ha_ra ON ha_ra.id = hp.root_author_id
INNER JOIN hive_permlink_data hpd_rp ON hpd_rp.id = hp.root_permlink_id
hp.updated_at,
hp.rshares,
hp.json,
hp.is_hidden,
hp.is_grayed,
hp.total_votes,
hp.flag_weight,
hp.parent_author,
hp.parent_permlink,
hp.curator_payout_value,
hp.root_author,
hp.root_permlink,
hp.max_accepted_payout,
hp.percent_hbd,
hp.allow_replies,
hp.allow_votes,
hp.allow_curation_rewards,
hp.beneficiaries,
hp.url,
hp.root_title
FROM vw_hive_posts hp
WHERE
"""
......@@ -137,7 +132,7 @@ async def list_comments(context, start: list, limit: int, order: str):
post_id = await get_post_id_by_author_and_permlink(db, child_author, child_permlink, 1)
sql = str(SQL_TEMPLATE)
sql += "ha_pa.name >= :parent_author AND hp.updated_at >= :updated_at AND hp.id >= :post_id ORDER BY ha_pa.name ASC, updated_at ASC, hp.id ASC LIMIT :limit"
sql += "hp.parent_author >= :parent_author AND hp.updated_at >= :updated_at AND hp.id >= :post_id ORDER BY hp.parent_author ASC, hp.updated_at ASC, hp.id ASC LIMIT :limit"
result = await db.query_all(sql, parent_author=start[0], updated_at=start[1], post_id=post_id, limit=limit)
for row in result:
......@@ -156,7 +151,7 @@ async def list_comments(context, start: list, limit: int, order: str):
post_id = await get_post_id_by_author_and_permlink(db, author, permlink, 1)
sql = str(SQL_TEMPLATE)
sql += "ha_a.name >= :author AND hp.updated_at >= :updated_at AND hp.id >= :post_id ORDER BY ha_a.name ASC, hp.updated_at ASC, hp.id ASC LIMIT :limit"
sql += "hp.author >= :author AND hp.updated_at >= :updated_at AND hp.id >= :post_id ORDER BY hp.author ASC, hp.updated_at ASC, hp.id ASC LIMIT :limit"
result = await db.query_all(sql, author=start[0], updated_at=start[1], post_id=post_id, limit=limit)
for row in result:
......@@ -181,7 +176,7 @@ async def find_comments(context, start: list, limit: int, order: str):
for arg in start:
if idx > 0:
sql += " OR "
sql += "(ha_a.name = '{}' AND hpd_p.permlink = '{}')".format(arg[0], arg[1])
sql += "(hp.author = '{}' AND hp.permlink = '{}')".format(arg[0], arg[1])
idx += 1
result = await db.query_all(sql)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment