Предлагаемый подход для создания динамических запросов sql с помощью haskell

Я хотел бы использовать postgresql-simple для уровня доступа к базе данных в моем приложении, и мне было интересно, какой метод лучше всего будет для динамического создания моих запросов sql. Вот простой пример того, что я хотел бы сделать:

У пользователя есть ряд фильтров, которые можно применить к тому, что он ищет:

  • Количество домашних животных
  • Имя питомца
  • Когда был создан питомец
  • так далее

Как мне обращаться с составлением фильтров, чтобы я не подвергался атакам. Моим первым инстинктом было бы то, что мне нужно было бы беспокоиться только о строковых / текстовых данных, поскольку я могу проверить, что введенное число на самом деле является числом, а указанная дата на самом деле является датой. Используя следующий формат:

makeNumberOfPetsFragment :: String -> Either String String
makeNumberOfPetsFragment candidate = 
  case createStatement of
   Left _ -> Left "Error creating number of pets filter"
   Right x -> Right ("WHERE number_of_pets = " ++ (show x)) 
  where createStatement = readEither candidate :: Either String Int 

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

0 ответов

Другие вопросы по тегам