summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2009-05-23 01:14:13 +0000
committerJohn Christopher Anderson <jchris@apache.org>2009-05-23 01:14:13 +0000
commitc41c2168f0bf0c561448962dd7573b272ce3e447 (patch)
tree696e96764adf520e2b0373c734ed0e912ee2f655
parent0292cbac7611bfa101bae29f31f9723001677752 (diff)
added an design doc option so that doc._local_seq can be available in the map view. Closes COUCHDB-346
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@777757 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--share/www/script/test/basics.js6
-rw-r--r--share/www/script/test/design_options.js16
-rw-r--r--src/couchdb/couch_db.erl6
-rw-r--r--src/couchdb/couch_doc.erl2
-rw-r--r--src/couchdb/couch_httpd.erl2
-rw-r--r--src/couchdb/couch_httpd_db.erl3
-rw-r--r--src/couchdb/couch_view_updater.erl13
7 files changed, 42 insertions, 6 deletions
diff --git a/share/www/script/test/basics.js b/share/www/script/test/basics.js
index 00785dc8..39500629 100644
--- a/share/www/script/test/basics.js
+++ b/share/www/script/test/basics.js
@@ -63,6 +63,12 @@ couchTests.basics = function(debug) {
var doc = db.open(id, {revs_info:true});
T(doc._revs_info[0].status == "available");
+ // make sure you can do a seq=true option
+ var doc = db.open(id, {local_seq:true});
+ console.log(doc._local_seq)
+ T(doc._local_seq == 1);
+
+
// Create some more documents.
// Notice the use of the ok member on the return result.
T(db.save({_id:"1",a:2,b:4}).ok);
diff --git a/share/www/script/test/design_options.js b/share/www/script/test/design_options.js
index c2764b91..7bd7901a 100644
--- a/share/www/script/test/design_options.js
+++ b/share/www/script/test/design_options.js
@@ -18,16 +18,19 @@ couchTests.design_options = function(debug) {
//// test the includes_design option
var map = "function (doc) {emit(null, doc._id);}";
+ var withseq = "function(doc) {emit(doc._local_seq, null)}"
// we need a design doc even to test temp views with it
var designDoc = {
_id:"_design/fu",
language: "javascript",
options: {
- include_design: true
+ include_design: true,
+ local_seq: true
},
views: {
- data: {"map": map}
+ data: {"map": map},
+ with_seq : {"map" : withseq}
}
};
T(db.save(designDoc).ok);
@@ -60,4 +63,13 @@ couchTests.design_options = function(debug) {
T(db.save(designDoc).ok);
rows = db.view("bango/data").rows;
T(rows.length == 0);
+
+ // should also have local_seq in the view
+ var resp = db.save({});
+ rows = db.view("fu/with_seq").rows;
+ T(rows[0].key == 1)
+ T(rows[1].key == 2)
+ var doc = db.open(resp.id);
+ db.deleteDoc(doc);
+ console.log(resp)
};
diff --git a/src/couchdb/couch_db.erl b/src/couchdb/couch_db.erl
index 82231924..29dbbd38 100644
--- a/src/couchdb/couch_db.erl
+++ b/src/couchdb/couch_db.erl
@@ -820,7 +820,7 @@ open_doc_int(Db, Id, Options) ->
{not_found, missing}
end.
-doc_meta_info(#doc_info{revs=[#rev_info{rev=Rev}|RestInfo]}, RevTree, Options) ->
+doc_meta_info(#doc_info{high_seq=Seq,revs=[#rev_info{rev=Rev}|RestInfo]}, RevTree, Options) ->
case lists:member(revs_info, Options) of
false -> [];
true ->
@@ -851,6 +851,10 @@ doc_meta_info(#doc_info{revs=[#rev_info{rev=Rev}|RestInfo]}, RevTree, Options) -
[] -> [];
DelConflictRevs -> [{deleted_conflicts, DelConflictRevs}]
end
+ end ++
+ case lists:member(local_seq, Options) of
+ false -> [];
+ true -> [{local_seq, Seq}]
end.
diff --git a/src/couchdb/couch_doc.erl b/src/couchdb/couch_doc.erl
index 906a5725..f3a003e1 100644
--- a/src/couchdb/couch_doc.erl
+++ b/src/couchdb/couch_doc.erl
@@ -56,6 +56,8 @@ to_json_meta(Meta) ->
{JsonObj, PosAcc - 1}
end, Start, RevsInfo),
{<<"_revs_info">>, JsonRevsInfo};
+ ({local_seq, Seq}) ->
+ {<<"_local_seq">>, Seq};
({conflicts, Conflicts}) ->
{<<"_conflicts">>, rev_to_strs(Conflicts)};
({deleted_conflicts, DConflicts}) ->
diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl
index 34a13c88..457ab519 100644
--- a/src/couchdb/couch_httpd.erl
+++ b/src/couchdb/couch_httpd.erl
@@ -179,7 +179,7 @@ handle_request(MochiReq, DefaultFun,
send_error(HttpReq, Error);
Tag:Error ->
?LOG_ERROR("Uncaught error in HTTP request: ~p",[{Tag, Error}]),
- ?LOG_DEBUG("Stacktrace: ~p",[erlang:get_stacktrace()]),
+ ?LOG_INFO("Stacktrace: ~p",[erlang:get_stacktrace()]),
send_error(HttpReq, Error)
end,
diff --git a/src/couchdb/couch_httpd_db.erl b/src/couchdb/couch_httpd_db.erl
index 666f1bef..04f178d5 100644
--- a/src/couchdb/couch_httpd_db.erl
+++ b/src/couchdb/couch_httpd_db.erl
@@ -801,6 +801,9 @@ parse_doc_query(Req) ->
{"revs", "true"} ->
Options = [revs | Args#doc_query_args.options],
Args#doc_query_args{options=Options};
+ {"local_seq", "true"} ->
+ Options = [local_seq | Args#doc_query_args.options],
+ Args#doc_query_args{options=Options};
{"revs_info", "true"} ->
Options = [revs_info | Args#doc_query_args.options],
Args#doc_query_args{options=Options};
diff --git a/src/couchdb/couch_view_updater.erl b/src/couchdb/couch_view_updater.erl
index c06e733e..f5b17b37 100644
--- a/src/couchdb/couch_view_updater.erl
+++ b/src/couchdb/couch_view_updater.erl
@@ -97,11 +97,20 @@ process_doc(Db, DocInfo, {Docs, #group{sig=Sig,name=GroupId,design_options=Desig
#doc_info{id=DocId, revs=[#rev_info{deleted=Deleted}|_]} = DocInfo,
IncludeDesign = proplists:get_value(<<"include_design">>,
DesignOptions, false),
+ LocalSeq = proplists:get_value(<<"local_seq">>,
+ DesignOptions, false),
+ DocOpts = case LocalSeq of
+ true ->
+ [conflicts, deleted_conflicts, local_seq];
+ _ ->
+ [conflicts, deleted_conflicts]
+ end,
+ ?LOG_ERROR("DocOpts ~p LocalSeq ~p",[DocOpts, LocalSeq]),
case {IncludeDesign, DocId} of
{_, GroupId} ->
% uh oh. this is the design doc with our definitions. See if
% anything in the definition changed.
- case couch_db:open_doc_int(Db, DocInfo, [conflicts, deleted_conflicts]) of
+ case couch_db:open_doc_int(Db, DocInfo, DocOpts) of
{ok, Doc} ->
case couch_view_group:design_doc_to_view_group(Doc) of
#group{sig=Sig} ->
@@ -126,7 +135,7 @@ process_doc(Db, DocInfo, {Docs, #group{sig=Sig,name=GroupId,design_options=Desig
{Docs, [{DocId, []} | DocIdViewIdKeys]};
true ->
{ok, Doc} = couch_db:open_doc_int(Db, DocInfo,
- [conflicts, deleted_conflicts]),
+ DocOpts),
{[Doc | Docs], DocIdViewIdKeys}
end,