Keep the reference name as part of the record

This commit is contained in:
Carlos Martín Nieto
2013-05-13 11:46:07 +02:00
parent dfdb4cbb54
commit 604388a76d
6 changed files with 46 additions and 9 deletions

View File

@@ -59,6 +59,9 @@ reference_resolve(_Handle) ->
reference_type(_Handle) ->
nif_error(?LINE).
reference_name(_Handle) ->
nif_error(?LINE).
odb_object_exists(_Val, _Val) ->
nif_error(?LINE).

View File

@@ -1,4 +1,4 @@
-record(geef_ref, {handle, type :: atom(), target :: binary() | geef_oid()}).
-record(geef_ref, {handle, name :: binary(), type :: atom(), target :: binary() | geef_oid()}).
-record(geef_odb, {handle}).
-record(geef_oid, {oid}).
-record(geef_object, {type :: atom(), handle}).

View File

@@ -1,11 +1,11 @@
-module(geef_ref).
-export([lookup/2, resolve/1, create/4, target/1]).
-export([lookup/2, resolve/1, create/4, name/1, type/1, target/1]).
-include("geef_records.hrl").
-spec new(term()) -> geef_ref().
new(Handle) ->
-spec new(binary(), term()) -> geef_ref().
new(Name, Handle) ->
Type = geef_nif:reference_type(Handle),
Bin = geef_nif:reference_target(Handle),
Target = case Type of
@@ -14,19 +14,20 @@ new(Handle) ->
oid ->
#geef_oid{oid=Bin}
end,
#geef_ref{handle=Handle, type=Type, target=Target}.
#geef_ref{handle=Handle, name=Name, type=Type, target=Target}.
-spec create(pid(), iolist(), geef_oid() | binary(), boolean()) -> {ok, geef_ref()} | {error, term()}
.
create(Repo, Refname, Target, Force) ->
{ok, Ref} = geef_repo:create_reference(Repo, Refname, Target, Force),
{ok, new(Ref)}.
{ok, new(Refname, Ref)}.
-spec lookup(pid(), iolist()) -> {ok, geef_ref()} | {error, term()}.
lookup(Repo, Refname) ->
case geef_repo:lookup_reference(Repo, Refname) of
Name = iolist_to_binary(Refname),
case geef_repo:lookup_reference(Repo, Name) of
{ok, Ref} ->
{ok, new(Ref)};
{ok, new(Name, Ref)};
Other ->
Other
end.
@@ -35,7 +36,8 @@ lookup(Repo, Refname) ->
resolve(#geef_ref{handle=Handle}) ->
case geef_nif:reference_resolve(Handle) of
{ok, Ref} ->
{ok, new(Ref)};
{ok, Name} = geef_nif:reference_name(Ref),
{ok, new(Name, Ref)};
Other ->
Other
end.
@@ -43,3 +45,11 @@ resolve(#geef_ref{handle=Handle}) ->
-spec target(geef_ref()) -> {geef_oid(), binary()}.
target(#geef_ref{target=Target}) ->
Target.
-spec type(geef_ref()) -> symbolic | oid.
type(#geef_ref{type=Type}) ->
Type.
-spec name(geef_ref()) -> binary().
name(#geef_ref{name=Name}) ->
Name.