anchor.diff:                  _ ->
                       Connection = ?DecryptPid(binary_to_list(proplists:get_value(<<"connection">>, BodyJson, <<>>))),
                       case dderloci:exec(Connection, Query) of
  -                        {ok, #stmtResult{} = StmtRslt, TableName} ->
  -                            FsmCtx = generate_fsmctx_oci(StmtRslt, Query, Connection, TableName),
  +                        {ok, #stmtResult{} = StmtRslt, TableName, ContainRowId} ->
  +                            FsmCtx = generate_fsmctx_oci(StmtRslt, Query, Connection, TableName, ContainRowId),
                               Statement:refresh_session_ctx(FsmCtx),
                               Statement:gui_req(button, <<"restart">>, gui_resp_cb_fun(<<"button">>, Statement, From));
                           _ ->
  
positive.code: 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),
      StmtFsm = dderl_fsm:start_link(FsmCtx),
      ?Debug("StmtRslt ~p ~p", [Clms, SortSpec]),
      Columns = build_column_json(lists:reverse(Clms)),
  
negative.code:     Password = proplists:get_value(<<"password">>, BodyJson, <<>>),
      Tnsstr   = proplists:get_value(<<"tnsstring">>, BodyJson, <<>>),
      ?Info("session:open ~p", [{IpAddr, Port, Service, Type, User, Password, Tnsstr}]),    
      if
          Tnsstr =:= <<>> ->
              case Port of
              undefined ->
                      ErlOciSession = {error, "Invalid port"};
              Port ->
                  NewTnsstr = list_to_binary(io_lib:format(
                      "(DESCRIPTION="
  