Я пытаюсь создать небольшое тестовое приложение с erlang + mnesia.написать запрос Список соображений по запросу mnesia
У меня есть сборки таблицы пользователей из записи #user, как определено здесь:
-record(user_details, {name, password}).
-record(user, {id, details}).
затем вставить пользователь с этой функцией:
add_sample_data() ->
Mat = #user{
details = #user_details{
name = "mat", password = "mat"
}
},
user:insert_user(Mat),
запрос [U#user.details || U <- mnesia:table(user)]
вернуть непустой список. теперь я пытаюсь построить запрос, который будет возвращать список, содержащий нулевую запись, если нет записи с указанием details.name. Название или соответствующая запись, если таковая имеется.
здесь метод я использую (это работает):
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. Аналогичная проблема решена с помощью метода mnesia:select
в методе mne_fun_query({sport, Sport})
(слайд 19), но теперь я хотел бы сделать это с помощью qlc.
Я пробовал различные комбинации, но без каких-либо успехов (часто не удалось во время компиляции ..).
Я действительно новичок в erlang, если вы можете сказать, какой запрос должен работать и немного объясняет, это было бы очень признательно!
коврик.
редактировать
здесь одна версия, которая не работает, но, возможно, объяснить мою проблему лучше
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.
и ошибка у меня есть:
Матье @ evangeneer: ~/проекты/nopair $ make
Перекомпилировать: src/resources/user_resource
src/resources/user_resource.erl: 22: синтаксическая ошибка до: '.'
SRC/ресурсы/user_resource.erl: 6: функция user_exists/2 неопределенный Марк:
*** [Эрл] Ошибка 1
Если это не удалось во время компиляции, вставьте здесь список ошибок и предупреждений. Это упростит диагностику :) –
добавлен один пример неудачной компиляции – Mathieu
Возможно, я не вижу ничего правильно, но вы используете «mnesia: transaction (Fun) of ... end', а не« case mnesia: transaction (Fun) of ... end'. Может ли это так? –