@@ -811,22 +811,22 @@ purge_docs(Db, PurgeReqs) ->
811811 FDIs = couch_db_engine :open_docs (Db , Ids ),
812812 USeq = couch_db_engine :get_update_seq (Db ),
813813
814- IdFDIs = lists :zip (Ids , FDIs ),
814+ IdFDIs = maps : from_list ( lists :zip (Ids , FDIs ) ),
815815 {NewIdFDIs , Replies } = apply_purge_reqs (PurgeReqs , IdFDIs , USeq , []),
816816
817- Pairs = lists :flatmap (
818- fun ({ DocId , OldFDI }) ->
819- { DocId , NewFDI } = lists : keyfind (DocId , 1 , NewIdFDIs ),
820- case { OldFDI , NewFDI } of
821- { not_found , not_found } ->
822- [] ;
823- {# full_doc_info {} = A , # full_doc_info {} = A } ->
824- [];
825- { # full_doc_info {}, _ } ->
826- [{ OldFDI , NewFDI }]
827- end
828- end ,
829- IdFDIs
817+ Pairs = lists :sort (
818+ maps : fold (
819+ fun (DocId , OldFDI , Acc ) ->
820+ #{ DocId : = NewFDI } = NewIdFDIs ,
821+ case { OldFDI , NewFDI } of
822+ { not_found , not_found } -> Acc ;
823+ {# full_doc_info {} = A , # full_doc_info {} = A } -> Acc ;
824+ { # full_doc_info {}, _ } -> [{ OldFDI , NewFDI } | Acc ]
825+ end
826+ end ,
827+ [],
828+ IdFDIs
829+ )
830830 ),
831831
832832 PSeq = couch_db_engine :get_purge_seq (Db ),
@@ -850,7 +850,7 @@ apply_purge_reqs([], IdFDIs, _USeq, Replies) ->
850850 {IdFDIs , lists :reverse (Replies )};
851851apply_purge_reqs ([Req | RestReqs ], IdFDIs , USeq , Replies ) ->
852852 {_UUID , DocId , Revs } = Req ,
853- { value , { _ , FDI0 }, RestIdFDIs } = lists : keytake ( DocId , 1 , IdFDIs ) ,
853+ #{ DocId : = FDI0 } = IdFDIs ,
854854 {NewFDI , RemovedRevs , NewUSeq } =
855855 case FDI0 of
856856 # full_doc_info {rev_tree = Tree } ->
@@ -888,9 +888,8 @@ apply_purge_reqs([Req | RestReqs], IdFDIs, USeq, Replies) ->
888888 % Not found means nothing to change
889889 {not_found , [], USeq }
890890 end ,
891- NewIdFDIs = [{DocId , NewFDI } | RestIdFDIs ],
892891 NewReplies = [{ok , RemovedRevs } | Replies ],
893- apply_purge_reqs (RestReqs , NewIdFDIs , NewUSeq , NewReplies ).
892+ apply_purge_reqs (RestReqs , IdFDIs #{ DocId : = NewFDI } , NewUSeq , NewReplies ).
894893
895894update_time_seq (# db {time_seq = TSeq } = Db , Seq ) when is_integer (Seq ) ->
896895 Timestamp = couch_time_seq :timestamp (),
0 commit comments