Skip to content

Commit

Permalink
Add Rel8.Expr.Default.unsafeDefault
Browse files Browse the repository at this point in the history
  • Loading branch information
ocharles committed Jun 29, 2021
1 parent 6950d69 commit c6ffdab
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
1 change: 1 addition & 0 deletions rel8.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/Rel8.hs
Original file line number Diff line number Diff line change
Expand Up @@ -250,14 +250,15 @@ module Rel8
, Insert(..)
, OnConflict(..)
, insert
, unsafeDefault

-- ** @DELETE@
, Delete(..)
, delete

-- ** @UPDATE@
, update
, Update(..)
, update

-- ** @.. RETURNING@
, Returning(..)
Expand Down Expand Up @@ -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
Expand Down
35 changes: 35 additions & 0 deletions src/Rel8/Expr/Default.hs
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit c6ffdab

Please sign in to comment.