2011-09-04 16 views
6

Tengo un script simple de MySQL que utilizo en una aplicación web para completar la reconstrucción/restablecer mi base de datos a un estado inicial limpio. Por lo tanto, en este script defino las diversas tablas, procesos almacenados, etc. que necesito.¿Existe una buena DSL para manipular scripts MySQL independientemente de cualquier marco web en particular?

Esto es bastante buena solución inicial b/c es simple y hace el trabajo sin ser excesivo. Sin embargo, hay algunos inconvenientes. Un ejemplo es escribir. Sería bueno definir procs almacenados con tipos más ricos, por lo que no es necesario repetir declaraciones como VARCHAR (64).

Por lo tanto, mi pregunta es: ¿Existe una buena DSL para manipular scripts de MySQL? (por ejemplo, podría generar scripts de MySQL válidos en última instancia) que efectivamente es un buen DSL sobre MySQL, sin tratar de hacer demasiado y tener demasiadas campanas y silbatos. Sería bueno si el lenguaje en sí tuviera soporte decente para DSL, pero más importante aún, sería bueno encontrar algo que no estuviera estrechamente vinculado a un marco web particular.

Algunas búsquedas superficiales no arrojaron nada inmediatamente obvio.

Supongo que una alternativa práctica es simplemente usar su ORM favorito como una forma de llegar a una solución que sea realmente agradable. Entonces, parte de la motivación de esta pregunta es ver si el enfoque DSL se ha explorado con éxito.

Respuesta

2

Asumo que quiere decir un DSL interno (ver http://martinfowler.com/bliki/DomainSpecificLanguage.html y http://en.wikipedia.org/wiki/Domain-specific_language) porque SQL es una conexión DSL, es decir, un DSL externo (por definición de Martin Fowler, que ha ganado aceptación bastante amplia).

Dado este supuesto, y sin saber qué idioma que prefiera, yo era capaz de encontrar algunos de la generación de código SQL DSL interno:

  • Ruby - sqldsl.rubyforge.org/
  • Java - código .google.com/p/sql-DSL/
  • Scala - github.com/p3t0r/scala-sql-dsl

si google "DSL SQL" hay más, también tratar de googlear "DSL SQL [ingrese su idioma favorito aquí] "y puede f ind algo más adecuado.

Otro enfoque que tiene un conjunto diferente de ventajas y desventajas (que una DSL interna) generaría el código SQL a partir de una plantilla. O bien una plantilla en forma de cadena con escapes variables (o concatenación) o en un archivo separado utilizando un lenguaje de plantilla.

+0

Gracias, y sí, la creación de plantillas es una gran solución al 80% para muchas situaciones. –

Cuestiones relacionadas