Как создать динамический запрос с Esqueleto? - PullRequest
0 голосов
/ 19 мая 2019

Я хотел бы попытаться создать динамические запросы с помощью 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?

Редактировать: Хорошо, надуманный пример, который я привел в этом вопросе, на самом деле компилируется, и фактическая вещь, над которой я работаю, не хаха.Так что я посмотрю на это дольше.

...