diff --git a/libraries/chain/CMakeLists.txt b/libraries/chain/CMakeLists.txt index 399720fa..338e1d25 100644 --- a/libraries/chain/CMakeLists.txt +++ b/libraries/chain/CMakeLists.txt @@ -100,6 +100,7 @@ add_library( graphene_chain sport_evaluator.cpp protocol/event_group.cpp event_group_evaluator.cpp + event_group_object.cpp protocol/event.cpp event_evaluator.cpp event_object.cpp diff --git a/libraries/chain/event_group_evaluator.cpp b/libraries/chain/event_group_evaluator.cpp index 9faaf7e4..ef7ad18f 100644 --- a/libraries/chain/event_group_evaluator.cpp +++ b/libraries/chain/event_group_evaluator.cpp @@ -109,9 +109,7 @@ void_result event_group_delete_evaluator::do_apply(const event_group_delete_oper database& _db = db(); const auto& event_group = _db.get(op.event_group_id); - _db.modify(event_group, [&](event_group_object& mutable_event_group) { - mutable_event_group.cancel_events(_db); - }); + event_group.cancel_events(_db); _db.remove(event_group); return void_result(); diff --git a/libraries/chain/event_group_object.cpp b/libraries/chain/event_group_object.cpp index c9350724..0bbee3c3 100644 --- a/libraries/chain/event_group_object.cpp +++ b/libraries/chain/event_group_object.cpp @@ -6,7 +6,7 @@ namespace graphene { namespace chain { -void event_group_object::cancel_events(database& db) +void event_group_object::cancel_events(database& db) const { const auto& events_for_group = db.get_index_type().indices().get(); auto event_it = events_for_group.lower_bound(id); diff --git a/libraries/chain/include/graphene/chain/event_group_object.hpp b/libraries/chain/include/graphene/chain/event_group_object.hpp index 231bf8f0..fb2e5e05 100644 --- a/libraries/chain/include/graphene/chain/event_group_object.hpp +++ b/libraries/chain/include/graphene/chain/event_group_object.hpp @@ -42,7 +42,7 @@ class event_group_object : public graphene::db::abstract_object< event_group_obj internationalized_string_type name; sport_id_type sport_id; - void cancel_events(database& db); + void cancel_events(database& db) const; }; typedef multi_index_container< diff --git a/libraries/chain/include/graphene/chain/protocol/operations.hpp b/libraries/chain/include/graphene/chain/protocol/operations.hpp index 13b6d872..dc66917e 100644 --- a/libraries/chain/include/graphene/chain/protocol/operations.hpp +++ b/libraries/chain/include/graphene/chain/protocol/operations.hpp @@ -106,10 +106,8 @@ namespace graphene { namespace chain { tournament_leave_operation, sport_create_operation, sport_update_operation, - sport_delete_operation, event_group_create_operation, event_group_update_operation, - event_group_delete_operation, event_create_operation, event_update_operation, betting_market_rules_create_operation, @@ -126,7 +124,9 @@ namespace graphene { namespace chain { bet_canceled_operation, // VIRTUAL betting_market_group_update_operation, betting_market_update_operation, - event_update_status_operation + event_update_status_operation, + sport_delete_operation, + event_group_delete_operation > operation; /// @} // operations group diff --git a/libraries/chain/sport_evaluator.cpp b/libraries/chain/sport_evaluator.cpp index 43329e10..c073fed4 100644 --- a/libraries/chain/sport_evaluator.cpp +++ b/libraries/chain/sport_evaluator.cpp @@ -81,17 +81,22 @@ void_result sport_delete_evaluator::do_evaluate( const sport_delete_operation& o void_result sport_delete_evaluator::do_apply( const sport_delete_operation& op ) { try { database& _db = db(); + + std::vector event_groups_to_remove; const auto& event_group_by_sport_id = _db.get_index_type().indices().get(); auto event_group_it = event_group_by_sport_id.lower_bound(op.sport_id); auto event_group_end_it = event_group_by_sport_id.upper_bound(op.sport_id); for (; event_group_it != event_group_end_it; ++event_group_it) { - _db.modify(*event_group_it, [&](event_group_object& event_group) { - event_group.cancel_events(_db); - }); + event_group_it->cancel_events(_db); + event_groups_to_remove.push_back(&*event_group_it); - _db.remove(*event_group_it); + } + + for (auto event_group: event_groups_to_remove) + { + _db.remove(*event_group); } _db.remove(_db.get(op.sport_id));