我怎么能esqueleto为我生成一个SQLstring?
我怎样才能得到esqueleto从一个语句生成一个SQLstring?
toRawSql
的文档说“你可能只是打开持久性的查询日志logging”。 我尝试了所有可能的MonadLogger
forms,但是从未打印过任何SQL。 同样的文件也说“手动使用这个function…是可能的,但繁琐的”。 但是,没有该types的构造函数,也没有任何返回typesQueryType
被导出。 我设法通过注意到QueryType
是一种新types并使用unsafeCoerce
!
我也被迫提供一个Connection
(我通过SQLite),即使不应该连接到数据库来生成SQL。
这是我得到的。 一定会有更好的办法。
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
自从这个问题发布以来, esqueleto
经历了一些重大的修改。 从版本2.1.2开始 ,以及几个较早的版本中,需要您的unsafeCoerce
的QueryType a
参数已经从toRawSql
移除; 那大疣不再是必需的了。
按照目前的实施, Connection
是必需的。 我相信,如types同义词名称IdentInfo
, esqueleto
使用它来在查询中构build标识符。 例如,它可能会添加数据库名称。 我没有真正深入地探讨这个来源。 可以这么说,通过假连接(即undefined
)不起作用; 我不知道是否可以实施模拟连接。 你的解决scheme似乎可行。
剩下的解决scheme应该可以正常工作。 由于toRawSql
是显式的内部函数,所以这里的API看起来是合理的。 虽然其他人注意到它“应该”有可能产生一个连接中立的string,它出现在toRawSql
的范围toRawSql
。
你提到你不能像推荐的那样使用MonadLogger
。 你尝试了什么,发生了什么?