나는 erlang + mnesia로 작은 테스트 응용 프로그램을 만들려고합니다.질의 목록 작성 질의에 대한 이해도
이add_sample_data() ->
Mat = #user{
details = #user_details{
name = "mat", password = "mat"
}
},
user:insert_user(Mat),
쿼리가 아닌 빈을 반환 [U#user.details || U <- mnesia:table(user)]
:
-record(user_details, {name, password}).
-record(user, {id, details}).
는 그 기능이있는 사용자를 삽입 : 여기에 정의 된
가 나는 #user 레코드에서 사용자 테이블 빌드가 명부. 지금 Details.name과 일치하는 레코드가 없으면 이름이 0 인 레코드 또는 일치하는 레코드가 있으면 레코드를 포함하는 목록을 반환하는 쿼리를 작성하려고합니다.
user_exists() ->
Fun = fun() ->
Query = qlc:q([
U#user.details ||
U <- mnesia:table(user)
]),
qlc:e(Query)
end,
case mnesia:transaction(Fun) of
{atomic, []} -> false;
{atomic, [_User]} -> true
end.
내가 this tutorial에서 몇 가지 물건을 복사 : 여기
내가 사용하는 방법 (이 작품)입니다. 유사한 문제는mne_fun_query({sport, Sport})
방법 (슬라이드 19)에서
mnesia:select
으로 해결되었지만 지금은 qlc로하고 싶습니다.
나는 다양한 조합을 시도했지만 성공하지 못했습니다 (컴파일 시간에 종종 실패했습니다.).
나는 어떤 쿼리가 잘 작동하는지 그리고 조금 설명 할 수 있다면 정말 대단합니다!
매트.
마티유 @의 evangeneer을 : ~/편집
더
user_exists() -> Fun = fun() -> Query = qlc:q([ U#user.details || U <- mnesia:table(user), U#user.details.name == "mat" <<<<< This is the line with the problem ]), qlc:e(Query) end, case mnesia:transaction(Fun) of {atomic, []} -> false; {atomic, [_User]} -> true end.
및 오류 나는이 일을하지만 어쩌면 내 문제를 설명하지 않는 한 버전입니다 projects/nopair $ make
다시 컴파일 : src/resources/user_resource
src/resources/user_resource.erl : 22 : 구문 오류 이전 : '.'
SRC/자원/user_resource.erl : 6 : 기능/2 정의되지 않은 메이크업을 user_exists :
*** [ERL] 오류 1
컴파일 할 때 실패하면 여기에 오류 및 경고 목록을 붙여 넣으십시오. 진단을 쉽게 할 수 있습니다 :) –
실패한 컴파일의 한 예가 추가되었습니다 – Mathieu
어쩌면 올바르게 볼 수 없지만'mnesia : transaction (Fun) of ... end' 대신'case mnesia : transaction (재미) ... 끝. 그게 될 수 있을까요? –