persistent 2.18.0.0 → 2.18.1.0
raw patch · 6 files changed
+43/−6 lines, 6 files
Files
- ChangeLog.md +8/−1
- Database/Persist/Class/PersistUnique.hs +2/−0
- Database/Persist/Sql.hs +2/−0
- Database/Persist/Sql/Internal.hs +28/−3
- Database/Persist/TH/Internal.hs +2/−1
- persistent.cabal +1/−1
ChangeLog.md view
@@ -1,9 +1,16 @@ # Changelog for persistent +# 2.18.1.0+* [#1616](https://github.com/yesodweb/persistent/pull/1616)+ * Allow overriding the default cascade option for foreign keys. +* [#1608](https://github.com/yesodweb/persistent/pull/1608)+ * Improves documentation on getBy with nullable fields+ * Updates the warning text present when you try to make a Unique field that is nullable+ # 2.18.0.0 * [#1610](https://github.com/yesodweb/persistent/pull/1610)- * Added `NoAction` as a `CascadeAction` + * Added `NoAction` as a `CascadeAction` # 2.17.1.0
Database/Persist/Class/PersistUnique.hs view
@@ -57,6 +57,8 @@ class (PersistStoreRead backend) => PersistUniqueRead backend where -- | Get a record by unique key, if available. Returns also the identifier. --+ -- If your unique key contains a nullable field, then, by default, getBy will not match if any of the fields are NULL.+ -- -- === __Example usage__ -- -- With <#schema-persist-unique-1 schema-1> and <#dataset-persist-unique-1 dataset-1>:
Database/Persist/Sql.hs view
@@ -61,6 +61,8 @@ , emptyBackendSpecificOverrides , getBackendSpecificForeignKeyName , setBackendSpecificForeignKeyName+ , getBackendSpecificForeignKeyCascadeDefault+ , setBackendSpecificForeignKeyCascadeDefault , defaultAttribute -- * Internal
Database/Persist/Sql/Internal.hs view
@@ -10,6 +10,8 @@ , BackendSpecificOverrides (..) , getBackendSpecificForeignKeyName , setBackendSpecificForeignKeyName+ , getBackendSpecificForeignKeyCascadeDefault+ , setBackendSpecificForeignKeyCascadeDefault , emptyBackendSpecificOverrides ) where @@ -36,6 +38,7 @@ data BackendSpecificOverrides = BackendSpecificOverrides { backendSpecificForeignKeyName :: Maybe (EntityNameDB -> FieldNameDB -> ConstraintNameDB)+ , backendSpecificForeignKeyCascadeDefault :: CascadeAction } -- | If the override is defined, then this returns a function that accepts an@@ -61,6 +64,26 @@ setBackendSpecificForeignKeyName func bso = bso{backendSpecificForeignKeyName = Just func} +-- | If the override is defined, then this specifies what cascade action+-- should be used if there is none defined for the column.+--+-- @since 2.18.1.0+getBackendSpecificForeignKeyCascadeDefault+ :: BackendSpecificOverrides+ -> CascadeAction+getBackendSpecificForeignKeyCascadeDefault =+ backendSpecificForeignKeyCascadeDefault++-- | Set the backend's default cascade action.+--+-- @since 2.18.1.0+setBackendSpecificForeignKeyCascadeDefault+ :: CascadeAction+ -> BackendSpecificOverrides+ -> BackendSpecificOverrides+setBackendSpecificForeignKeyCascadeDefault action bso =+ bso{backendSpecificForeignKeyCascadeDefault = action}+ findMaybe :: (a -> Maybe b) -> [a] -> Maybe b findMaybe p = listToMaybe . mapMaybe p @@ -68,7 +91,7 @@ -- -- @since 2.11 emptyBackendSpecificOverrides :: BackendSpecificOverrides-emptyBackendSpecificOverrides = BackendSpecificOverrides Nothing+emptyBackendSpecificOverrides = BackendSpecificOverrides Nothing Restrict defaultAttribute :: [FieldAttr] -> Maybe Text defaultAttribute = findMaybe $ \case@@ -171,9 +194,11 @@ -- explicitly makes migrations run smoother. overrideNothings (FieldCascade{fcOnUpdate = upd, fcOnDelete = del}) = FieldCascade- { fcOnUpdate = upd <|> Just Restrict- , fcOnDelete = del <|> Just Restrict+ { fcOnUpdate = upd <|> Just defaultAction+ , fcOnDelete = del <|> Just defaultAction }+ where+ defaultAction = (backendSpecificForeignKeyCascadeDefault overrides) ref :: FieldNameDB
Database/Persist/TH/Internal.hs view
@@ -1524,7 +1524,8 @@ , "column in question. If you understand this feature of SQL and still " , "intend to add a uniqueness constraint here, *** Use a \"!force\" " , "attribute on the end of the line that defines your uniqueness "- , "constraint in order to disable this check. ***"+ , "constraint in order to disable this check. ***\n"+ , "By default, this means using `getBy`, `insertBy`, or anything that fetches by unique key will NOT match if any of the fields are NULL." ] -- | This function renders a Template Haskell 'Type' for an 'UnboundFieldDef'.
persistent.cabal view
@@ -1,5 +1,5 @@ name: persistent-version: 2.18.0.0+version: 2.18.1.0 license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>