【发布时间】:2016-10-10 23:14:37
【问题描述】:
我有一个hacky项目的以下功能:
% The Record variable is some known record with an associated table.
Query = qlc:q([Existing ||
Existing <- mnesia:table(Table),
ExistingFields = record_to_fields(Existing),
RecordFields = record_to_fields(Record),
ExistingFields == RecordFields
]).
函数record_to_fields/1 只是从元组中删除记录名称和ID,以便我可以比较字段本身。如果有人想要上下文,那是因为我在尝试将记录插入 Mnesia 之前为记录预先生成了唯一 ID,并且我想确保不存在具有相同字段(但 ID 不同)的记录。
这将导致以下(为清楚起见已编辑)堆栈跟踪:
{aborted, {{case_clause, {stuff}},
[{db, '-my_func/2-fun-1-',8, ...
这指向我声明Query 的行,但是看不到case 子句。是什么导致了这个错误?
(我会回答自己,但我很欣赏可以解释我如何实现我想要的东西的评论)
编辑:如果我可以简单地将某些字段标记为唯一,那么这将不是必需的,并且 Mnesia 有一个专用的 insert/1 或 create/1 函数。
【问题讨论】: