esqueletoを取得してfrom
ステートメントからSQL文字列を生成するにはどうすればよいですか?
のドキュメントにtoRawSql
は、「永続のクエリログをオンにするだけでよい」と書かれています。MonadLogger
理解できるすべての可能な形式を試しましたが、SQLが出力されませんでした。同じドキュメントには、「この関数を手動で使用することは可能ですが、面倒です」とも記載されています。ただし、その型のコンストラクターも、その型の値を返す関数QueryType
もエクスポートされません。私QueryType
はそれがであることに気づきnewtype
、使用することによってこれを回避することができましたunsafeCoerce
!
またConnection
、SQLを生成するためにデータベースに接続する必要はないはずですが、(SQLiteを介して取得した)を提供することを余儀なくされました。
これは私が持っているものです。より良い方法があるに違いありません。
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
SqlPersist
インスタンスを使用してデータベース固有のSQL文字列を生成するためだと思います。