Add a castTable call to each

If a `Table`'s types line up exactly with Postgres' types, which in they should, then this is a no-op, but if they don't, this makes things a bit safer.

In particular, arrays of custom domain types only became possible in Postgres 11. This change makes `some` and `many` somewhat usable on tables containing such types in earlier versions of Postgres.
This commit is contained in:
Shane O'Brien 2021-11-03 11:32:04 +00:00
parent ae4607aa80
commit f38f30a2e2
No known key found for this signature in database
GPG Key ID: 35A00ED1B695C1A1

View File

@ -17,16 +17,14 @@ import Rel8.Query ( Query )
import Rel8.Query.Opaleye ( fromOpaleye )
import Rel8.Schema.Name ( Selects )
import Rel8.Schema.Table ( TableSchema )
import Rel8.Table.Cols ( fromCols, toCols )
import Rel8.Table.Opaleye ( table, unpackspec )
import Rel8.Table.Opaleye ( castTable, table, unpackspec )
-- | Select each row from a table definition. This is equivalent to @FROM
-- table@.
each :: Selects names exprs => TableSchema names -> Query exprs
each =
fmap fromCols .
fmap castTable .
fromOpaleye .
Opaleye.selectTableExplicit unpackspec .
table .
fmap toCols
table