anchor.diff:  process_query(ok, Query, Connection) ->
       ?Debug([{session, Connection}], "query ~p -> ok", [Query]),
       [{<<"result">>, <<"ok">>}];
  -process_query({ok, #stmtResult{sortSpec = SortSpec, stmtCols = Clms} = StmtRslt, TableName}, Query, {oci_port, _, _} = Connection) ->
  -    FsmCtx = generate_fsmctx_oci(StmtRslt, Query, Connection, TableName),
  +process_query({ok, #stmtResult{sortSpec = SortSpec, stmtCols = Clms} = StmtRslt, TableName, ContainRowId}, Query, {oci_port, _, _} = Connection) ->
  +    FsmCtx = generate_fsmctx_oci(StmtRslt, Query, Connection, TableName, ContainRowId),
       StmtFsm = dderl_fsm:start_link(FsmCtx),
       ?Debug("StmtRslt ~p ~p", [Clms, SortSpec]),
       Columns = build_column_json(lists:reverse(Clms)),
  
positive.code:     Password = proplists:get_value(<<"password">>, BodyJson, <<>>),
      Tnsstr   = proplists:get_value(<<"tnsstring">>, BodyJson, <<>>),
      ?Info("session:open ~p", [{IpAddr, Port, Service, Type, User, Password, Tnsstr}]),    
      ErlOciSession = if Tnsstr =:= <<>> ->
          case Port of
              undefined -> {error, "Invalid port"};
              Port ->
                  NewTnsstr = list_to_binary(io_lib:format(
                      "(DESCRIPTION="
  
negative.code:                     dderl_dal:add_connect(Sess, Con),
              From ! {reply, jsx:encode([{<<"connect">>,list_to_binary(?EncryptPid(Connection))}])},
              Priv#priv{connections = [ErlOciSession|Connections]};
          {error, {_Code, Msg}} = Error when is_list(Msg) ->
              ?Error("DB connect error ~p", [Error]),
              From ! {reply, jsx:encode([{<<"connect">>,[{<<"error">>, list_to_binary(Msg)}]}])},
              Priv;
          Error ->
              ?Error("DB connect error ~p", [Error]),
              Err = list_to_binary(lists:flatten(io_lib:format("~p", [Error]))),
  