You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
La idea inicial era construir consultas SQL de forma programática haciendo uso de expresiones de forma que no haya que escribir nombres de campos como literales protegiéndonos así de fallos a la hora de cambios en la base de datos o el modelo.
Lo primero que hice fue escribir un snippet con lo que sería más o menos la sintaxis para crear consultas. Escribí algo así:
El pasado sábado en la #dosconf ví a @panicoenlaxbox usar algo parecido pero sin el uso de extensiones y al preguntarle me comentó que conocía un repo de @eiximenis donde se hacía algo parecido a lo que yo quería.
Estuve mirando ambos cogiendo ideas de uno y otro, MySqlSentenceBuilder de @eiximenis se adapta mejor a la idea que yo tenía sobre lo que quería hacer, pero cuando me puse a estudiar un poco SqlSentence de @panicoenlaxbox me dí cuenta de que lo mismo sería algo bueno soportar texto ... No ser la forma principal de escribir las sentencias sino como en caso extremo poder añadir cualquier cosa con texto ... Siempre puede haber una consulta donde necesitas añadir alguna ñapa que no puedes generar con el builder en cuestión...
Ahí tengo una duda importante, hacer que el builder soporte texto para cubrir situaciones extremas o no aceptar texto y cuando necesites hacer una consulta que no puedes generar con el builder hacerla desde cero en texto.
Bien enumero la lista de requerimientos que me gustaría cumplir:
Aceptar expresiones para hacer referencia a los campos.
.AddColumn(i => i.Date,i => i.Total);
Aceptar expresiones para definir las clausulas where.
Soporte a distintos dialectos SQL (Sql Server, MySql, Oracle, ...)
Implementando el patrón Builder se pueden crear distintos generadores, uno para cada dialecto.
Posibilidad de crear configuración por defecto, algo parecido al ModelBuilder de EF pero menos pretencioso. Para hacer algo así:
Estaba implementándolo de forma que el objeto builder va guardando la configuración que se le va indicando con las instrucciones .AddJoin, AddColumn, ...
Y por último un Generator sería el que viendo la configuración en el builder, y teniendo en cuenta el dialecto, generaría el SQL final.
Al pensar en añadir soporte para texto ya estaba empezando a dudar, lo mismo debería ir traduciendo conforme se va configurando el builder y así aceptar texto sería algo más fácil.
Además el soporte para texto rompe un poco el soporte para cualquier dialecto ... lo mismo lo de soportar texto no es un buen enfoque.
La idea inicial era construir consultas SQL de forma programática haciendo uso de expresiones de forma que no haya que escribir nombres de campos como literales protegiéndonos así de fallos a la hora de cambios en la base de datos o el modelo.
Lo primero que hice fue escribir un snippet con lo que sería más o menos la sintaxis para crear consultas. Escribí algo así:
Me metí en materia y según iba escribiendo código hice algunas modificaciones.
Este es el código del test con el que iba funcionando:
(Código en el branch "SQL" de este repositorio)
El pasado sábado en la #dosconf ví a @panicoenlaxbox usar algo parecido pero sin el uso de extensiones y al preguntarle me comentó que conocía un repo de @eiximenis donde se hacía algo parecido a lo que yo quería.
Estuve mirando ambos cogiendo ideas de uno y otro, MySqlSentenceBuilder de @eiximenis se adapta mejor a la idea que yo tenía sobre lo que quería hacer, pero cuando me puse a estudiar un poco SqlSentence de @panicoenlaxbox me dí cuenta de que lo mismo sería algo bueno soportar texto ... No ser la forma principal de escribir las sentencias sino como en caso extremo poder añadir cualquier cosa con texto ... Siempre puede haber una consulta donde necesitas añadir alguna ñapa que no puedes generar con el builder en cuestión...
Ahí tengo una duda importante, hacer que el builder soporte texto para cubrir situaciones extremas o no aceptar texto y cuando necesites hacer una consulta que no puedes generar con el builder hacerla desde cero en texto.
Bien enumero la lista de requerimientos que me gustaría cumplir:
Implementando el patrón Builder se pueden crear distintos generadores, uno para cada dialecto.
Bueno, creo que es suficiente.
Agradecería cualquier comentario o consejo.
The text was updated successfully, but these errors were encountered: