Adam,

I'm not sure it is identical though it looks to be. I definitely would replace it as you suggest if only to simplify the code. I just posted this to give Chris a place to start and hopefully something towards the answer. I'm sure sure there are not other places that also need to change.

Thanks for noticing those glitches in the test cases, I was so thick in it I wouldn't have thought my solution was exposing something there, I just assumed I was wrong. Can't beat eyeballs

   It's a very nice piece of Elang code. I'm enjoying learning it.

Cheers,

Bob


On Jan 8, 2009, at 10:36 PM, Adam Kocoloski (JIRA) wrote:


[ https://issues.apache.org/jira/browse/COUCHDB-196? page=com.atlassian.jira.plugin.system.issuetabpanels:comment- tabpanel&focusedCommentId=12662235#action_12662235 ]

Adam Kocoloski commented on COUCHDB-196:
----------------------------------------

Hi Bob, thanks for looking into this. I'd argue for replacing that entire function with couch_view:less_json/2

diff --git a/src/couchdb/couch_db_updater.erl b/src/couchdb/ couch_db_updater.erl
index 049a354..38885f8 100644
--- a/src/couchdb/couch_db_updater.erl
+++ b/src/couchdb/couch_db_updater.erl
@@ -253,13 +253,8 @@ init_db(DbName, Filepath, Fd, Header0) ->
     Header = simple_upgrade_record(Header0, #db_header{}),
{ok, SummaryStream} = couch_stream:open (Header#db_header.summary_stream_state, Fd),
     ok = couch_stream:set_min_buffer(SummaryStream, 10000),
-    Less =
-        fun(A,B) when A==B -> false;
-        (nil, _) -> true; % nil - special key sorts before all
-        ({}, _) -> false; % {} -> special key sorts after all
-        (A, B) -> A < B
-        end,
-
+    Less = fun couch_view:less_json/2,
+
{ok, IdBtree} = couch_btree:open (Header#db_header.fulldocinfo_by_id_btree_state, Fd,
         [{split, fun(X) -> btree_by_id_split(X) end},
         {join, fun(X,Y) -> btree_by_id_join(X,Y) end},


The DB behavior seems to be the same either way, and the fewer places we have this collaction algorithm coded up the better. I looked into the 2 test suite failures that show up as a result of applying either of these patches. The failure in design docs occurs because the test suite expects to find the document "_design/ test" in the _all_docs view between "_design%2F" and "_design% 2FZZZ". That expectation is erroneous. I'm not sure why it worked before.

The second failure occurs in view_include_docs where an _all_docs view is queried with limit=2&skip=1. In the trunk code _design docs sort after docs with stringified integers for ids. Your patch causes the _design docs to sort first, which I believe is the correct behavior. Again, the test suite's expectation is probably wrong.


Bug in _all_docs: extra incorrect row returned when ?key= is specified --------------------------------------------------------------------- -

                Key: COUCHDB-196
URL: https://issues.apache.org/jira/browse/ COUCHDB-196
            Project: CouchDB
         Issue Type: Bug
         Components: HTTP Interface
           Reporter: Jason Davies
Attachments: collation_ids.diff, collation_test.2.diff, collation_test.diff, couch_db_updater.diff, view_coll.js


I first noticed this when attempting to reverse the order of docs displayed in Futon, when listing the design docs. When the order is reversed, non-design docs are displayed. After digging deeper I discovered that querying _all_docs with key="Z" can potentially return two rows, with keys "Z" and "a". I will attach a test case to reproduce this. My locale is set to en_GB.UTF-8, which could be related to this problem.

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Reply via email to