如何实现MNesia的动态查询?

时间:2010-06-11 08:59:53

标签: erlang mnesia

我正在尝试实现一个为MNesia生成动态查询的函数。

例如,当使用这些参数调用函数时;

dyn_query(list, person, [name, age], ["jack", 21])

我想向MNesia查询列表 名称 “jack”年龄 的项目> 表中的> 21

我试图通过使用qlc:q(ListComprehension)和qlc:string_to_handle(“ListComprehension”)来实现这一点。首先由于编译错误而失败,编译器没有让我使用函数而不是ListComprehentions和变量而不是像“Item#Table.Field”这样的记录名。第二次失败,因为erl_eval无法处理记录并抛出像{undefined_record,person}这样的异常。

我应该使用哪种方法?我怎么能解决这些问题?或者我应该使用不同的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

查看mnesia:select/1用于查询表格的匹配规范。有mnesia:table_info/2用于查找表的列名(和列索引)。

Matchspecs记录在ERTS user guide on match specifications中。我通常使用ets:fun2ms/1这是一个方便的解析变换,它可以在编译时从erlang看起来很有趣的语法创建一个matchspec。您可以直接在shell中使用它。

答案 1 :(得分:1)

你可以尝试“exprecs”。这里解释了它们:

http://forum.trapexit.org/viewtopic.php?p=21790

阅读说明:

  

转换添加了访问器功能   用于实例化,检查和   修改记录,而不必   介绍编译时依赖项   模块之间。

该页面提供了示例。看看这是否有帮助。

相关问题