Ignore design docs when using _all_docs
This stops design docs from being returns when using the special
all_docs index
diff --git a/src/mango_cursor_view.erl b/src/mango_cursor_view.erl
index 302acd3..2918a2d 100644
--- a/src/mango_cursor_view.erl
+++ b/src/mango_cursor_view.erl
@@ -20,6 +20,7 @@
-export([
handle_message/2,
+ handle_all_docs_message/2,
composite_indexes/2,
choose_best_index/2
]).
@@ -85,11 +86,12 @@
include_docs = true
},
Args = apply_opts(Cursor#cursor.opts, BaseArgs),
- CB = fun ?MODULE:handle_message/2,
{ok, LastCursor} = case mango_idx:def(Idx) of
all_docs ->
+ CB = fun ?MODULE:handle_all_docs_message/2,
fabric:all_docs(Db, CB, Cursor, Args);
_ ->
+ CB = fun ?MODULE:handle_message/2,
% Normal view
DDoc = ddocid(Idx),
Name = mango_idx:name(Idx),
@@ -170,6 +172,15 @@
{error, Reason}.
+handle_all_docs_message({row, Props}, Cursor) ->
+ case is_design_doc(Props) of
+ true -> {ok, Cursor};
+ false -> handle_message({row, Props}, Cursor)
+ end;
+handle_all_docs_message(Message, Cursor) ->
+ handle_message(Message, Cursor).
+
+
handle_doc(#cursor{skip = S} = C, _) when S > 0 ->
{ok, C#cursor{skip = S - 1}};
handle_doc(#cursor{limit = L} = C, Doc) when L > 0 ->
@@ -254,3 +265,9 @@
Else
end
end.
+
+is_design_doc(RowProps) ->
+ case couch_util:get_value(id, RowProps) of
+ <<"_design/", _/binary>> -> true;
+ _ -> false
+ end.
\ No newline at end of file
diff --git a/test/02-basic-find-test.py b/test/02-basic-find-test.py
index c7eb348..e634ce9 100644
--- a/test/02-basic-find-test.py
+++ b/test/02-basic-find-test.py
@@ -237,8 +237,8 @@
def test_empty(self):
docs = self.db.find({})
- # 15 users and 9 design docs
- assert len(docs) == 24
+ # 15 users
+ assert len(docs) == 15
def test_empty_subsel(self):
docs = self.db.find({
diff --git a/test/11-ignore-design-docs.py b/test/11-ignore-design-docs.py
new file mode 100644
index 0000000..ea7165e
--- /dev/null
+++ b/test/11-ignore-design-docs.py
@@ -0,0 +1,39 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+import mango
+import unittest
+
+DOCS = [
+ {
+ "_id": "_design/my-design-doc",
+ },
+ {
+ "_id": "54af50626de419f5109c962f",
+ "user_id": 0,
+ "age": 10,
+ "name": "Jimi"
+ },
+ {
+ "_id": "54af50622071121b25402dc3",
+ "user_id": 1,
+ "age": 11,
+ "name": "Eddie"
+ }
+]
+
+class IgnoreDesignDocsForAllDocsIndexTests(mango.DbPerClass):
+ def test_should_not_return_design_docs(self):
+ self.db.save_docs(DOCS)
+ docs = self.db.find({"_id": {"$gte": None}})
+ assert len(docs) == 2
+