stuff into convert concatenar columns haskell yesod esqueleto

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