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 句を追加する方法を示しています。hidden
1
Haskell で HDBC と postgresql-simple を見てきました。postgresql-simple は、SQL インジェクションを防ぐために、動的に連結された部分から SQL クエリを構築することを意図的に難しくしているようです。HDBC は、実行時の条件に基づいて異なる構造の SQL クエリを構築するのに十分柔軟であるように見えますが、ActiveRecord または Sequel が提供する抽象化のレベルを提供していないようです。
Haskell データベース ライブラリの 1 つを使用して、ActiveRecord の動的クエリ構築機能をエミュレートする良い方法を誰か提案できますか?
HDBC が適している場合は、それで問題ありません。しかし、イラストをいただければ幸いです。
私が探しているのは、PostgreSQL バックエンドに対して動的にクエリを作成する機能だと思います。