rel8-internal
Safe HaskellNone
LanguageHaskell2010

Rel8.Internal.Table.Maybe

Synopsis

Documentation

data MaybeTable (context :: Context) a Source #

MaybeTable t is the table t, but as the result of an outer join. If the outer join fails to match any rows, this is essentialy Nothing, and if the outer join does match rows, this is like Just. Unfortunately, SQL makes it impossible to distinguish whether or not an outer join matched any rows based generally on the row contents - if you were to join a row entirely of nulls, you can't distinguish if you matched an all null row, or if the match failed. For this reason MaybeTable contains an extra field - a "nullTag" - to track whether or not the outer join produced any rows.

Constructors

MaybeTable 

Fields

Instances

Instances details
(Table context a, Reifiable context, context ~ context') => Table context' (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Associated Types

type Columns (MaybeTable context a) 
Instance details

Defined in Rel8.Internal.Table.Maybe

type Columns (MaybeTable context a) = HMaybeTable (Columns a)
type Context (MaybeTable context a) 
Instance details

Defined in Rel8.Internal.Table.Maybe

type Context (MaybeTable context a) = Context a
type FromExprs (MaybeTable context a) 
Instance details

Defined in Rel8.Internal.Table.Maybe

type FromExprs (MaybeTable context a) = Maybe (FromExprs a)

Methods

toColumns :: MaybeTable context a -> Columns (MaybeTable context a) context' Source #

fromColumns :: Columns (MaybeTable context a) context' -> MaybeTable context a Source #

fromResult :: Columns (MaybeTable context a) Result -> FromExprs (MaybeTable context a) Source #

toResult :: FromExprs (MaybeTable context a) -> Columns (MaybeTable context a) Result Source #

context ~ Expr => Applicative (MaybeTable context) Source #

Has the same behavior as the Applicative instance for Maybe. See also: traverseMaybeTable.

Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

pure :: a -> MaybeTable context a #

(<*>) :: MaybeTable context (a -> b) -> MaybeTable context a -> MaybeTable context b #

liftA2 :: (a -> b -> c) -> MaybeTable context a -> MaybeTable context b -> MaybeTable context c #

(*>) :: MaybeTable context a -> MaybeTable context b -> MaybeTable context b #

(<*) :: MaybeTable context a -> MaybeTable context b -> MaybeTable context a #

Nullifiable context => Functor (MaybeTable context) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

fmap :: (a -> b) -> MaybeTable context a -> MaybeTable context b #

(<$) :: a -> MaybeTable context b -> MaybeTable context a #

context ~ Expr => Monad (MaybeTable context) Source #

Has the same behavior as the Monad instance for Maybe.

Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

(>>=) :: MaybeTable context a -> (a -> MaybeTable context b) -> MaybeTable context b #

(>>) :: MaybeTable context a -> MaybeTable context b -> MaybeTable context b #

return :: a -> MaybeTable context a #

context ~ Expr => AltTable (MaybeTable context) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

(<|>:) :: Table Expr a => MaybeTable context a -> MaybeTable context a -> MaybeTable context a Source #

context ~ Expr => AlternativeTable (MaybeTable context) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

emptyTable :: Table Expr a => MaybeTable context a Source #

Projectable (MaybeTable context) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

project :: Projecting a b => Projection a b -> MaybeTable context a -> MaybeTable context b Source #

context ~ Expr => Apply (MaybeTable context) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

(<.>) :: MaybeTable context (a -> b) -> MaybeTable context a -> MaybeTable context b

(.>) :: MaybeTable context a -> MaybeTable context b -> MaybeTable context b

(<.) :: MaybeTable context a -> MaybeTable context b -> MaybeTable context a

liftF2 :: (a -> b -> c) -> MaybeTable context a -> MaybeTable context b -> MaybeTable context c

context ~ Expr => Bind (MaybeTable context) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

(>>-) :: MaybeTable context a -> (a -> MaybeTable context b) -> MaybeTable context b

join :: MaybeTable context (MaybeTable context a) -> MaybeTable context a

(context ~ Expr, Table Expr a, Semigroup a) => Monoid (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

mempty :: MaybeTable context a #

mappend :: MaybeTable context a -> MaybeTable context a -> MaybeTable context a #

mconcat :: [MaybeTable context a] -> MaybeTable context a #

(context ~ Expr, Table Expr a, Semigroup a) => Semigroup (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

(<>) :: MaybeTable context a -> MaybeTable context a -> MaybeTable context a #

sconcat :: NonEmpty (MaybeTable context a) -> MaybeTable context a #

stimes :: Integral b => b -> MaybeTable context a -> MaybeTable context a #

(EqTable a, context ~ Expr) => EqTable (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

eqTable :: Columns (MaybeTable context a) (Dict (Sql DBEq)) Source #

(OrdTable a, context ~ Expr) => OrdTable (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

Methods

ordTable :: Columns (MaybeTable context a) (Dict (Sql DBOrd)) Source #

(ToExprs exprs a, context ~ Expr) => ToExprs (MaybeTable context exprs) (Maybe a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

type Transpose to (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

type Transpose to (MaybeTable context a) = MaybeTable to (Transpose to a)
type Columns (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

type Columns (MaybeTable context a) = HMaybeTable (Columns a)
type Context (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

type Context (MaybeTable context a) = Context a
type FromExprs (MaybeTable context a) Source # 
Instance details

Defined in Rel8.Internal.Table.Maybe

type FromExprs (MaybeTable context a) = Maybe (FromExprs a)

maybeTable :: Table Expr b => b -> (a -> b) -> MaybeTable Expr a -> b Source #

Perform case analysis on a MaybeTable. Like maybe.

nothingTable :: Table Expr a => MaybeTable Expr a Source #

The null table. Like Nothing.

justTable :: a -> MaybeTable Expr a Source #

Lift any table into MaybeTable. Like Just. Note you can also use pure.

isNothingTable :: MaybeTable Expr a -> Expr Bool Source #

Check if a MaybeTable is absent of any row. Like isNothing.

isJustTable :: MaybeTable Expr a -> Expr Bool Source #

Check if a MaybeTable contains a row. Like isJust.

($?) :: forall a b. Sql DBType b => (a -> Expr b) -> MaybeTable Expr a -> Expr (Nullify b) infixl 4 Source #

Project a single expression out of a MaybeTable. You can think of this operator like the $ operator, but it also has the ability to return null.

nameMaybeTable Source #

Arguments

:: Name (Maybe MaybeTag)

The name of the column to track whether a row is a justTable or nothingTable.

-> a

Names of the columns in a.

-> MaybeTable Name a 

Construct a MaybeTable in the Name context. This can be useful if you have a MaybeTable that you are storing in a table and need to construct a TableSchema.

makeMaybeTable :: FieldNullable SqlBool -> a -> MaybeTable Expr a Source #