Я хотел бы попытаться создать динамические запросы с помощью esqueleto.В идеале у меня был бы список критериев, которые входят и выводят оператор запроса эквелето.
например,
share[mkPersist sqlSettings][persistLowerCase|
MyTable
myField Int
|]
data MyCriteria
= MyFieldMin { myFieldMin :: Int }
| MyFieldMax { myFieldMax :: Int }
buildQuery :: MyCriteria -> ???
buildQuery criteria myTable =
case criteria of
MyFieldMin x -> myTable ^. MyTableMyField >=. val x -- these are equeleto query fragments
MyFieldMax x -> myTable ^. MyTableMyField <=. val x
combineQueries :: [MyCriteria] -> ?
combineQueries myCriterias =
foldr (\a b -> a &&. b) (val True) (map (\x -> buildQuery x) myCriterias)
selectStms myCriterias = do
select $ from $ \myTable -> do
where_ $ combineQueries myCriterias
return myTable
Возможно ли этоделать с esqueleto?
Редактировать: Хорошо, надуманный пример, который я привел в этом вопросе, на самом деле компилируется, и фактическая вещь, над которой я работаю, не хаха.Так что я посмотрю на это дольше.