ecouchdbkit, parse incoming views delete lock Revision 613962366439 (Wed Jul 29 2009 at 17:47) - Diff Link to this snippet: https://friendpaste.com/uBCLsn8wk02wTjae3eDMO Embed: manni perldoc borland colorful default murphy trac fruity autumn bw emacs pastie friendly Show line numbers Wrap lines 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081#!/usr/bin/env escript%% -*- erlang -*-%%! -pa ./ebinparse_view_head(Data) -> {Data1, end_chunk} = Data, try ecouchdbkit_util:split(Data1, "\r\n") of [_Head, _, FirstRow] -> FirstRow1 = decode_row(FirstRow), Head1 = lists:append([binary_to_list(Data1), "]}"]), io:format("we just get head and first row ~n", []), case ecouchdbkit:json_decode(Head1) of {[{<<"rows">>, _}]} -> {nil, nil, [FirstRow1], []}; {[{<<"total_rows">>, TotalRows}, {<<"offset">>, Offset}|_]} -> {TotalRows, Offset, [FirstRow1], []} end catch _:_ -> [ecouchdbkit:json_decode(Data)] end. decode_row(<<",\r\n",Rest/binary>>) -> decode_row(Rest);decode_row(Row) -> ecouchdbkit:json_decode(Row). view_row(Data, Acc) -> case Data of <<"\r\n]}">> -> Acc; <<"\n">> -> Acc; _ -> io:format("we just get a row ~n", []), case Acc of {TotalRows, Offset, Rows, Acc1} -> [Row] = [Data|Acc1], Row1 = decode_row(Row), {TotalRows, Offset, [Row1|Rows], []}; _Acc2 -> [Data|Acc] end end.end_view(Acc) -> io:format("end of view ~n", []), case Acc of {TotalRows, Offset, Rows, _Rest} -> {TotalRows, Offset, lists:reverse(Rows)}; _Acc2 -> iolist_to_binary(lists:reverse([Acc])) end.main(_) -> Res = ecouchdbkit:query_view({"benoitc.im", 80}, "b", "blog", "recent-posts", [{"limit", "2"}]), io:format("res view ~p ~n", [Res]), F = fun(Data, Acc) -> case Acc of head -> parse_view_head(Data); _ -> case Data of {[], done} -> end_view(Acc); {Data1, end_chunk} -> view_row(Data1, Acc); _ -> case Acc of {TotalRows, Offset, Rows, Acc1} -> {TotalRows, Offset, Rows, [Data|Acc1]}; _ -> [Data|Acc] end end end end, {raw, Res1} = ecouchdbkit:query_view({"benoitc.im", 80}, "b", "blog", "recent-posts", [{"limit", "2"}], {F, head}), io:format("res view ~p ~n", [Res1]), ok.