13

Ruby の ActiveRecord またはSequelを使用すると、SQL クエリを段階的に構築し、実行時の条件に応じて or 句を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

この例は、 equalsarticlesという名前の HTTP 要求クエリ パラメーターの場合に、テーブルの基になる SQL クエリに WHERE 句を追加する方法を示しています。hidden1

Haskell で HDBC と postgresql-simple を見てきました。postgresql-simple は、SQL インジェクションを防ぐために、動的に連結された部分から SQL クエリを構築することを意図的に難しくしているようです。HDBC は、実行時の条件に基づいて異なる構造の SQL クエリを構築するのに十分柔軟であるように見えますが、ActiveRecord または Sequel が提供する抽象化のレベルを提供していないようです。

Haskell データベース ライブラリの 1 つを使用して、ActiveRecord の動的クエリ構築機能をエミュレートする良い方法を誰か提案できますか?

HDBC が適している場合は、それで問題ありません。しかし、イラストをいただければ幸いです。

私が探しているのは、PostgreSQL バックエンドに対して動的にクエリを作成する機能だと思います。

4

2 に答える 2

7

Persistentが必要な場合もあれば、 HaskellDBが必要な場合もあれば、Esqueleto のようなものが必要な場合もあります。

それぞれのトレードオフについての良い議論があります: http://blog.felipe.lessa.nom.br/?p=68

于 2012-10-22T23:40:34.163 に答える
4

http://hackage.haskell.org/package/esqueletoこのアプリケーションに興味があるかもしれません。

于 2012-10-22T22:23:36.273 に答える