K2InformaticsGmbH / oranif

Oracle OCI driver using dirty NIF
Apache License 2.0
4 stars 2 forks source link

safe nif exec interface #44

Closed c-bik closed 5 years ago

c-bik commented 5 years ago
dpi:safe(Fun, Args) when is_function(F), is_list(Args) ->
    rpc:call(get(dpi_slave), erlang, apply, [Fun, Args]).
c-bik commented 5 years ago

Sample Usage


f() ->
    C = dpi:safe(create_context, [3, 0]),
    S = dpi:safe(create_session, [C, TNS, User, Password]),

    dpi:safe(
        fun(T, U, P) ->
            C = dpi:craete_context(3, 0),
            S = dpi:craete_session(C, T, U, P),
        end,
        [TNS, User, Password]
    ),

    dpi:safe(mec_ic, session, [TNS, User, Password]),
    .

%%%%%%%%%%%%

-module(mec_ic).

session(TNS, User, Password) ->
    C = dpi:craete_context(3, 0),
    dpi:craete_session(C, TNS, User, Password).

%%%%%%%%%%

% Old
    C = dpi:craete_context(3, 0),
    Error = dpi:craete_session(C, BadTNS, User, Password),
    ?assertMatch({error, _}, Error).

% New
    C = dpi:safe(craete_context, [3, 0]),
    Error = dpi:safe(craete_session,[C, BadTNS, User, Password]),
    ?assertMatch({error, _}, Error).

% Old
    C = dpi:craete_context(3, 0),
    X = dpi:craete_session(C, BadTNS, User, Password),
    ...
    R = dpi:destroy_context(C),
    ?assertMatch(ok, R).

% New
    R =  dpi:safe(
        fun() ->
            C = dpi:craete_context(3, 0),
            X = dpi:craete_session(C, BadTNS, User, Password),
            ...
            dpi:destroy_context(C)
        end
    ),
    ?assertMatch(ok, R).