Есть ли у Haskell есть SQL запросов сочиняет библиотеки как ActiveRecord или Sequel?

голоса
13

С ActiveRecord или Руби Sequel , вы можете постепенно наращивать запросов SQL, добавляя whereили joinили orderстатьи на запрос в зависимости от условий во время выполнения.

Вот простой пример, взятый из ASCIIcasts :

def index  
  @articles = Article.order('name')  

  if params[:hidden]  
    @articles = @articles.where(:hidden =>(params[:hidden] == 1))  
  end  

  respond_to do |format|  
    format.html # index.html.erb  
    format.xml  { render :xml => @articles }  
  end  
end

Пример показывает , как ИНЕКЕ может быть добавлено к базовому SQL запросу на articlesтаблице , если параметр запроса HTTP - запрос с именем hiddenравно 1.

Я смотрел на HDBC и PostgreSQL-простой в Haskell. Это кажется, что простые PostgreSQL намеренно затрудняет для создания запросов SQL из динамически сцепленных частей, для того, чтобы предотвратить инъекции SQL. HDBC кажется быть достаточно гибкими, чтобы создать по-разному структурированных запросов SQL, основанные на условиях во время выполнения, но это не похоже, чтобы обеспечить уровень абстракции, которые обеспечивают либо ActiveRecord или Sequel.

Может кто-нибудь предложить хороший способ эмулировать динамические запросы строительных объектов ActiveRecord, используя одну из библиотек баз данных в Haskell?

Если HDBC это путь, я в порядке с этим. Но иллюстрации будут оценены.

Я предполагаю, что я lookinng за это способность динамически создавать запросы, против бэкэнда PostgreSQL.

Задан 22/10/2012 в 22:35
источник пользователем
На других языках...                            


2 ответов

голоса
7

Вы можете Persistent , вы можете HaskellDB , вы можете что - то вроде Esqueleto.

Вот хорошее обсуждение компромиссных каждый: http://blog.felipe.lessa.nom.br/?p=68

Ответил 23/10/2012 в 00:40
источник пользователем

голоса
4

Вы можете найти http://hackage.haskell.org/package/esqueleto интересного для этого приложения.

Ответил 22/10/2012 в 23:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more