diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2019-07-16 12:05:35 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2019-07-31 11:55:30 -0500 |
commit | 7a3bfe669663294ab58c015611236a00a9a041b0 (patch) | |
tree | 9e56870425be944c4ee17519656de62cb14958fa | |
parent | d42d9b75e6a8f46edad13d47aef71d0f08175ddc (diff) | |
download | couchdb-7a3bfe669663294ab58c015611236a00a9a041b0.tar.gz |
Fix more elixir tests
-rw-r--r-- | src/chttpd/src/chttpd_db.erl | 8 | ||||
-rw-r--r-- | src/couch/src/couch_att.erl | 10 | ||||
-rw-r--r-- | src/fabric/src/fabric2_db.erl | 35 |
3 files changed, 43 insertions, 10 deletions
diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl index a25204134..0c7e4d5c0 100644 --- a/src/chttpd/src/chttpd_db.erl +++ b/src/chttpd/src/chttpd_db.erl @@ -1046,7 +1046,7 @@ db_doc_req(#httpd{method='GET', mochi_req=MochiReq}=Req, Db, DocId) -> db_doc_req(#httpd{method='POST', user_ctx=Ctx}=Req, Db, DocId) -> couch_httpd:validate_referer(Req), - couch_db:validate_docid(Db, DocId), + couch_doc:validate_docid(DocId, fabric2_db:name(Db)), chttpd:validate_ctype(Req, "multipart/form-data"), Options = [{user_ctx,Ctx}], @@ -1106,7 +1106,7 @@ db_doc_req(#httpd{method='PUT', user_ctx=Ctx}=Req, Db, DocId) -> update_type = UpdateType } = parse_doc_query(Req), DbName = fabric2_db:name(Db), - couch_doc:validate_docid(DocId), + couch_doc:validate_docid(DocId, fabric2_db:name(Db)), Options = [{user_ctx, Ctx}], @@ -1667,7 +1667,7 @@ db_attachment_req(#httpd{method=Method}=Req, Db, DocId, FileNameParts) % check for the existence of the doc to handle the 404 case. couch_doc_open(Db, DocId, nil, []) end, - couch_db:validate_docid(Db, DocId), + couch_doc:validate_docid(DocId, fabric2_db:name(Db)), #doc{id=DocId}; Rev -> case fabric2_db:open_doc_revs(Db, DocId, [Rev], [{user_ctx,Ctx}]) of @@ -2030,7 +2030,7 @@ bulk_get_open_doc_revs1(Db, Props, Options, {}) -> {null, {error, Error}, Options}; DocId -> try - couch_db:validate_docid(Db, DocId), + couch_doc:validate_docid(DocId, fabric2_db:name(Db)), bulk_get_open_doc_revs1(Db, Props, Options, {DocId}) catch throw:{Error, Reason} -> {DocId, {error, {null, Error, Reason}}, Options} diff --git a/src/couch/src/couch_att.erl b/src/couch/src/couch_att.erl index d3c8966c6..2c3336291 100644 --- a/src/couch/src/couch_att.erl +++ b/src/couch/src/couch_att.erl @@ -384,8 +384,12 @@ flush(Db, DocId, Att1) -> % If we were sent a gzip'ed attachment with no % length data, we have to set it here. Att3 = case DiskLen of - undefined -> store(disk_len, AttLen, Att2); - _ -> Att2 + undefined when AttLen /= undefined -> + store(disk_len, AttLen, Att2); + undefined when is_binary(Data) -> + store(disk_len, size(Data), Att2); + _ -> + Att2 end, % If no encoding has been set, default to @@ -537,7 +541,7 @@ range_foldl(Bin1, From, To, Fun, Acc) when is_binary(Bin1) -> ReadLen = To - From, Bin2 = case Bin1 of _ when size(Bin1) < From -> <<>>; - <<_:From/binary, B2>> -> B2 + <<_:From/binary, B2/binary>> -> B2 end, Bin3 = case Bin2 of _ when size(Bin2) < ReadLen -> Bin2; diff --git a/src/fabric/src/fabric2_db.erl b/src/fabric/src/fabric2_db.erl index 711490307..3c3b7d3a5 100644 --- a/src/fabric/src/fabric2_db.erl +++ b/src/fabric/src/fabric2_db.erl @@ -897,7 +897,7 @@ get_members(SecProps) -> end. -apply_open_doc_opts(Doc, Revs, Options) -> +apply_open_doc_opts(Doc0, Revs, Options) -> IncludeRevsInfo = lists:member(revs_info, Options), IncludeConflicts = lists:member(conflicts, Options), IncludeDelConflicts = lists:member(deleted_conflicts, Options), @@ -906,7 +906,7 @@ apply_open_doc_opts(Doc, Revs, Options) -> % This revs_info becomes fairly useless now that we're % not keeping old document bodies around... Meta1 = if not IncludeRevsInfo -> []; true -> - {Pos, [Rev | RevPath]} = Doc#doc.revs, + {Pos, [Rev | RevPath]} = Doc0#doc.revs, RevPathMissing = lists:map(fun(R) -> {R, missing} end, RevPath), [{revs_info, Pos, [{Rev, available} | RevPathMissing]}] end, @@ -932,7 +932,36 @@ apply_open_doc_opts(Doc, Revs, Options) -> [{local_seq, fabric2_fdb:vs_to_seq(SeqVS)}] end, - {ok, Doc#doc{meta = Meta1 ++ Meta2 ++ Meta3 ++ Meta4}}. + Doc1 = case lists:keyfind(atts_since, 1, Options) of + {_, PossibleAncestors} -> + #doc{ + revs = DocRevs, + atts = Atts0 + } = Doc0, + RevPos = find_ancestor_rev_pos(DocRevs, PossibleAncestors), + Atts1 = lists:map(fun(Att) -> + [AttPos, Data] = couch_att:fetch([revpos, data], Att), + if AttPos > RevPos -> couch_att:store(data, Data, Att); + true -> couch_att:store(data, stub, Att) + end + end, Atts0), + Doc0#doc{atts = Atts1}; + false -> + Doc0 + end, + + {ok, Doc1#doc{meta = Meta1 ++ Meta2 ++ Meta3 ++ Meta4}}. + + +find_ancestor_rev_pos({_, []}, _PossibleAncestors) -> + 0; +find_ancestor_rev_pos(_DocRevs, []) -> + 0; +find_ancestor_rev_pos({RevPos, [RevId | Rest]}, AttsSinceRevs) -> + case lists:member({RevPos, RevId}, AttsSinceRevs) of + true -> RevPos; + false -> find_ancestor_rev_pos({RevPos - 1, Rest}, AttsSinceRevs) + end. filter_found_revs(RevInfo, Revs) -> |