Как выполнить запросы к базе данных в Opa? - PullRequest
3 голосов
/ 14 ноября 2011

Я объявил базу данных, в которой хранятся данные клиента:

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 Ответ

1 голос
/ 14 ноября 2011

Хорошо, для начала ваша декларация 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))

Конечно, получить полный набор клиентов и выполнить некоторую обработку по нему не будет очень эффективно.Для более эффективного решения вам нужно будет использовать внешнюю базу данных и ее возможности запросов.Опа поддержка для тех, кто приходит очень скоро : http://blog.opalang.org/2011/11/opas-database-and-where-its-heading.html.

...