Tom*_*lis 86 haskell yesod esqueleto
如何从from语句中生成esqueleto以生成SQL字符串?
文档toRawSql说"你可能只是打开持久性的查询记录".我尝试了所有可能的形式MonadLogger,但我从未打印过任何SQL.同样的文档也说"手动使用这个功能......可能但很乏味".但是,不会QueryType导出该类型的构造函数,也不会导出返回该类型值的任何函数.我设法通过注意这QueryType是一个newtype和使用来解决这个问题unsafeCoerce!
我也被迫提供Connection(我通过SQLite获得),即使不需要连接到数据库来生成SQL.
这就是我所拥有的.肯定有更好的办法.
withSqliteConn ":memory:" $
\conn -> return $ toRawSql SELECT
(unsafeCoerce ((const mempty)
:: a -> Text.Lazy.Builder.Builder))
(conn, initialIdentState) myFromStatement)
Run Code Online (Sandbox Code Playgroud)
http://hackage.haskell.org/package/esqueleto-1.3.4.2/docs/Database-Esqueleto-Internal-Sql.html
自从这个问题发布以来,esqueleto已经经历了多次重大修改。从版本 2.1.2和几个早期版本开始, QueryType a需要您的参数unsafeCoerce已从toRawSql;中删除。不再需要那个大疣了。
按照目前的实施,aConnection是必需的。我相信,如类型同义词名称所示,IdentInfo使用esqueleto它在查询中构建标识符。例如,它可以添加数据库名称。我还没有真正深入地探究源头。可以说,传递假连接(即undefined)是行不通的;我不知道是否可以实现模拟连接。您的解决方案似乎可行。
您的解决方案的其余部分应该可以正常工作。由于toRawSql它是明确的内部函数,因此这里的 API 看起来很合理。尽管其他人指出“应该”可以生成连接中立的字符串,但它出现在toRawSql.
你提到你不能MonadLogger按照建议使用。你尝试了什么,发生了什么?