Предлагаемый подход для создания динамических запросов 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
Я не уверен, что это просто плохой подход, или было бы лучше просто использовать существующие библиотеки, или есть лучший подход в заранее сделанных заявлениях, о которых я просто не думаю.