diff --git a/hive/indexer/blocks.py b/hive/indexer/blocks.py index 6085b27ef63f437d60b585cf70b72a2f81856bd3..ceb9c3e5fdf68d6fb2a7b35bac85473582051d3a 100644 --- a/hive/indexer/blocks.py +++ b/hive/indexer/blocks.py @@ -207,7 +207,7 @@ class Blocks: if not is_initial_sync: Accounts.dirty(op['author']) # lite - rep Accounts.dirty(op['voter']) # lite - stats - Votes.vote_op(op) + Votes.vote_op(op, cls._head_block_date) # misc ops elif op_type == 'transfer_operation': diff --git a/hive/indexer/posts.py b/hive/indexer/posts.py index 10b1da8dde28153b14fd6d7fb541a2aeaafdcbb9..36759eb1855eadd4c42dcb3bfa9d3840f4513145 100644 --- a/hive/indexer/posts.py +++ b/hive/indexer/posts.py @@ -161,7 +161,6 @@ class Posts: payout = COALESCE( CAST( data_source.payout as DECIMAL ), ihp.payout ), pending_payout = COALESCE( CAST( data_source.pending_payout as DECIMAL ), ihp.pending_payout ), payout_at = COALESCE( CAST( data_source.payout_at as TIMESTAMP ), ihp.payout_at ), - updated_at = data_source.updated_at, last_payout = COALESCE( CAST( data_source.last_payout as TIMESTAMP ), ihp.last_payout ), cashout_time = COALESCE( CAST( data_source.cashout_time as TIMESTAMP ), ihp.cashout_time ), is_paidout = COALESCE( CAST( data_source.is_paidout as BOOLEAN ), ihp.is_paidout ) @@ -177,7 +176,6 @@ class Posts: t.payout, t.pending_payout, t.payout_at, - t.updated_at, t.last_payout, t.cashout_time, t.is_paidout @@ -196,7 +194,6 @@ class Posts: payout, pending_payout, payout_at, - updated_at, last_payout, cashout_time, is_paidout) @@ -310,7 +307,7 @@ class Posts: payout_at = date #Here should be `cashout_time` last_payout = date - cls._comment_payout_ops.append("('{}', '{}', {}, {}, {}, {}, {}, {}, {}, {}, {}, '{}'::timestamp, {}, {}, {})".format( + cls._comment_payout_ops.append("('{}', '{}', {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {})".format( author, permlink, "NULL" if ( total_payout_value is None ) else ( "'{}'".format( legacy_amount(total_payout_value) ) ), @@ -323,7 +320,6 @@ class Posts: "NULL" if ( pending_payout is None ) else pending_payout, "NULL" if ( payout_at is None ) else ( "'{}'::timestamp".format( payout_at ) ), - date,#updated_at "NULL" if ( last_payout is None ) else ( "'{}'::timestamp".format( last_payout ) ), "NULL" if ( cashout_time is None ) else ( "'{}'::timestamp".format( cashout_time ) ), diff --git a/hive/indexer/votes.py b/hive/indexer/votes.py index 63b7d019f0c8c14b554534f4004844d5eccfa35a..312b0820cc2afe5260dd2b04b1131d0c0c583219 100644 --- a/hive/indexer/votes.py +++ b/hive/indexer/votes.py @@ -49,11 +49,12 @@ class Votes: inside_flush = False @classmethod - def vote_op(cls, vop): + def vote_op(cls, vote_operation, date): """ Process vote_operation """ - voter = vop['voter'] - author = vop['author'] - permlink = vop['permlink'] + voter = vote_operation['voter'] + author = vote_operation['author'] + permlink = vote_operation['permlink'] + weight = vote_operation['weight'] if(cls.inside_flush): log.info("Adding new vote-info into '_votes_data' dict") @@ -64,10 +65,10 @@ class Votes: cls._votes_data[key] = dict(voter=voter, author=author, permlink=permlink, - vote_percent=0, + vote_percent=weight, weight=0, rshares=0, - last_update="1969-12-31T23:59:59") + last_update=date) @classmethod def effective_comment_vote_op(cls, key, vop, date): @@ -79,7 +80,6 @@ class Votes: assert key in cls._votes_data - cls._votes_data[key]["vote_percent"] = vop["vote_percent"] cls._votes_data[key]["weight"] = vop["weight"] cls._votes_data[key]["rshares"] = vop["rshares"] cls._votes_data[key]["last_update"] = date @@ -90,33 +90,29 @@ class Votes: cls.inside_flush = True if cls._votes_data: sql = """ - INSERT INTO hive_votes - (post_id, voter_id, author_id, permlink_id, weight, rshares, vote_percent, last_update) - select data_source.post_id, data_source.voter_id, data_source.author_id, data_source.permlink_id, data_source.weight, data_source.rshares, data_source.vote_percent, data_source.last_update - from - ( - SELECT hp.id as post_id, ha_v.id as voter_id, ha_a.id as author_id, hpd_p.id as permlink_id, t.weight, t.rshares, t.vote_percent, t.last_update - from - ( - VALUES - -- voter, author, permlink, weight, rshares, vote_percent, last_update - {} - ) AS T(voter, author, permlink, weight, rshares, vote_percent, last_update) - INNER JOIN hive_accounts ha_v ON ha_v.name = t.voter - INNER JOIN hive_accounts ha_a ON ha_a.name = t.author - INNER JOIN hive_permlink_data hpd_p ON hpd_p.permlink = t.permlink - INNER JOIN hive_posts hp ON hp.author_id = ha_a.id AND hp.permlink_id = hpd_p.id - ) as data_source(post_id, voter_id, author_id, permlink_id, weight, rshares, vote_percent, last_update) - ON CONFLICT ON CONSTRAINT hive_votes_ux1 DO - UPDATE - SET - weight = EXCLUDED.weight, - rshares = EXCLUDED.rshares, - vote_percent = EXCLUDED.vote_percent, - last_update = EXCLUDED.last_update, - num_changes = hive_votes.num_changes + 1 - WHERE hive_votes.voter_id = EXCLUDED.voter_id and hive_votes.author_id = EXCLUDED.author_id and hive_votes.permlink_id = EXCLUDED.permlink_id; - """ + INSERT INTO hive_votes + (post_id, voter_id, author_id, permlink_id, weight, rshares, vote_percent, last_update) + SELECT hp.id as post_id, ha_v.id as voter_id, ha_a.id as author_id, hpd_p.id as permlink_id, t.weight, t.rshares, t.vote_percent, t.last_update + FROM + ( + VALUES + -- voter, author, permlink, weight, rshares, vote_percent, last_update + {} + ) AS T(voter, author, permlink, weight, rshares, vote_percent, last_update) + INNER JOIN hive_accounts ha_v ON ha_v.name = t.voter + INNER JOIN hive_accounts ha_a ON ha_a.name = t.author + INNER JOIN hive_permlink_data hpd_p ON hpd_p.permlink = t.permlink + INNER JOIN hive_posts hp ON hp.author_id = ha_a.id AND hp.permlink_id = hpd_p.id + ON CONFLICT ON CONSTRAINT hive_votes_ux1 DO + UPDATE + SET + weight = (CASE (SELECT hp.is_paidout FROM hive_posts hp WHERE hp.id = EXCLUDED.post_id) WHEN true THEN hive_votes.weight ELSE EXCLUDED.weight END), + rshares = (CASE (SELECT hp.is_paidout FROM hive_posts hp WHERE hp.id = EXCLUDED.post_id) WHEN true THEN hive_votes.rshares ELSE EXCLUDED.rshares END), + vote_percent = EXCLUDED.vote_percent, + last_update = EXCLUDED.last_update, + num_changes = hive_votes.num_changes + 1 + WHERE hive_votes.voter_id = EXCLUDED.voter_id and hive_votes.author_id = EXCLUDED.author_id and hive_votes.permlink_id = EXCLUDED.permlink_id; + """ values = [] values_limit = 1000 diff --git a/tests/tests_api b/tests/tests_api index 113cb05cc2dc35fe6e6e149fc3ecb8ae286d4cc4..619f51ed6c85a016621b12fa1264c12c7d3d3156 160000 --- a/tests/tests_api +++ b/tests/tests_api @@ -1 +1 @@ -Subproject commit 113cb05cc2dc35fe6e6e149fc3ecb8ae286d4cc4 +Subproject commit 619f51ed6c85a016621b12fa1264c12c7d3d3156