persistent
Type-safe, multi-backend data serialization.
http://www.yesodweb.com/book/persistent
Version on this page: | 2.11.0.2 |
LTS Haskell 23.9: | 2.14.6.3 |
Stackage Nightly 2025-02-17: | 2.14.6.3 |
Latest on Hackage: | 2.14.6.3 |
persistent-2.11.0.2@sha256:fe6bcfd7ee67252f5f96fbee786bad846fcc2e7fe3afd4bff5ddc63ec33c4bf1,4735
Module documentation for 2.11.0.2
persistent
Type-safe, data serialization. You must use a specific backend in order to make this useful. For more information, see the chapter in the Yesod book.
Changes
Changelog for persistent
2.11.0.2
- Fix a bug where an empty entity definition would break parsing of
EntityDef
s. #1176
2.11.0.1
- Docs/Bugs fixes #1153
- Fix documentation on
FieldDef.fieldAttrs
. - Postgresql backend: Add a space in cascade clause of generated SQL.
- Fix documentation on
2.11.0.0
-
Foreign Key improvements #1121
- It is now supported to refer to a table with an auto generated Primary Kay
- It is now supported to refer to non-primary fields, using the keyword
References
- It is now supported to have cascade options for simple/single-field Foreign Keys
-
Introduces a breaking change to the internal function
mkColumns
, which can now be passed a record of functions to override its default behavior. #996 -
Added explicit
forall
notation to make most API functions play nice when usingTypeApplications
. (e.g. instead ofselectList @_ @_ @User [] []
, you can now writeselectList @User [] []
) #1006 -
- The QuasiQuoter now supports
OnDelete
andOnUpdate
cascade options.
- The QuasiQuoter now supports
-
- Field and constraint labels generated by TH can now be customized.
- mpsPrefixFields is deprecated in favor of using these customisation functions.
-
- Instance for
Natural
is removed. SeeOverflowNatural
for a replacement and rationale on why.
- Instance for
-
- A new class member
keyFromRecordM
allows you to construct aKey record
from arecord
if it was defined withPrimary
.
- A new class member
-
- The method
entityIdFromJSON
that is used to parse entities now correctly works for entities that define a customPrimary
key.
- The method
-
- Modify
upsertBy
to use backend-specific implementation (if any).
- Modify
-
- You can set a column’s
sql=id
for a nonId
column.
- You can set a column’s
-
Fix a bug where unsafe migration error messages were being shown using
Show
prior to printing, resulting in less helpful output. #1080 -
RawSql
now has tuple instances up to GHC’s max tuple size (62)
-
Loc
is now imported frommonad-logger
as opposed totemplate-haskell
. Removestemplate-haskell
as an explicit dependency.
-
- Remove unnecessary deriving of
Typeable
.
- Remove unnecessary deriving of
-
- Remove
Monad
constraint onentityDef
- Remove
-
-
Remove deriving of
Show
for uniques. Users that need aShow
instance can put a standalone deriving instance:deriving stock instance Show (Unique User)
-
-
- Add an
exists
function to thePersistQueryRead
type class.
- Add an
-
- Allow parsing UTCTimes from sqlite with the format “%F %T%Q” as well, instead of only “%FT%T%Q”.
-
- A new function
checkUniqueUpdateable
allows you to check uniqueness constraints on an entity update without having to update it.
- A new function
-
- Deprecate
hasCompositeKey
in favor ofhasCustomPrimaryKey
andhasCompositePrimaryKey
functions.
- Deprecate
-
- Add support for configuring the number of stripes and idle timeout for connection pools
- For functions that do not specify an idle timeout, the default has been bumped to 600 seconds.
- This change is based off the experience of two production codebases. See #775
- Add a new type
ConnectionPoolConfig
to configure the number of connections in a pool, their idle timeout, and stripe size. - Add
defaultConnectionPoolConfig
to create aConnectionPoolConfig
- Add
createSqlPoolWithConfig
andwithSqlPoolWithConfig
, which take this new data type
- For functions that do not specify an idle timeout, the default has been bumped to 600 seconds.
- Add support for configuring the number of stripes and idle timeout for connection pools
-
-
Adds a new constructor,
PersistLiteral ByteString
toPersistValue
to support unescaped SQL literals.- Obviously, this is highly unsafe, and you should never use it with user input.
-
Adds a new field,
cGenerated :: Maybe Text
toColumn
for backend-specific support of generated columns.- Express generated fields in the Persistent DSL
GeneratedColumnExample fieldOne Text Maybe fieldTwo Text Maybe fieldThree Text Maybe generated=COALESCE(field_one,field_two)
- Support for MySQL >= 5.7. (No version checking is performed! Using this feature with older versions of MySQL will cause runtime SQL exceptions!)
- Support for Postgresql >= 12. (No version checking is performed! Using this feature with older versions of Postgresql will cause runtime SQL exceptions!)
- Support for SQLite >= 3.31 (same caveat applies; support added in #1152 )
-
-
- Allow
OverloadedLabels
to be used with theEntityField
type.
- Allow
2.10.5.2
- #1041
- Explicit foreign keys can now reference tables with custom sql name
- Add qualified names to the stock classes list.
2.10.5.1
- #1024
- Add the ability to do documentation comments in entity definition syntax. Unfortunately, TemplateHaskell cannot add documentation comments, so this can’t be used to add Haddocks to entities.
- Add Haddock explainers for some of the supported entity syntax in
Database.Persist.Quasi
2.10.5
- Add the
EntityWithPrefix
type to allow users to specify a custom prefix for raw SQL queries. #1018 - Added Acquire based API to
Database.Persist.Sql
for working with connections/pools in monads which aren’t MonadUnliftIO. #984
2.10.4
- Log exceptions when closing a connection fails. See point 1 in yesod #1635. #978
2.10.3
- Added support for GHC 8.8 about MonadFail changes #976
2.10.2
- Added
runMigrationQuiet
andrunMigrationUnsafeQuiet
toDatabase.Persist.Sql.Migration
as safer alternatives torunMigrationSilent
. #971 This functions as workaround/fix for: #966, #948, #640, and #474 - Added RawSql instances for 9, 10, 11 and 12-column results. #961
2.10.1
- Added
constraint=
attribute to allow users to specify foreign reference constraint names.
2.10.0
- Added two type classes
OnlyOneUniqueKey
andAtLeastOneUniqueKey
. These classes are used as constraints on functions that expect a certain amount of unique keys. They are defined automatically as part of thepersistent-template
’s generation. #885 - Add the
entityComments
field to theEntityDef
datatype, andfieldComments
fields to theFieldDef
datatype. The QuasiQuoter does not currently know how to add documentation comments to these types, but it can be expanded later. #865 - Expose the
SqlReadT
andSqlWriteT
constructors. #887 - Remove deprecated
Connection
type synonym. Please useSqlBackend
instead. #894 - Remove deprecated
SqlPersist
type synonym. Please useSqlPersistT
instead. #894 - Alter the type of
connUpsertSql
to take a list of unique definitions. This paves the way for more efficient upsert implementations. #895
2.9.2
- Add documentation for the
Migration
type and some helpers. #860
2.9.1
- Fix #847: SQL error with
putMany
on Sqlite when Entity has no unique index.
2.9.0
- Added support for SQL isolation levels to via SqlBackend. [#812]
- Move
Database.Persist.Sql.Raw.QQ
to a separatepersistent-qq
package #827 - Fix 832:
repsertMany
now matchesmapM_ (uncurry repsert)
and is atomic for supported sql back-ends.
2.8.2
- Added support for
sql=
to the unique constraints quasi-quoter so that users can specify the database names of the constraints.
2.8.1
- DRY-ed up and exposed several util functions in
Database.Persist.Sql.Util
.- Upstream-ed
updatePersistValue
,mkUpdateText
, andcommaSeparated
fromDatabase.Persist.MySQL
. - De-duplicated
updatePersistValue
from variousDatabase.Persist.Sql.Orphan.*
modules.
- Upstream-ed
- Batching enhancements to reduce db round-trips.
- Added
getMany
andrepsertMany
for batchedget
andrepsert
. - Added
putMany
with a default/slow implementation. SqlBackend’s that support native UPSERT should override this for batching enhancements. - Updated
insertEntityMany
to replace slow looped usage with batched execution.
- Added
- See #770
2.8.0
- Switch from
MonadBaseControl
toMonadUnliftIO
- Reapplies #723, which was reverted in version 2.7.3.
2.7.3.1
- Improve error messages when failing to parse database results into Persistent records. #741
- A handful of
fromPersistField
implementations callederror
instead of returning aLeft Text
. All of the implementations were changed to returnLeft
. #741 - Improve error message when a SQL insert fails with a custom primary key #757
2.7.3
- Reverts #723, which generalized functions using the
BackendCompatible
class. These changes were an accidental breaking change. - Recommend the
PersistDbSpecific
docs if someone gets an error about converting fromPersistDbSpecific
2.7.2 [DEPRECATED ON HACKAGE]
- Many of the functions have been generalized using the
BackendCompatible
class. #723- This change was an accidental breaking change and was reverted in 2.7.3.
- These change will be released in a future version of Persistent with a major version bump.
- Add raw sql quasi quoters #717
2.7.1
2.7.0
- Fix upsert behavior #613
- Atomic upsert query fixed for arithmatic operations #662
- Haddock and test coverage improved for upsert
2.6.1
- Fix edge case for
\<-. [Nothing]
- Introduce
connMaxParams
- Add ‘getJustEntity’ and ‘insertRecord’ convenience function
- Minor Haddock improvment
2.6
- Add
connUpsertSql
type for providing backend-specific upsert sql support.
2.5
- read/write typeclass split
- add insertOrGet convenience function to PersistUnique
2.2.4.1
- Documentation updates #515
2.2.4
- Workaround for side-exiting transformers in
runSqlConn
#516
2.2.3
- PersistField instance for Natural
- better oracle support in odbc
2.2.2
- Add liftSqlPersistMPool function
- support http-api-data for url serialization
2.2.1
- Migration failure message with context
- Fix insertKey for composite keys
2.2
- Add a
RawSql
instance forKey
. This allows selecting primary keys using functions likerawSql
. #407 - SqlBackend support for an optimized
insertMany
2.1.6
Important! If persistent-template is not upgraded to 2.1.3.3
you might need to make sure Int64
is in scope for your model declarations.
- add showMigration function
- explicitly use Int64 for foreign key references
2.1.5
Add dbIdColumnsEsc
to Sql.Utils.
Used in persistent-postgresql 2.1.5.2
2.1.4
- Fix getBy with a primary key. #342
2.1.3
- Break self-referencing cycles in the entity declarations
2.1.2
- Error with
Double
s without a decimal part #378 runSqlPool
does not perform timeout checks.
2.1.1.6
- One extra feature for #939: use
logDebugN
instead
2.1.1.5
- Better SQL logging Yesod issue #939
2.1.1.3
Parse UTCTime in 8601 format #339
2.1.1.1
Support for monad-control 1.0