Bagaimana saya bisa membuat esqueleto menghasilkan string SQL dari from
pernyataan?
Dokumentasi toRawSql
mengatakan bahwa "Anda hanya dapat mengaktifkan pencatatan kueri yang persisten". Saya mencoba semua kemungkinan bentuk MonadLogger
yang bisa saya mengerti, tetapi tidak pernah mencetak SQL apa pun. Dokumentasi yang sama juga mengatakan "secara manual menggunakan fungsi ini ... mungkin tetapi membosankan". Namun, tidak ada konstruktor tipe, atau fungsi apa pun yang mengembalikan nilai tipe, QueryType
yang diekspor. Saya berhasil menyiasati ini dengan memperhatikan bahwa QueryType
a newtype
dan menggunakan unsafeCoerce
!
Saya juga dipaksa untuk menyediakan Connection
(yang saya dapatkan melalui SQLite) meskipun seharusnya tidak perlu terhubung ke database untuk menghasilkan SQL.
Inilah yang saya punya. Pasti ada cara yang lebih baik.
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
contoh yang disimpulkan untuk menghasilkan string SQL khusus database.Jawaban:
Sejak pertanyaan ini diposting,
esqueleto
telah melalui sejumlah revisi besar. Sejak versi 2.1.2 , dan beberapa versi sebelumnya,QueryType a
parameter yang mengharuskan AndaunsafeCoerce
telah dihapustoRawSql
; kutil mayor itu tidak lagi diperlukan.Seperti yang saat ini diterapkan,
Connection
diperlukan. Saya percaya bahwa, seperti yang ditunjukkan oleh nama sinonim tipeIdentInfo
,,esqueleto
menggunakan ini untuk membangun pengidentifikasi dalam kueri. Mungkin, misalnya, menambahkan nama database. Saya belum benar-benar menggali sumbernya secara cukup mendalam. Cukuplah untuk mengatakan, melewatkan koneksi palsu (yaituundefined
) tidak berhasil; Saya tidak tahu apakah koneksi tiruan dapat diterapkan. Solusi Anda tampaknya bisa diterapkan.Solusi lainnya seharusnya berfungsi dengan baik. Karena
toRawSql
secara eksplisit merupakan fungsi internal, API di sini tampaknya masuk akal. Meskipun orang lain mencatat bahwa "seharusnya" dapat menghasilkan string koneksi netral, yang muncul di luar cakupantoRawSql
.Anda menyebutkan bahwa Anda tidak dapat menggunakan
MonadLogger
seperti yang disarankan. Apa yang Anda coba, dan apa yang terjadi?sumber
MonadLogger
Sayangnya saya tidak ingat dengan apa yang saya coba . Sudah lama sekali.toRawSql
berfungsi untuk kasus penggunaan pertanyaan ini sekarang? Saya menyiapkanesqueleto
lingkungan untuk mencobanya, tetapi saya belum punya waktu untuk mencari tahupersistent
dan semua mesin lain untuk benar-benar membangun dan menggunakan kueri yang sebenarnya.