@@ -3,6 +3,8 @@
33### Version 0.5
44
55Version 0.5 makes a number of large changes and additions to Squeal.
6+I want to thank folks who contributed issues and pull requests;
7+Raveline, ilyakooo0, chshersh, reygoch, and more.
68
79**Multi-schema support**
810
@@ -218,6 +220,21 @@ automatically applies it, so to upgrade from Squeal 0.4, replace `select`
218220with `select_`. There are also independent `selectDistinct` and `selectDistinct_`
219221functions to filter out duplicate rows.
220222
223+**Query clauses**
224+
225+Previously, Squeal provided a couple versions of `INSERT` depending
226+on whether you wanted to insert `VALUES` or a query.
227+
228+Squeal 0.5 refactors this pattern into a `QueryClause` GADT.
229+
230+```
231+-- Squeal 0.4
232+insertRow_ #tab (Set 2 `as` #col1 :* Default `as` #col2)
233+
234+-- Squeal 0.5
235+insertInto_ #tab (Values (Set 2 `as` #col1 :* Default `as` #col2))
236+```
237+
221238**Window functions and aggregation**
222239
223240Previous versions of Squeal provided no support for window functions.
@@ -329,19 +346,57 @@ to make them easier to compose with other `PQ` actions.
329346
330347**Transactions**
331348
332−**Money**
349+You can now run transactions `ephemerally`, guaranteed to roll back,
350+but return the result or throw the exception that the transaction
351+would have generated. This is useful for testing. You can also
352+`transactionallyRetry` computations, retrying the transaction if
353+a [serialization failure](https://www.postgresql.org/docs/11/transaction-iso.html#XACT-REPEATABLE-READ) occurs.
354+
355+**Types**
333356
334−**Domains**
357+Squeal now supports money via a `Money` Haskell `Type` and a `'PGmoney`
358+`PGType`. Squeal 0.5 also adds support for creating domain types
359+with `createDomain`.
335360
336−**Time operations**
361+**Time**
362+
363+Squeal 0.5 adds support for new functions; `now`, `makeDate`, `makeTime`,
364+, `makeTimestamp`, and `makeTimestamptz`, a function `interval_` for
365+constructing time intervals out multiples of `TimeUnit`s, and a new
366+`TimeOp` class, defining affine space operators for time types and their
367+differences.
337368
338369**Literals**
339370
371+Squeal allows you to include Haskell values in your statements using
372+out of line `parameter`s, but often you want to include them inline,
373+as a SQL `literal`. Squeal 0.5 enables this using the `Literal` class.
374+
340375**Set returning functions**
341376
377+Squeal 0.5 adds support for set returning functions such as `unnest`,
378+with the `RankNType` `SetOfFunction`, which can be used as as a `FromClause`.
379+
342380**Text search**
343381
344−**Lists**
382+Squeal 0.5 adds extensive support for text search types, functions and operators.
383+
384+**Much more**
385+
386+Lots more changes went into and under the hood of the new version.
387+The `Expression` module was split into coherent submodules since it
388+had grown to immense proportions. New modules `Alias`, `PG` and `List`
389+were added to relieve some of the burden that the `Schema` module
390+had been carrying. Rendering has been better unified with a new
391+`RenderSQL` typeclass. Type level list concatenation with the `Additional`
392+typeclass has been added. `Manipulation`s `update` and `delete`
393+were upgraded, so you can leave out fields you don't want to update and
394+use `USING` clauses in deletes. Upserts which were previously broken
395+now work. The `IO` typeclass hierarchy was changed from `MonadBase`
396+and `MonadBaseControl` to `MonadIO` and `MonadUnliftIO`. A new
397+`withRecursive` `Manipulation` was added. `SquealException`s were
398+refactored and a `trySqueal` function added. Arrays were refactored.
399+And there was probably more I've forgotten.
345400
346401### Version 0.4
347402