2011-09-04 6 views
6

Ho un semplice script MySQL che uso in un'applicazione web per completare la ricostruzione/ripristinare il mio DB in uno stato iniziale pulito. Quindi, in questo script definisco le varie tabelle, i proc memorizzati, ecc. Di cui ho bisogno.Esiste un buon DSL per manipolare gli script MySQL indipendentemente da un particolare framework web?

Questa è la soluzione iniziale abbastanza buona b/c è semplice e fa il lavoro senza essere eccessivo. Tuttavia ci sono alcuni inconvenienti. Un esempio è la digitazione. Sarebbe bello definire stored proc con tipi più ricchi quindi non ho bisogno di ripetere dichiarazioni come VARCHAR (64).

Quindi, la mia domanda è: c'è un buon DSL per manipolare gli script MySQL? (ad esempio potrebbe generare in definitiva script MySQL validi) che è effettivamente un bel DSL su MySQL, senza cercare di fare troppo e avere troppe campane e fischi. Sarebbe bello se il linguaggio stesso avesse un supporto decente per la DSL, ma, cosa più importante, sarebbe bello trovare qualcosa che non fosse fortemente legato a un particolare framework web.

Alcune ricerche superficiali non hanno reso nulla di immediatamente ovvio.

Immagino che un'alternativa pratica sia quella di utilizzare il tuo ORM preferito come metodo per ottenere una soluzione che sia effettivamente piacevole. Quindi parte della motivazione di questa domanda è vedere se l'approccio DSL è stato esplorato per un successo.

risposta

2

Sto assumendo vuoi dire un DSL interno (vedi http://martinfowler.com/bliki/DomainSpecificLanguage.html, e http://en.wikipedia.org/wiki/Domain-specific_language) perché SQL è una connessione DSL, vale a dire un DSL esterno (per definizione di Martin Fowler, che ha guadagnato abbastanza ampia accettazione).

Dato questo presupposto, e non sapendo cosa lingua che preferite, sono stato in grado di trovare un paio di per la generazione di codice SQL DSL interno:

  • Rubino - sqldsl.rubyforge.org/
  • Java - codice .google.com/p/sql-dsl/
  • Scala - github.com/p3t0r/scala-sql-dsl

se google "SQL DSL" non ci sono più, anche provare googling "DSL SQL [inserisci la tua lingua preferita qui] "e puoi f ind qualcosa di più adatto.

Un altro approccio che presenta un diverso insieme di vantaggi e svantaggi (rispetto a un DSL interno) genererebbe il codice SQL da un modello. Un modello sotto forma di stringa con escape di variabili (o concatenazione) o in un file separato che utilizza un linguaggio modello.

+0

Grazie, e sì, il templating è un'ottima soluzione all'80% per molte situazioni. –

Problemi correlati