module Opaleye.SQLite.Column (module Opaleye.SQLite.Column, Column, Nullable, unsafeCoerce, unsafeCoerceColumn) where import Opaleye.SQLite.Internal.Column (Column, Nullable, unsafeCoerce, unsafeCoerceColumn) import qualified Opaleye.SQLite.Internal.Column as C import qualified Opaleye.SQLite.Internal.HaskellDB.PrimQuery as HPQ import qualified Opaleye.SQLite.PGTypes as T import Prelude hiding (null) -- | A NULL of any type null :: Column (Nullable a) null :: Column (Nullable a) null = PrimExpr -> Column (Nullable a) forall a. PrimExpr -> Column a C.Column (Literal -> PrimExpr HPQ.ConstExpr Literal HPQ.NullLit) isNull :: Column (Nullable a) -> Column T.PGBool isNull :: Column (Nullable a) -> Column PGBool isNull = UnOp -> Column (Nullable a) -> Column PGBool forall a b. UnOp -> Column a -> Column b C.unOp UnOp HPQ.OpIsNull -- | If the @Column (Nullable a)@ is NULL then return the @Column b@ -- otherwise map the underlying @Column a@ using the provided -- function. -- -- The Opaleye equivalent of the 'Data.Maybe.maybe' function. matchNullable :: Column b -> (Column a -> Column b) -> Column (Nullable a) -> Column b matchNullable :: Column b -> (Column a -> Column b) -> Column (Nullable a) -> Column b matchNullable Column b replacement Column a -> Column b f Column (Nullable a) x = Column PGBool -> Column b -> Column b -> Column b forall pgBool a. Column pgBool -> Column a -> Column a -> Column a C.unsafeIfThenElse (Column (Nullable a) -> Column PGBool forall a. Column (Nullable a) -> Column PGBool isNull Column (Nullable a) x) Column b replacement (Column a -> Column b f (Column (Nullable a) -> Column a forall a b. Column a -> Column b unsafeCoerceColumn Column (Nullable a) x)) -- | If the @Column (Nullable a)@ is NULL then return the provided -- @Column a@ otherwise return the underlying @Column a@. -- -- The Opaleye equivalent of the 'Data.Maybe.fromMaybe' function fromNullable :: Column a -> Column (Nullable a) -> Column a fromNullable :: Column a -> Column (Nullable a) -> Column a fromNullable = (Column a -> (Column a -> Column a) -> Column (Nullable a) -> Column a) -> (Column a -> Column a) -> Column a -> Column (Nullable a) -> Column a forall a b c. (a -> b -> c) -> b -> a -> c flip Column a -> (Column a -> Column a) -> Column (Nullable a) -> Column a forall b a. Column b -> (Column a -> Column b) -> Column (Nullable a) -> Column b matchNullable Column a -> Column a forall a. a -> a id -- | The Opaleye equivalent of 'Data.Maybe.Just' toNullable :: Column a -> Column (Nullable a) toNullable :: Column a -> Column (Nullable a) toNullable = Column a -> Column (Nullable a) forall a b. Column a -> Column b unsafeCoerceColumn -- | If the argument is 'Data.Maybe.Nothing' return NULL otherwise return the -- provided value coerced to a nullable type. maybeToNullable :: Maybe (Column a) -> Column (Nullable a) maybeToNullable :: Maybe (Column a) -> Column (Nullable a) maybeToNullable = Column (Nullable a) -> (Column a -> Column (Nullable a)) -> Maybe (Column a) -> Column (Nullable a) forall b a. b -> (a -> b) -> Maybe a -> b maybe Column (Nullable a) forall a. Column (Nullable a) null Column a -> Column (Nullable a) forall a. Column a -> Column (Nullable a) toNullable -- | Cast a column to any other type. This is safe for some conversions such as uuid to text. unsafeCast :: String -> Column a -> Column b unsafeCast :: String -> Column a -> Column b unsafeCast = String -> Column a -> Column b forall a b. String -> Column a -> Column b C.unsafeCast