anchor.diff:  func_recv_field(_Protocol) ->
       fun myer_protocol_text:recv_field/2.
   
  -loop(Protocol, Term, []) ->
  -    {ok, Term, Protocol};
  -loop(#protocol{}=P, Term, [H|T])
  -  when is_list(Term) ->
  -    case apply(H, Term ++ [P]) of % bin_opt_info(SUGGEST)
  -        {ok, List, Protocol} ->
  -            loop(Protocol, List, T);
  +loop(Args, []) ->
  +    list_to_tuple([ok|Args]);
  +loop(Args, [H|T]) ->
  +    case apply(H, Args) of
  +        {ok, List} ->
  +            loop(List, T);
  +        {error, Reason} -> % connect_pre
  +            {error, Reason};
           {error, Reason, Protocol} ->
               {error, Reason, Protocol}
       end.
  
positive.code:   when undefined =/= H ->
      case R#result.status of
          S when ?ISSET(S,?SERVER_STATUS_CURSOR_EXISTS) ->
              L = [fun stmt_fetch_pre/2, fun send/3, fun stmt_fetch_post/2],
              loop(P, [X], L);
          _ ->
              {ok, X, P}
      end.
  
negative.code:                    {ok,{[field()],[term()],result()},protocol()}|{error,_,protocol()}.
  real_query(#protocol{handle=H}=P, Query)
    when undefined =/= H, is_binary(Query) ->
      loop([Query,P], [fun real_query_pre/2, fun send/2, fun recv_status/1, fun real_query_post/2]).
  
  -spec refresh(protocol(),integer()) -> {ok,result(),protocol()}|{error,_,protocol()}.
  refresh(#protocol{handle=H}=P, Option)
    when undefined =/= H ->
      loop([Option,P], [fun refresh_pre/2, fun send/2, fun recv_status/1, fun recv_result/2]).
  
  -spec select_db(protocol(),binary()) -> {ok,result(),protocol()}|{error,_,protocol()}.
  select_db(#protocol{handle=H}=P, Database)
    when undefined =/= H, is_binary(Database) ->
      loop([Database,P], [fun select_db_pre/2, fun send/2, fun recv_status/1, fun recv_result/2]).
  
  -spec stmt_prepare(protocol(),binary()) -> {ok,prepare(),protocol()}|{error,_,protocol()}.
  stmt_prepare(#protocol{handle=H}=P, Query)
    when undefined =/= H, is_binary(Query) ->
      loop([Query,P], [fun stmt_prepare_pre/2, fun send/2, fun recv_status/1, fun stmt_prepare_post/2]).
  
  -spec stmt_close(protocol(),prepare()) -> {ok,undefined,protocol()}|{error,_,protocol()}.
  stmt_close(#protocol{handle=H}=P, #prepare{}=X)
    when undefined =/= H ->
      loop([X,P], [fun stmt_close_pre/2, fun send/3, fun stmt_close_post/2]).
  
  -spec stmt_execute(protocol(),prepare(),[term()])
                    -> {ok,prepare(),protocol()}|
                       {ok,{[field()],[term()],prepare()},protocol()}|{error,_,protocol()}.
  stmt_execute(#protocol{handle=H}=P, #prepare{param_count=N}=X, Args)
    when undefined =/= H, is_list(Args), N == length(Args) ->
      loop([X,Args,P], [fun stmt_execute_pre/3, fun send/3, fun recv_status/2, fun stmt_execute_post/3]).
  
  -spec stmt_fetch(protocol(),prepare())
                  -> {ok,prepare(),protocol()}|
  