data CumulativeRevenue = CumulativeRevenue
{ payment_date :: T.Text
, amount :: Double
, sum :: Double
} deriving (Show, Generic, Aeson.ToJSON, Aeson.FromJSON)
instance Postgres.FromRow CumulativeRevenue where
fromRow = CumulativeRevenue
<$> Postgres.field
<*> Postgres.field
<*> Postgres.field
cumulativeRevenue :: Postgres.Connection -> IO [CumulativeRevenue]
cumulativeRevenue conn = Postgres.query_ conn
"SELECT payment_date, amount, sum(amount) OVER (ORDER by payment_date) \
\ FROM (\
\ SELECT CAST (payment_date as TEXT) AS payment_date, SUM(amount) AS \
\ amount \
\ FROM payment \
\ GROUP BY CAST(payment_date AS TEXT) \
\ ) p \
\ ORDER BY payment_date \
\"
В настоящее время у меня есть фрагмент кода выше. Полный код здесь . CumulativeRevenue дает исключение, как показано ниже. Вы можете игнорировать часть спока.
Spock Error while handling ["cumulative"]: Incompatible {errSQLType = "numeric", errSQLTableOid = Nothing, errSQLField = "amount", errHaskellType = "Double", errMessage = "types incompatible"}
Мне не ясно, что указывать для полей суммы и суммы в CumulativeRevenue. Может ли кто-нибудь помочь мне с этим? Есть ли какой-нибудь более простой способ выяснить преобразования типов из типов Haskell в типы SQL или наоборот при использовании библиотеки postgres-simple?