3.6.0.0 ======= - @parsonsmatt - [#422](https://github.com/bitemyapp/esqueleto/pull/422) - The instance of `HasField` for `SqlExpr (Maybe (Entity a))` joins `Maybe` values together. This means that if you `leftJoin` a table with a `Maybe` column, the result will be a `SqlExpr (Value (Maybe typ))`, instead of `SqlExpr (Value (Maybe (Maybe typ)))`. - To make this a less breaking change, `joinV` has been given a similar behavior. If the input type to `joinV` is `Maybe (Maybe typ)`, then the result becomes `Maybe typ`. If the input type is `Maybe typ`, then the output is also `Maybe typ`. The `joinV'` function is given as an alternative with monomorphic behavior. - The `just` function is also modified to avoid nesting `Maybe`. Likewise, `just'` is provided to give monomorphic behavior. - `subSelect`, `max_`, `min_`, and `coalesce` were all given `Nullable` output types as well. This should help to reduce the incidence of nested `Maybe`. - The operator `??.` was introduced which can do nested `Maybe`. You may want this if you have type inference issues with `?.` combining `Maybe`. - [#420](https://github.com/bitemyapp/esqueleto/pull/420) - Add a fixity declaration to `?.` - [#412](https://github.com/bitemyapp/esqueleto/pull/412) - The `random_` and `rand` functions (deprecated in 2.6.0) have been removed. Please refer to the database specific ones (ie `Database.Esqueleto.PostgreSQL` etc) - The `sub_select` function (deprecated in 3.2.0) has been removed. Please use the safer variants like `subSelect`, `subSelectMaybe`, etc. - The `ToAliasT` and `ToAliasReferenceT` types has been removed after having been deprecated in 3.4.0.1. - The `Union` type (deprecated in 3.4) was removed. Please use `union_` instead. - The `UnionAll` type (deprecated in 3.4) was removed. Please use `unionAll_` instead. - The `Except` type (deprecated in 3.4) was removed. Please use `except_` instead. - The `Intersect` type (deprecated in 3.4) was removed. Please use `intersect_` instead. - The `SubQuery` type (deprecated in 3.4) was removed. You do not need to tag subqueries to use them in `from` clauses. - The `SelectQuery` type (deprecated in 3.4) was removed. You do not need to tag `SqlQuery` values with `SelectQuery`. - [#287](https://github.com/bitemyapp/esqueleto/pull/278) - Deprecate `distinctOn` and `distinctOnOrderBy`. Use the variants defined in `PostgreSQL` module instead. The signature has changed, but the refactor is straightforward: ``` -- old: p <- from $ table distinctOn [don x] $ do pure p -- new: p <- from $ table distinctOn [don x] pure p ``` - [#301](https://github.com/bitemyapp/esqueleto/pull/301) - Postgresql `upsert` and `upsertBy` now require a `NonEmpty` list of updates. If you want to provide an empty list of updates, you'll need to use `upsertMaybe` and `upsertMaybeBe` instead. Postgres does not return rows from the database if no updates are performed. - [#413](https://github.com/bitemyapp/esqueleto/pull/413) - The ability to `coerce` `SqlExpr` was removed. Instead, use `veryUnsafeCoerceSqlExpr`. See the documentation on `veryUnsafeCoerceSqlExpr` for safe use example. - [#420](https://github.com/bitemyapp/esqueleto/pull/421) - The `LockingKind` constructors are deprecated, and will be removed from non-Internal modules in a future release. Smart constructors replace them, and you may need to import them from a different database-specific module. 3.5.14.0 ======== - @parsonsmatt - [#415](https://github.com/bitemyapp/esqueleto/pull/415) - Export the `SqlSelect` type from `Database.Esqueleto.Experimental` - [#414](https://github.com/bitemyapp/esqueleto/pull/414) - Derive `Foldable` and `Traversable` for `Value`. - [#416](https://github.com/bitemyapp/esqueleto/pull/416) - Derive `Functor` and `Bifunctor` for `:&` - @matthewbauer - [#341](https://github.com/bitemyapp/esqueleto/pull/341/) - Add functions for `NULLS FIRST` and `NULLS LAST` in the Postgresql module - @JoelMcCracken - [#354](https://github.com/bitemyapp/esqueleto/pull/354), [#417](https://github.com/bitemyapp/esqueleto/pull/417) - Add `withMaterialized`, `withNotMaterialized` to the PostgreSQL module 3.5.13.2 ======== - @blujupiter32 - [#379](https://github.com/bitemyapp/esqueleto/pull/379) - Fix a bug where `not_ (a &&. b)` would be interpeted as `(not_ a) &&. b` - @RikvanToor - [#373](https://github.com/bitemyapp/esqueleto/pull/373), [#410](https://github.com/bitemyapp/esqueleto/pull/410) - Fix name clashes when using CTEs multiple times - @TeofilC - [#394](https://github.com/bitemyapp/esqueleto/pull/394) - Use TH quotes to eliminate some CPP. - @parsonsmatt, @jappeace - [#346](#https://github.com/bitemyapp/esqueleto/pull/346), [#411](https://github.com/bitemyapp/esqueleto/pull/411) - Add docs for more SQL operators 3.5.13.1 ======== - @csamak - [#405](https://github.com/bitemyapp/esqueleto/pull/405) - Fix a bug introduced in 3.5.12.0 where deriveEsqueletoRecord incorrectly errors 3.5.13.0 ======== - @ac251 - [#402](https://github.com/bitemyapp/esqueleto/pull/402) - Add `forNoKeyUpdate` and `forKeyShare` locking kinds for postgres 3.5.12.0 ======== - @csamak - [#405](https://github.com/bitemyapp/esqueleto/pull/405) - `ToMaybe` instances are now derived for Maybe records. See [Issue #401](https://github.com/bitemyapp/esqueleto/issues/401). 3.5.11.2 ======== - @arguri - [#387](https://github.com/bitemyapp/esqueleto/pull/387) - Fix build for ghc 9.8.1 / template-haskell 2.18 3.5.11.0 ======== - @9999years, @halogenandtoast - [#378](https://github.com/bitemyapp/esqueleto/pull/378) - `ToMaybe` instances are now derived for records so you can now left join them in queries 3.5.10.3 ======== - @ttuegel - [#377](https://github.com/bitemyapp/esqueleto/pull/377) - Fix Postgres syntax for `noWait` 3.5.10.2 ======== - @parsonsmatt - [#376](https://github.com/bitemyapp/esqueleto/pull/376) - When using Postgres 15, `LIMIT`, and the `locking` functions, you could accidentally construct SQL code like: > ... LIMIT 1FOR UPDATE ... This parsed on Postgres <15, but the new Postgres parser is more strict, and fails to parse. This PR introduces newlines between each query chunk, which fixes the issue. 3.5.10.1 ======== - @9999years - [#369](https://github.com/bitemyapp/esqueleto/pull/369) - Fix `myAge` type in `deriveEsqueletoRecord` documentation 3.5.10.0 ======== - @ivanbakel - [#328](https://github.com/bitemyapp/esqueleto/pull/328) - Add `ToAlias` instances for 9- to 16-tuples - Add `ToAliasReference` instances for 9- to 16-tuples - @parsonsmatt - [#365](https://github.com/bitemyapp/esqueleto/pull/365) - Add `isNothing_` and `groupBy_` to avoid name conflicts with `Data.List` and `Data.Maybe`. 3.5.9.1 ======= - @duplode - [#363](https://github.com/bitemyapp/esqueleto/pull/363) - Add missing `just` to left join examples in the Haddocks 3.5.9.0 ======= - @9999years - [#350](https://github.com/bitemyapp/esqueleto/pull/350) - Add `GetFirstTable`, `getTable`, `getTableMaybe` helpers for selecting tables from `:&` chains - @josephsumabat - [#339](https://github.com/bitemyapp/esqueleto/pull/333) - Add `forUpdateOf`, `forShareOf` locking kinds for postgres - @parsonsmatt - [#342](https://github.com/bitemyapp/esqueleto/pull/342) - Create a `TypeError` instance for `Functor SqlExpr`, adding documentation and work arounds for the need. - @9999years - [#327](https://github.com/bitemyapp/esqueleto/pull/327) - Fixed a Haddock typo causing documentation to render incorrectly 3.5.8.1 ======= - @belevy - [#336](https://github.com/bitemyapp/esqueleto/pull/336) - Fix bug with multiple nested subqueries introduced in 3.5.7.1 - Set operations will now only reuse variable names within the context of the set operation. a subquery that references the set operation will correctly pick up where the subquery left off 3.5.8.0 ======= - @ivanbakel - [#331](https://github.com/bitemyapp/esqueleto/pull/331) - Add `deriveEsqueletoRecordWith` to derive Esqueleto instances for records using custom deriving settings. - Add `DeriveEsqueletoRecordSettings` to control how Esqueleto record instances are derived. - Add `sqlNameModifier` to control how Esqueleto record instance deriving generates the SQL record type name. - Add `sqlFieldModifier` to control how Esqueleto record instance deriving generates the SQL record fields. 3.5.7.1 ======= - @belevy - [#334](https://github.com/bitemyapp/esqueleto/pull/334) - Fix alias name bug with union and subselect 3.5.7.0 ======= - @ivanbakel - [#329](https://github.com/bitemyapp/esqueleto/pull/329) - Add `ToAlias` and `ToAliasReference` instances to the type produced by `deriveEsqueletoRecord`, allowing in-SQL records to be used in CTEs - @9999years - [#324](https://github.com/bitemyapp/esqueleto/pull/324) - Add ability to use nested records with `deriveEsqueletoRecord` 3.5.6.0 ======= - @9999years - [#323](https://github.com/bitemyapp/esqueleto/pull/323) - Add ability to derive esqueleto instances for records 3.5.5.0 ======= - @parsonsmatt - [#317](https://github.com/bitemyapp/esqueleto/pull/317) - Add `Eq` and `Show` instances to `:&` 3.5.4.2 ======= - @parsonsmatt - [#318](https://github.com/bitemyapp/esqueleto/pull/318) - Remove use of `SqlReadT` and `SqlWriteT` type alias so that Simplified Subsumption doesn't bite end users 3.5.4.1 ======= - @parsonsmatt - [#312](https://github.com/bitemyapp/esqueleto/pull/312/) - Support `persistent-2.14.0.0` 3.5.4.0 ======= - @parsonsmatt - [#310](https://github.com/bitemyapp/esqueleto/pull/310) - Add instances of `HasField` for `SqlExpr (Entity rec)` and `SqlExpr (Maybe (Entity rec))`. These instances allow you to use the `OverloadedRecordDot` language extension in GHC 9.2 with SQL representations of database entities. 3.5.3.2 ======= - @parsonsmatt - [#309](https://github.com/bitemyapp/esqueleto/pull/309) - Bump `time` version bound 3.5.3.1 ======= - @jappeace - [#303](https://github.com/bitemyapp/esqueleto/pull/303) - Added docs for delete function for new experimental API. 3.5.3.0 ======= - @m4dc4p - [#291](https://github.com/bitemyapp/esqueleto/pull/291) - Added `ToAlias` and `ToAliasReference` instaces to the `:&` type, mirroring the tuple instances for the same classes. See [Issue #290](https://github.com/bitemyapp/esqueleto/issues/290) for discussion. - @NikitaRazmakhnin - [#284](https://github.com/bitemyapp/esqueleto/pull/284) - Add PostgreSQL-specific support of VALUES(..) literals 3.5.2.2 ======= - @NikitaRazmakhnin - [#278](https://github.com/bitemyapp/esqueleto/pull/278) - Fix generating of bad sql using nexted expressions with `distinctOnOrderBy`. 3.5.2.1 ======= - @cdparks - [#273](https://github.com/bitemyapp/esqueleto/pull/273) - Avoid generating an empty list as the left operand to `NOT IN`. 3.5.2.0 ======= - @ivanbakel - [#268](https://github.com/bitemyapp/esqueleto/pull/268) - Added `SqlSelect` instance for `(:&)`, allowing it to be returned from queries just like `(,)` tuples. 3.5.1.0 ======= - @ibarrae - [#265](https://github.com/bitemyapp/esqueleto/pull/265) - Added `selectOne` 3.5.0.0 ======= - @belevy - [#228](https://github.com/bitemyapp/esqueleto/pull/228) - Destroy all GADTs; Removes the From GADT and SqlExpr GADT - From GADT is replaced with a From data type and FromRaw - SqlExpr is now all defined in terms of ERaw - Modified ERaw to contain a SqlExprMeta with any extra information that may be needed - Experimental top level is now strictly for documentation and all the implementation details are in Experimental.* modules - @parsonsmatt - [#259](https://github.com/bitemyapp/esqueleto/pull/259) - Create the `Database.Esqueleto.Legacy` module. The `Database.Esqueleto` module now emits a warning, directing users to either import `Database.Esqueleto.Legacy` to keep the old behavior or to import `Database.Esqueleto.Experimental` to opt in to the new behavior. - Deleted the deprecated modules `Database.Esqueleto.Internal.{Language,Sql}`. Please use `Database.Esqueleto.Internal.Internal` instead, or ideally post what you need from the library so we can support you safely. - Support GHC 9 3.4.2.2 ======= - @parsonsmatt - [#255](https://github.com/bitemyapp/esqueleto/pull/255) - Fix a bug where a composite primary key in a `groupBy` clause would break. 3.4.2.1 ======= - @parsonsmatt - [#245](https://github.com/bitemyapp/esqueleto/pull/245) - Support `persistent-2.13` 3.4.2.0 ======= - @parsonsmatt - [#243](https://github.com/bitemyapp/esqueleto/pull/243) - Support `persistent-2.12` 3.4.1.1 ======= - @MaxGabriel - [#240](https://github.com/bitemyapp/esqueleto/pull/240/files) - Improve recommend hlint to avoid doing `x = NULL` SQL queries 3.4.1.0 ======= - @arthurxavierx - [#238](https://github.com/bitemyapp/esqueleto/pull/238) - Fix non-exhaustive patterns in `unsafeSqlAggregateFunction` - @Vlix - [#232](https://github.com/bitemyapp/esqueleto/pull/232) - Export the `ValidOnClauseValue` type family 3.4.0.1 ======= - @arthurxavierx - [#221](https://github.com/bitemyapp/esqueleto/pull/221) - Deprecate `ToAliasT` and `ToAliasReferenceT` - @parsonsmatt - [#226](https://github.com/bitemyapp/esqueleto/pull/226) - Support `persistent-2.11` - @belevy - [#225](https://github.com/bitemyapp/esqueleto/pull/225) - Simplify `ToFromT` extracting the overlapping and type error instances - Make `ToFromT` and associated type family of `ToFrom` 3.4.0.0 ======= - @belevy, @charukiewicz - [#215](https://github.com/bitemyapp/esqueleto/pull/215) - Added support for common table expressions (`with`, `withRecursive`) - Added support for lateral JOINs with updated example (Example #6) - Deprecated `SelectQuery`, removing the neccessity to tag `SqlQuery` values - Deprecated use of data constructors for SQL set operations (replaced with functions) - Refactored module structure to fix haddock build (fixes build from `3.3.4.0`) 3.3.4.1 ======= - @maxgabriel - [#214](https://github.com/bitemyapp/esqueleto/pull/214) - Add suggested hlint rules for proper `isNothing` usage 3.3.4.0 ======= - @parsonsmatt - [#205](https://github.com/bitemyapp/esqueleto/pull/205) - More documentation on the `Experimental` module - `Database.Esqueleto.Experimental` now reexports `Database.Esqueleto`, so the new "approved" import syntax is less verbose. Before, you'd write: ```haskell import Database.Esqueleto hiding (from, on) import Database.Esqueleto.Experimental ``` Now you can merely write: ```haskell import Database.Esqueleto.Experimental ``` Users will get 'redundant import' warnings if they followed the original syntax, the solution is evident from the error message provided. 3.3.3.3 ======= - @belevy - [#191](https://github.com/bitemyapp/esqueleto/pull/191) - Bugfix rollup: Fix issue with extra characters in generated SQL; Fix ToAliasReference for already referenced values; Fix Alias/Reference for Maybe Entity - @maxgabriel - [#203](https://github.com/bitemyapp/esqueleto/pull/203) Document `isNothing` - @sestrella - [#198](https://github.com/bitemyapp/esqueleto/pull/198) - Allow PostgreSQL aggregate functions to take a filter clause 3.3.3.2 ======== - @maxgabriel - [#190](https://github.com/bitemyapp/esqueleto/pull/190) Further document and test `ToBaseId` 3.3.3.1 ======== - @belevy - [#189](https://github.com/bitemyapp/esqueleto/pull/189) - Fix bug in function calls with aliased values introduced by SubQuery joins. 3.3.3.0 ======== - @belevy - [#172](https://github.com/bitemyapp/esqueleto/pull/172) - Introduce new experimental module for joins, set operations (eg UNION), and safer queries from outer joins. 3.3.2 ======== - @belevy - [#177](https://github.com/bitemyapp/esqueleto/pull/177) Fix natural key handling in (^.) 3.3.1.1 ======== - @parsonsmatt - [#170](https://github.com/bitemyapp/esqueleto/pull/170) Add documentation to `groupBy` to explain tuple nesting. 3.3.1 ======== - @charukiewicz, @belevy, @joemalin95 - [#167](https://github.com/bitemyapp/esqueleto/pull/167): Exposed functions that were added in `3.3.0` 3.3.0 ======== - @charukiewicz, @belevy, @joemalin95 - [#166](https://github.com/bitemyapp/esqueleto/pull/166): Add several common SQL string functions: `upper_`, `trim_`, `ltrim_`, `rtrim_`, `length_`, `left_`, `right_` 3.2.3 ======== - @hdgarrood - [#163](https://github.com/bitemyapp/esqueleto/pull/163): Allow `unsafeSqlFunction` to take up to 10 arguments without needing to nest tuples. 3.2.2 ======== - @parsonsmatt - [#161](https://github.com/bitemyapp/esqueleto/pull/161/): Fix an issue where nested joins didn't get the right on clause. 3.2.1 ======== - @parsonsmatt - [#159](https://github.com/bitemyapp/esqueleto/pull/159): Add an instance of `UnsafeSqlFunction ()` for 0-argument SQL functions. 3.2.0 ======== - @parsonsmatt - [#153](https://github.com/bitemyapp/esqueleto/pull/153): Deprecate `sub_select` and introduce `subSelect`, `subSelectMaybe`, and `subSelectUnsafe`. - @parsonsmatt - [#156](https://github.com/bitemyapp/esqueleto/pull/156): Remove the restriction that `on` clauses must appear in reverse order to the joining tables. 3.1.3 ======== - @JoseD92 - [#155](https://github.com/bitemyapp/esqueleto/pull/149): Added `insertSelectWithConflict` postgres function. 3.1.2 ======== - @tippenein - [#149](https://github.com/bitemyapp/esqueleto/pull/157): Added `associateJoin` query helpers. 3.1.1 ======= - @JoseD92 - [#149](https://github.com/bitemyapp/esqueleto/pull/149): Added `upsert` support. - @parsonsmatt - [#133](https://github.com/bitemyapp/esqueleto/pull/133): Added `renderQueryToText` and related functions. 3.1.0 ======= - @Vlix - [#128](https://github.com/bitemyapp/esqueleto/pull/128): Added `Database.Esqueleto.PostgreSQL.JSON` module with JSON operators and `JSONB` data type. - @ibarrae - [#127](https://github.com/bitemyapp/esqueleto/pull/127): Added `between` and support for composite keys in `unsafeSqlBinOp`. 3.0.0 ======= - @parsonsmatt - [#122](https://github.com/bitemyapp/esqueleto/pull/122): Support `persistent-2.10.0`. This is a breaking change due to the removal of deprecated exports from the `persistent` library. - [#113](https://github.com/bitemyapp/esqueleto/pull/113): Remove the `esqueleto` type class. To migrate here, use `SqlExpr`, `SqlQuery`, and `SqlBackend` instead of using the polymorphic `Esqueleto sqlExpr sqlQuery sqlBackend => ...` types. 2.7.0 ======= - @parsonsmatt - [#117](https://github.com/bitemyapp/esqueleto/pull/117): Removed `sqlQQ` and `executeQQ` functions from export, fixing doc build and building with `persistent` >= 2.9 2.6.1 ======= - @ChrisCoffey - [#114](https://github.com/bitemyapp/esqueleto/pull/114): Fix Haddock by working around an upstream bug. 2.6.0 ======== - @bitemyapp - Reorganized dependencies, decided to break compatibility for Conduit 1.3, Persistent 2.8, and `unliftio`. - Moved tests for `random()` into database-specific test suites. - Deprecated Language `random_`, split it into database-specific modules. - @parsonsmatt - Added support for `PersistQueryRead`/`PersistQueryWrite`, enabling type-safe differentation of read and write capabilities. - https://github.com/bitemyapp/esqueleto/pull/66 - @sestrella - Added support for `arrayAggDistinct` and `arrayRemove`. - https://github.com/bitemyapp/esqueleto/pull/65 - https://github.com/bitemyapp/esqueleto/pull/66 - @mheinzel - Fixed JOIN syntax in the documentation https://github.com/bitemyapp/esqueleto/pull/60 - @illmade - Added instructions for running database specific tests - https://github.com/bitemyapp/esqueleto/pull/64 - @FintanH - Removed CPP from the test suite, split the database-specific tests into their own respective modules. - https://github.com/bitemyapp/esqueleto/pull/48 - Added support for PostgreSQL's `now()` - https://github.com/bitemyapp/esqueleto/pull/46 - Added a comprehensive examples project to make practical application of Esqueleto easier. - https://github.com/bitemyapp/esqueleto/pull/40 - @EdwardBetts - Fixed a spelling error - https://github.com/bitemyapp/esqueleto/pull/52