使用
Ruby的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
该示例显示如果名为hidden的HTTP请求查询参数等于1,如何将WHERE子句附加到文章表上的底层SQL查询.
我一直在Haskell看到HDBC和postgresql-simple.似乎postgresql-simple有意义地使得难以从动态连接的部分构建SQL查询,以防止sql注入. HDBC似乎足够灵活,可以根据运行时的条件构建不同结构的SQL查询,但它似乎并没有提供ActiveRecord或Sequel提供的抽象级别.
任何人都可以建议使用其中一个Haskell数据库模拟ActiveRecord的动态查询构建工具吗?
如果HDBC是要走的路,那我很好.但是一个例子将不胜感激.
解决方法
你可能想要
Persistent,你可能想要
HaskellDB,你可能想要像Esqueleto这样的东西.
这是一个很好的讨论,每个的权衡:
http://blog.felipe.lessa.nom.br/?p=68