wip
diff --git a/.rebar/erlcinfo b/.rebar/erlcinfo
new file mode 100644
index 0000000..cb59648
--- /dev/null
+++ b/.rebar/erlcinfo
Binary files differ
diff --git a/src/mango_cursor.erl b/src/mango_cursor.erl
index 9860c31..a9967f3 100644
--- a/src/mango_cursor.erl
+++ b/src/mango_cursor.erl
@@ -31,15 +31,38 @@
create(Db, Selector0, Opts) ->
Selector = mango_selector:normalize(Selector0),
- UsableIndexes = mango_util:get_usable_indexes(Db, Selector0, Opts),
- io:format("UsableIndexes ~p~n", [UsableIndexes]),
+ %UsableIndexes = mango_util:get_usable_indexes(Db, Selector0, Opts),
- case length(UsableIndexes) of
- 0 ->
+ ExistingIndexes = mango_idx:list(Db),
+ if ExistingIndexes /= [] -> ok; true ->
+ ?MANGO_ERROR({no_usable_index, no_indexes_defined})
+ end,
+
+ FilteredIndexes = maybe_filter_indexes(ExistingIndexes, Opts),
+ if FilteredIndexes /= [] -> ok; true ->
+ ?MANGO_ERROR({no_usable_index, no_index_matching_name})
+ end,
+
+ SortIndexes = mango_idx:for_sort(FilteredIndexes, Opts),
+ if SortIndexes /= [] -> ok; true ->
+ ?MANGO_ERROR({no_usable_index, missing_sort_index})
+ end,
+
+ UsableFilter = fun(I) -> mango_idx:is_usable(I, Selector) end,
+ UsableIndexes = lists:filter(UsableFilter, SortIndexes),
+
+ {use_index, IndexSpecified} = proplists:lookup(use_index, Opts),
+ case {length(UsableIndexes), length(IndexSpecified)} of
+ {0, 1} ->
+ io:format("UsableIndexesAllDocs ~p~n", [{0, 1}]),
+
+ create_cursor(Db, UsableIndexes, Selector, Opts);
+ {0, 0} ->
AllDocs = mango_idx:special(Db),
- io:format("UsableIndexesAllDocs ~p~n", [AllDocs]),
+ io:format("UsableIndexesAllDocs ~p~n", [{0, 0}]),
create_cursor(Db, AllDocs, Selector, Opts);
_ ->
+ io:format("UsableIndexesAllDocs ~p~n", ["_"]),
create_cursor(Db, UsableIndexes, Selector, Opts)
end.