2011-11-13 4 views
3

고객 데이터가 저장된 데이터베이스를 선언했습니다.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 

함수를 실행할 수 있습니다. 배열, 맵 또는 유사한 것을 반환하여 반복 할 수 있습니까?
어떻게 그런 결과를 반복 할 수 있습니까?

고마워!

답변

1

좋아, 내가 믿고, 당신이 원하는 무엇 이는 하나의 고객이 아닌 수집 고객의를 선언합니다. 당신이 고객의 전체 모음을 얻고 그것을 임의의 처리를 할 수 customers = /customer로 지금

db /customer : intmap(Customer) 

: 나는 같은 고객 데이터에 고객 번호에서지도로 선언하는 것이 좋습니다 것입니다. 또는 Db.intmap_fold_range은 컬렉션의 키 범위에 대해 fold 기능을 제공합니다. 이를 통해 다음과 같이 첫 번째 쿼리를 쉽게 코딩 할 수 있습니다.

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.

관련 문제