Можно ли использовать esqueleto для создания запроса, который возвращает постоянное значение? Например, SELECT 1
.Запрос Esqueleto, возвращающий постоянное значение
1
A
ответ
1
Попробуйте это:
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)
@ комментарий ци был близок, но 1
нужно поднимать в SqlExpr
. val
записывается в общем виде и зависит от экземпляра класса Esqueleto
. Обычно тип inferencer захватывал бы это, как только вы использовали from
и вытащили бы в SQL-таблицу, но поскольку ни один из них не доступен здесь, мы должны специализироваться вручную.
В целом хороший пример того, как typeclasses могут запутать смысл и заставить людей обращаться к документации или форумам.
Попробуйте 'select (return 1)' - не можете проверить его сейчас, но это может сработать. – chi
@chi: к сожалению нет: 'Нет экземпляра для (Database.Esqueleto.Internal.Sql.SqlSelect Int r0)' –