I've struck a rare case where a view request with include_docs=true (but
no stale=ok and no custom _id emitted from the view) is returning a row
with doc=null.
I guess is might be possible for a document to be deleted between the
view row being processed and the doc being opened for the view result
but I don't think this is happening here - the view also emits the
document _rev, and directly after getting doc=null I can open the
specified document in futon and it has the same _rev as the view row.
Unfortunately, couch is not offering any clues about what the problem is.
I tracked the code returning null to couch_httpd_view:doc_member - it does:
case (catch couch_httpd_db:couch_doc_open(Db, DocId, Rev, [])) of
#doc{} = Doc ->
JsonDoc = couch_doc:to_json_obj(Doc, []),
[{doc, JsonDoc}];
_Else ->
[{doc, null}]
So should the doc fail to open for any reason, you just get a null and
the reason for the failure is discarded. Is this by intent? ISTM it
would be better to instead, or also, provide an {error, Reason} element
in the view row.
Does this sound desirable? If so, should an error still leave a
doc=null element, or only include the error element? Let me know and
I'll open a but and submit a patch...
Cheers,
Mark