2012-10-22 8 views
13

Con ActiveRecord di Ruby o Sequel, è possibile creare progressivamente query SQL aggiungendo where o join o order a seconda delle condizioni in fase di esecuzione.Haskell ha una libreria di composizione di query SQL come ActiveRecord o Sequel?

Ecco un semplice esempio, tratto da 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 

L'esempio mostra come una clausola WHERE può essere aggiunto alla query SQL sottostante tabella articles se un parametro di richiesta di query HTTP denominata hidden uguale 1 .

Ho osservato HDBC e postgresql-simple in Haskell. Sembra che postgresql-simple abbia intenzionalmente difficoltà a creare query SQL da parti dinamicamente concatenate, al fine di prevenire l'iniezione SQL. HDBC sembra abbastanza flessibile da creare query SQL strutturate in modo diverso in base alle condizioni in fase di esecuzione, ma non sembra fornire il livello di astrazione fornito da ActiveRecord o Sequel.

Qualcuno può suggerire un buon modo per emulare le strutture dinamiche di creazione di query di ActiveRecord utilizzando una delle librerie di database Haskell?

Se HDBC è la strada da percorrere, ci sto bene. Ma un'illustrazione sarebbe apprezzata.

Indovino che cosa sto cercando è la possibilità di comporre dinamicamente le query, contro un backend PostgreSQL.

+0

Sembra che si desidera haskelldb invece. Scusa, non ho familiarità con esso. Tuttavia ha un back-end PostgreSQL. –

+0

Questo potrebbe aiutare: [Esempio di base dell'utilizzo di HaskellDB per annullare la mappatura dei record di una tabella] (http://stackoverflow.com/q/7697620/196844) –

risposta

Problemi correlati