rel8-1.7.0.0: src/Rel8/Query/Null.hs
{-# language FlexibleContexts #-}
module Rel8.Query.Null
( catNull
, catNullTable
)
where
-- base
import Prelude
-- rel8
import Rel8.Expr ( Expr )
import Rel8.Expr.Null ( isNonNull, unsafeUnnullify )
import Rel8.Table ( Table )
import Rel8.Table.Null ( NullTable, isNonNullTable, unsafeUnnullifyTable )
import Rel8.Query ( Query )
import Rel8.Query.Filter ( where_ )
-- | Filter a 'Query' that might return @null@ to a 'Query' without any
-- @null@s.
--
-- Corresponds to 'Data.Maybe.catMaybes'.
catNull :: Expr (Maybe a) -> Query (Expr a)
catNull a = do
where_ $ isNonNull a
pure $ unsafeUnnullify a
-- | Filter a 'Query' that might return @nullTable@ to a 'Query' without any
-- @nullTable@s.
--
-- Corresponds to 'Data.Maybe.catMaybes'.
catNullTable :: Table Expr a => NullTable Expr a -> Query a
catNullTable a = do
where_ $ isNonNullTable a
pure $ unsafeUnnullifyTable a