Ist es möglich, esqueleto zu verwenden, um eine Abfrage zu erstellen, die einen konstanten Wert zurückgibt? Wie zum Beispiel SELECT 1
.Esqueleto-Abfrage, die konstanten Wert zurückgibt
1
A
Antwort
1
Versuchen Sie folgendes:
import Database.Esqueleto
-- | We have to specialize `val` or else the type inferencer
-- will complain about the `Esqueleto` instance.
val_ :: Int -> SqlExpr (Value Int)
val_ = val
query :: SqlPersistT IO [Value Int]
query = select $ return (val_ 1)
@ chi Kommentar war in der Nähe, aber die 1
benötigt in eine SqlExpr
gehoben werden. val
wird generisch geschrieben und hängt von einer Klasseninstanz Esqueleto
ab. Normalerweise würde der Typinterferenziator dies erfassen, sobald Sie from
verwendet und eine SQL-Tabelle abgerufen haben, aber da nichts davon verfügbar ist, müssen wir uns manuell spezialisieren.
Insgesamt ein gutes Beispiel dafür, wie Typklassen Bedeutungen verschleiern und Menschen zwingen können, sich an Dokumentation oder Foren zu wenden.
Versuchen Sie 'Select (Return 1)' - kann es jetzt nicht überprüfen, aber es könnte funktionieren. – chi
@chi: leider nicht: 'Keine Instanz für (Database.Esqueleto.Internal.Sql.SqlSelect Int r0)' –