From b30755718242d5f19935316c49c525fb7e52f98d Mon Sep 17 00:00:00 2001 From: root Date: Wed, 14 Jun 2017 17:47:18 +0000 Subject: [PATCH] add simple pagination to get_asset_holders --- libraries/app/api.cpp | 16 +++++++++++++++- libraries/app/include/graphene/app/api.hpp | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index d346e121..b7e37705 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -625,16 +625,25 @@ namespace graphene { namespace app { asset_api::asset_api(graphene::chain::database& db) : _db(db) { } asset_api::~asset_api() { } - vector asset_api::get_asset_holders( asset_id_type asset_id ) const { + vector asset_api::get_asset_holders( asset_id_type asset_id, uint32_t start, uint32_t limit ) const { + + FC_ASSERT(limit <= 100); const auto& bal_idx = _db.get_index_type< account_balance_index >().indices().get< by_asset_balance >(); auto range = bal_idx.equal_range( boost::make_tuple( asset_id ) ); vector result; + uint32_t total_counter = 0; + uint32_t start_counter = 0; + for( const account_balance_object& bal : boost::make_iterator_range( range.first, range.second ) ) { + //wdump((bal)); if( bal.balance.value == 0 ) continue; + + start_counter++; + if( start >= start_counter ) continue; auto account = _db.find(bal.owner); @@ -644,6 +653,11 @@ namespace graphene { namespace app { aab.amount = bal.balance.value; result.push_back(aab); + + if(total_counter >= limit) break; + + total_counter++; + } return result; diff --git a/libraries/app/include/graphene/app/api.hpp b/libraries/app/include/graphene/app/api.hpp index be511d3a..923c870b 100644 --- a/libraries/app/include/graphene/app/api.hpp +++ b/libraries/app/include/graphene/app/api.hpp @@ -305,7 +305,7 @@ namespace graphene { namespace app { asset_api(graphene::chain::database& db); ~asset_api(); - vector get_asset_holders( asset_id_type asset_id )const; + vector get_asset_holders( asset_id_type asset_id, uint32_t start, uint32_t limit )const; int get_asset_holders_count( asset_id_type asset_id )const; vector get_all_asset_holders() const;