Update src/Rel8/Expr/Default.hs

Co-authored-by: Shane <shane.obrien@circuithub.com>
This commit is contained in:
Ollie Charles 2021-06-29 19:47:10 +04:00 committed by Shane O'Brien
parent 6950d691ba
commit 12d242c479
No known key found for this signature in database
GPG Key ID: 35A00ED1B695C1A1
3 changed files with 39 additions and 1 deletions

View File

@ -66,6 +66,7 @@ library
Rel8.Expr.Aggregate
Rel8.Expr.Array
Rel8.Expr.Bool
Rel8.Expr.Default
Rel8.Expr.Eq
Rel8.Expr.Function
Rel8.Expr.Null

View File

@ -250,14 +250,15 @@ module Rel8
, Insert(..)
, OnConflict(..)
, insert
, unsafeDefault
-- ** @DELETE@
, Delete(..)
, delete
-- ** @UPDATE@
, update
, Update(..)
, update
-- ** @.. RETURNING@
, Returning(..)
@ -289,6 +290,7 @@ import Rel8.Column.These
import Rel8.Expr
import Rel8.Expr.Aggregate
import Rel8.Expr.Bool
import Rel8.Expr.Default
import Rel8.Expr.Eq
import Rel8.Expr.Function
import Rel8.Expr.Null

35
src/Rel8/Expr/Default.hs Normal file
View File

@ -0,0 +1,35 @@
module Rel8.Expr.Default
( unsafeDefault
)
where
-- base
import Prelude ()
-- opaleye
import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
-- rel8
import Rel8.Expr ( Expr )
import Rel8.Expr.Opaleye ( fromPrimExpr )
-- | Corresponds to the SQL @DEFAULT@ expression.
--
-- This 'Expr' is unsafe for numerous reasons, and should be used with care:
--
-- 1. This 'Expr' only makes sense in an @INSERT@ or @UPDATE@ statement.
--
-- 2. Rel8 is not able to verify that a particular column actually has a
-- @DEFAULT@ value. Trying to use @unsafeDefault@ where there is no default
-- will cause a runtime crash
--
-- 3. @DEFAULT@ values can not be transformed. For example, the innocuous Rel8
-- code @unsafeDefault + 1@ will crash, despite type checking.
--
-- Given all these caveats, we suggest avoiding the use of default values where
-- possible, instead being explicit. A common scenario where default values are
-- used is with auto-incrementing identifier columns. In this case, we suggest
-- using 'Rel8.nextval' instead.
unsafeDefault :: Expr a
unsafeDefault = fromPrimExpr Opaleye.DefaultInsertExpr