The procedure of appending a record is as follows.
add_new_member(normal, Member_info, Status)-IFP :-
put_into_pool(Member_info, Pool),
new_id(NewId, Status1)-IFP,
% returns the Id attribute of the appending record to "NewId"
add_new_member1(Status1, NewId, Status2)-IFP+Pool+[],
end_transaction(Status2, Status)-IFP.
otherwise.
add_new_member(PreStatus, _Member_info, Status)-IFP :-
Status = PreStatus.
%
add_new_member1(normal,NewId,ComStatus)-IFP-Pool :-
set_attribute(id, NewId)-Pool,
set_attribute(version, 1)-Pool,
% The version of the appending record is 1.
make_record(meibo, Rec, UnRec, Status1)-Pool-IFP,
IFP <= create_format(meibo, (*), IFormat, Status2),
lib:error_check([Status1,Status2],irpr_kappa:add_new_member1,Status3),
add_new_member2(Status3, Rec, IFormat, UnRec, ComStatus)-IFP.
otherwise.
add_new_member1(PreStatus,_NewId,ComStatus)-IFP-Pool :-
ComStatus = PreStatus.
%
add_new_member2(normal,Rec,IFormat,UnRec,ComStatus)-IFP :-
IFP <= add_record(meibo, IFormat, Rec, _RID, Status1),
add_new_member3(Status1,UnRec,ComStatus).
otherwise.
add_new_member2(PreStatus,Rec,_IFormat,_UnRec,ComStatus)-IFP :-
ComStatus = PreStatus.
%
add_new_member3(normal, UnRec, Status) :-
Status = normal(UnRec).
% The unnested record is returned in the command status.
otherwise.
add_new_member3(PreStatus, _UnRec, Status) :-
Status = PreStatus.