haskell - into - ¿Cómo puedo obtener esqueleto para generar una cadena SQL para mí?
stuff sql (1)
En el tiempo transcurrido desde que se publicó esta pregunta, esqueleto
ha pasado por una serie de revisiones importantes. A partir de la versión 2.1.2 y varias versiones anteriores, QueryType a
parámetro que necesitó su unsafeCoerce
se ha eliminado de toRawSql
; esa gran verruga ya no es necesaria.
Tal como se implementa actualmente, se requiere una Connection
. Creo que, como lo indica el nombre sinónimo de tipo, IdentInfo
, esqueleto
usa esto para generar identificadores en la consulta. Puede, por ejemplo, agregar el nombre de la base de datos. Realmente no he sondeado la fuente con suficiente profundidad. Basta decir que pasar una conexión falsa (es decir, undefined
) no funciona; No sé si se podría implementar una conexión falsa. Tu solución parece viable.
El resto de tu solución debería funcionar bien. Como toRawSql
es explícitamente una función interna, la API aquí parece razonable. Aunque otros señalan que "debería" ser posible generar una cadena de conexión neutral, que aparece fuera del alcance de toRawSql
.
Menciona que no pudo usar MonadLogger
como se recomienda. ¿Qué intentaste y qué pasó?
¿Cómo puedo obtener esqueleto para generar una cadena SQL desde una declaración from
?
La documentación de toRawSql
dice que "puede activar el registro de consultas de persistente". MonadLogger
todas las formas posibles de MonadLogger
que pude entender, pero nunca imprimió ningún SQL. La misma documentación también dice "el uso manual de esta función ... es posible pero tedioso". Sin embargo, no se exportan constructores del tipo, ni funciones que devuelvan valores del tipo QueryType
. QueryType
esto al notar que QueryType
es un newtype
y usa unsafeCoerce
.
También me vi obligado a proporcionar una Connection
(que obtuve a través de SQLite), aunque no debería haber necesidad de conectarse a una base de datos para generar el SQL.
Esto es lo que tengo. Debe haber una mejor manera.
withSqliteConn ":memory:" $
/conn -> return $ toRawSql SELECT
(unsafeCoerce ((const mempty)
:: a -> Text.Lazy.Builder.Builder))
(conn, initialIdentState) myFromStatement)
http://hackage.haskell.org/package/esqueleto-1.3.4.2/docs/Database-Esqueleto-Internal-Sql.html