.. 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. .. default-domain:: js .. _query-server/erlang: ====== Erlang ====== .. note:: The Erlang query server is disabled by default. Read :ref:`configuration guide ` about reasons why and how to enable it. .. function:: Emit(Id, Value) Emits `key`-`value` pairs to view indexer process. .. code-block:: erlang fun({Doc}) -> <> = proplists:get_value(<<"_rev">>, Doc, null), V = proplists:get_value(<<"_id">>, Doc, null), Emit(<>, V) end. .. function:: FoldRows(Fun, Acc) Helper to iterate over all rows in a list function. :param Fun: Function object. :param Acc: The value previously returned by `Fun`. .. code-block:: erlang fun(Head, {Req}) -> Fun = fun({Row}, Acc) -> Id = couch_util:get_value(<<"id">>, Row), Send(list_to_binary(io_lib:format("Previous doc id: ~p~n", [Acc]))), Send(list_to_binary(io_lib:format("Current doc id: ~p~n", [Id]))), {ok, Id} end, FoldRows(Fun, nil), "" end. .. function:: GetRow() Retrieves the next row from a related view result. .. code-block:: erlang %% FoldRows background implementation. %% https://git-wip-us.apache.org/repos/asf?p=couchdb.git;a=blob;f=src/couchdb/couch_native_process.erl;hb=HEAD#l368 %% foldrows(GetRow, ProcRow, Acc) -> case GetRow() of nil -> {ok, Acc}; Row -> case (catch ProcRow(Row, Acc)) of {ok, Acc2} -> foldrows(GetRow, ProcRow, Acc2); {stop, Acc2} -> {ok, Acc2} end end. .. function:: Log(Msg) :param Msg: Log a message at the `INFO` level. .. code-block:: erlang fun({Doc}) -> <> = proplists:get_value(<<"_rev">>, Doc, null), V = proplists:get_value(<<"_id">>, Doc, null), Log(lists:flatten(io_lib:format("Hello from ~s doc!", [V]))), Emit(<>, V) end. After the map function has run, the following line can be found in CouchDB logs (e.g. at `/var/log/couchdb/couch.log`): .. code-block:: text [Sun, 04 Nov 2012 11:33:58 GMT] [info] [<0.9144.2>] Hello from 8d300b86622d67953d102165dbe99467 doc! .. function:: Send(Chunk) Sends a single string `Chunk` in response. .. code-block:: erlang fun(Head, {Req}) -> Send("Hello,"), Send(" "), Send("Couch"), "!" end. The function above produces the following response: .. code-block:: text Hello, Couch! .. function:: Start(Headers) :param Headers: Proplist of :ref:`response object`. Initialize :ref:`listfun` response. At this point, response code and headers may be defined. For example, this function redirects to the CouchDB web site: .. code-block:: erlang fun(Head, {Req}) -> Start({[{<<"code">>, 302}, {<<"headers">>, {[ {<<"Location">>, <<"http://couchdb.apache.org">>}] }} ]}), "Relax!" end.