5.3 KiB
1.2.0.0 (2021-10-22)
New features
- New
$*
and$+
operators for projecting out ofListTable
andNonEmptyTable
respectively (analogous to the existing$?
forMaybeTable
). (#125)
Bug fixes
-
Fix
UPSERT
support (and add tests), which was broken due to a typo inside Rel8 that made it impossible to constructProjection
s which are needed byUPSERT
. (#134) -
Remove
DBMin
andDBMax
instances forBool
, which are invalid as far as Postgres is concerned.and
andor
can be used to achieve the same thing. (#126) -
Fix
aggregateMaybeTable
,aggregateEitherTable
andaggregateTheseTable
, which generated invalid SQL previously. (#127)
Breaking changes
rebind
now takes an additional argument for the "name" of the binding. (#128)
1.1.0.0 (2021-07-16)
New features
-
You can derive
Rel8able
for "vanilla" higher-kinded data types - data types that don't use theColumn
type family. For example, the following is now possible:data MyTable f = MyTable { myTableX :: f Int32 , myTableY :: f Text } deriving (Generic, Rel8able)
-
The
Projectable
andBiprojectable
type classes have been introduced. These classes model a type of functors and bifunctors (respectively) on tables, where the mapping function is only able to rearrange columns. For example, the following is now possible:x <- project myTableX <$> many ...
-
Insert
'sonConflict
field now has a new option -DoUpdate
. This maps to PostgreSQL'sON CONFLICT DO UPDATE
syntax, which provides upsert support. (#85) -
Insert
,Update
andDelete
has all been expanded to work withQuery
s. In particular:Delete
now supports aUSING
sub-queryUpdate
now supports aFROM
sub-queryInsert
can delete the result of any arbitraryQuery
(providing the types match)
-
The new
Rel8.Tabulate
module has been added, which gives aMap
-esque interface to writing and composing queries. (#70) -
The new
indexed
Query -> Query
function was added. This function augments each row in a query with it's 0-based index. (#117)
Breaking changes
-
Insert
,Delete
andUpdate
have all changed. In particular, forInsert
users should now replacerows = xs
withrows = values xs
. (#85) -
Rename
whereExists
andwhereNotExists
topresent
andabsent
respectively. (#57) -
Simplify
evaluate
to run directly inside theQuery
monad, rendering theEvaluate
monad unnecessary. (#56) -
The
Labelable
type class has been removed as it's no longer necessary. This class was mostly internal, though was visible in some public API functions. (#76) -
EitherTable
,ListTable
,MaybeTable
,NonEmptyTable
andTheseTable
now all have an extra parameter which tracks the context of the table. If you manually specified any types before, you need to provide this parameter - usuallyExpr
will be the correct choice. (#101) -
We've done a lot of work to simplify the internals of Rel8, but some of these are breaking changes. However, most of these API changes shouldn't affect users as they are mostly types used in type inference, or affect classes where users don't need to define their own instances.
- The kind of a
Rel8able
is now(Type -> Type) -> Type
. Previously it was(X -> Type) -> Type
. Table
has a new associated type -FromExprs
. This was previously an open type family.Table
has a new associated type -Transpose
- andRecontextualise
has been renamed toTransposes
. ThisTransposes
class now operates in terms ofTranspose
.
- The kind of a
-
select
,insert
,update
anddelete
now produce HasqlStatement
s, rather than actually running the statement as IO. This allows Rel8 to be used with transaction/connection-managing monads likehasql-transaction
. (#94)
Bug fixes
-
Fixes a bug where cartesian products of queries using
catListTable
,catNonEmptyTable
,catList
andcatNonEmpty
would incorrectly be zipped instead. (#61) -
Require Opaleye 0.7.3.0. This version has better support for lateral queries, which can improve query plans, especially in
optional
/LEFT JOIN
(#72) -
Rel8 now compiles with GHC 9. (#97)
Other changes
-
exists
is now implemented in terms of the SQLEXISTS
keyword. (#69) -
alignBy
no longer requiresTable
s. (#67)
1.0.0.1 (2021-06-21)
This release contains various fixes for documentation.
1.0.0.0 (2021-06-18)
- Initial release.