如何在Opa中对数据库执行查询?

时间:2011-11-13 23:02:19

标签: opa

我已经宣布了一个存储客户数据的数据库:

type Customer = 
{
  name : string
  email: string
  cp: int
}

db /customer : Customer

我想执行某些查询来处理数据,例如:

Select name where id > <number>
Select * where cp IN(<number>, <number>)
Select * order by name

可以执行一个返回Array,Map或类似函数的函数来迭代它吗? 如何迭代这样的结果?

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,从您的db声明开始宣布客户,而不是客户的集合,这是您想要做的,我相信。我建议将其声明为从客户编号到客户数据的地图:

db /customer : intmap(Customer)

现在使用customers = /customer,您可以获得完整的客户集合并对其进行任意处理。或者,Db.intmap_fold_range为您提供来自集合的一系列键的折叠功能;有了它,您可以轻松地将您的第一个查询编码为:

names_with_ids_gt(x) =
  get_names(names, id) = [/customer[id]/name | names]
  Db.intmap_fold_range(@/customer, get_names, [], x, none, (_ -> true))

当然,完全收集客户并对其进行一些处理将不会非常有效。要获得更高效的解决方案,您需要使用外部数据库及其查询功能。 Opa对这些人的支持即将到来http://blog.opalang.org/2011/11/opas-database-and-where-its-heading.html