2012-01-09 2 views
2

Я только начал изучать haskelldb как более мощный компаньон для persistent, так как мне нужен более мощный инструмент для запроса к базе данных. Почти сразу я столкнулся с трудностями с типами данных; в частности, я довольно часто использую Data.Text, UTCTime и некоторые пользовательские типы данных. К сожалению, хотя HDBC, похоже, достаточно хорошо поддерживает эти типы данных, haskelldb скрывает все это, и вам нужно написать свои собственные преобразования, начиная с String.Datatypes with haskelldb на практике (текст, UTCTime)

Я не хочу дублировать работу, уже сделанную для HDBC; что вы предлагаете делать в этом случае?

Я думаю, что, вероятно, я добавлю атрибут getHdbcValue в класс GetInstances, чтобы я мог писать простые экземпляры GetValue, которые будут использовать инфраструктуру HDBC; есть ли лучшие идеи? Мне что-то не хватает?

(кстати: мне кажется, что эта библиотека - может быть, от исторических причин - чуть более обобщенные, не мог он просто поддержать hdbc ..?)

+0

настойчив действительно что ограничены? Я думаю, что люди Yesod используют его для всего, поэтому я был бы удивлен, если многое может сделать HaskellDB, чего не может. Конечно, HaskellDB может сделать некоторые вещи более простым способом, чем постоянным. – ehird

+3

Да. Предполагается, что Persistent будет действительно агрегированным по базе данных, а haskelldb сосредоточен вокруг SQL. Persistent не поддерживает функции DB, пользовательские операторы, даже немного более сложные объединения. Я бы не стал винить постоянный, большинство инфраструктур ORM не поддерживают такие функции, но в большинстве моих приложений, обращающихся к БД, они мне нужны. – ondra

+0

Вы оценили esqueleto? –

ответ

2

Я очень люблю PostgreSQL и его богатый тип коллекции, в частности массивов. Большинство используемых дополнительных типов PG для проектов за пределами Haskell - [int4], типичный массив ints. Привлечение поддержки к HaskellDB стало одной из самых захватывающих проблем, которые у меня были на пути к пониманию Haskell, особенно программирования на уровне (и TH/QQ тоже). Добавление нового типа для поддержки выглядит легко, если оно поддерживается HDBC.

Надеюсь, что этот маленький патч может показать, как добавить поддержку для нового типа. Вот запрос тянуть за это, почти все изменения, которые необходимо покрыты здесь (все, что осталось FlexibleInstances):

Pull Request

Main Changeset

+1

Ссылка «Pull Request» возвращает 404. –

+0

фиксированная ссылка, спасибо – Orca

Смежные вопросы