{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Opaleye.Join where
import qualified Opaleye.Field as F
import qualified Opaleye.Internal.Unpackspec as U
import qualified Opaleye.Internal.Join as J
import qualified Opaleye.Internal.MaybeFields as M
import qualified Opaleye.Internal.PrimQuery as PQ
import qualified Opaleye.Select as S
import qualified Opaleye.SqlTypes as T
import qualified Data.Profunctor.Product.Default as D
optional :: D.Default U.Unpackspec a a
=> S.SelectArr i a
-> S.SelectArr i (M.MaybeFields a)
optional :: forall a i.
Default Unpackspec a a =>
SelectArr i a -> SelectArr i (MaybeFields a)
optional = forall i a. SelectArr i a -> SelectArr i (MaybeFields a)
M.optional
optionalRestrict :: D.Default U.Unpackspec a a
=> S.Select a
-> S.SelectArr (a -> F.Field T.SqlBool) (M.MaybeFields a)
optionalRestrict :: forall a.
Default Unpackspec a a =>
Select a -> SelectArr (a -> Field SqlBool) (MaybeFields a)
optionalRestrict = forall a.
Default Unpackspec a a =>
Select a -> SelectArr (a -> Field SqlBool) (MaybeFields a)
J.optionalRestrict
leftJoin :: (D.Default U.Unpackspec fieldsL fieldsL,
D.Default U.Unpackspec fieldsR fieldsR,
D.Default J.NullMaker fieldsR nullableFieldsR)
=> S.Select fieldsL
-> S.Select fieldsR
-> ((fieldsL, fieldsR) -> F.Field T.SqlBool)
-> S.Select (fieldsL, nullableFieldsR)
leftJoin :: forall fieldsL fieldsR nullableFieldsR.
(Default Unpackspec fieldsL fieldsL,
Default Unpackspec fieldsR fieldsR,
Default NullMaker fieldsR nullableFieldsR) =>
Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (fieldsL, nullableFieldsR)
leftJoin = forall fieldsL fieldsR nullableFieldsR.
Unpackspec fieldsL fieldsL
-> Unpackspec fieldsR fieldsR
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (fieldsL, nullableFieldsR)
leftJoinExplicit forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def
leftJoinA :: (D.Default U.Unpackspec fieldsR fieldsR,
D.Default J.NullMaker fieldsR nullableFieldsR)
=> S.Select fieldsR
-> S.SelectArr (fieldsR -> F.Field T.SqlBool) nullableFieldsR
leftJoinA :: forall fieldsR nullableFieldsR.
(Default Unpackspec fieldsR fieldsR,
Default NullMaker fieldsR nullableFieldsR) =>
Select fieldsR
-> SelectArr (fieldsR -> Field SqlBool) nullableFieldsR
leftJoinA = forall fieldsR nullableFieldsR.
Unpackspec fieldsR fieldsR
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsR
-> SelectArr (fieldsR -> Field SqlBool) nullableFieldsR
leftJoinAExplict forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def
rightJoin :: (D.Default U.Unpackspec fieldsL fieldsL,
D.Default U.Unpackspec fieldsR fieldsR,
D.Default J.NullMaker fieldsL nullableFieldsL)
=> S.Select fieldsL
-> S.Select fieldsR
-> ((fieldsL, fieldsR) -> F.Field T.SqlBool)
-> S.Select (nullableFieldsL, fieldsR)
rightJoin :: forall fieldsL fieldsR nullableFieldsL.
(Default Unpackspec fieldsL fieldsL,
Default Unpackspec fieldsR fieldsR,
Default NullMaker fieldsL nullableFieldsL) =>
Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (nullableFieldsL, fieldsR)
rightJoin = forall fieldsL fieldsR nullableFieldsL.
Unpackspec fieldsL fieldsL
-> Unpackspec fieldsR fieldsR
-> NullMaker fieldsL nullableFieldsL
-> Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (nullableFieldsL, fieldsR)
rightJoinExplicit forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def
fullJoin :: (D.Default U.Unpackspec fieldsL fieldsL,
D.Default U.Unpackspec fieldsR fieldsR,
D.Default J.NullMaker fieldsL nullableFieldsL,
D.Default J.NullMaker fieldsR nullableFieldsR)
=> S.Select fieldsL
-> S.Select fieldsR
-> ((fieldsL, fieldsR) -> F.Field T.SqlBool)
-> S.Select (nullableFieldsL, nullableFieldsR)
fullJoin :: forall fieldsL fieldsR nullableFieldsL nullableFieldsR.
(Default Unpackspec fieldsL fieldsL,
Default Unpackspec fieldsR fieldsR,
Default NullMaker fieldsL nullableFieldsL,
Default NullMaker fieldsR nullableFieldsR) =>
Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (nullableFieldsL, nullableFieldsR)
fullJoin = forall fieldsL fieldsR nullableFieldsL nullableFieldsR.
Unpackspec fieldsL fieldsL
-> Unpackspec fieldsR fieldsR
-> NullMaker fieldsL nullableFieldsL
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (nullableFieldsL, nullableFieldsR)
fullJoinExplicit forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def forall (p :: * -> * -> *) a b. Default p a b => p a b
D.def
leftJoinExplicit :: U.Unpackspec fieldsL fieldsL
-> U.Unpackspec fieldsR fieldsR
-> J.NullMaker fieldsR nullableFieldsR
-> S.Select fieldsL -> S.Select fieldsR
-> ((fieldsL, fieldsR) -> F.Field T.SqlBool)
-> S.Select (fieldsL, nullableFieldsR)
leftJoinExplicit :: forall fieldsL fieldsR nullableFieldsR.
Unpackspec fieldsL fieldsL
-> Unpackspec fieldsR fieldsR
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (fieldsL, nullableFieldsR)
leftJoinExplicit Unpackspec fieldsL fieldsL
uA Unpackspec fieldsR fieldsR
uB NullMaker fieldsR nullableFieldsR
nullmaker =
forall columnsA columnsB returnedColumnsA returnedColumnsB.
Unpackspec columnsA columnsA
-> Unpackspec columnsB columnsB
-> (columnsA -> returnedColumnsA)
-> (columnsB -> returnedColumnsB)
-> JoinType
-> Query columnsA
-> Query columnsB
-> ((columnsA, columnsB) -> Field SqlBool)
-> Query (returnedColumnsA, returnedColumnsB)
J.joinExplicit Unpackspec fieldsL fieldsL
uA Unpackspec fieldsR fieldsR
uB forall a. a -> a
id (forall a b. NullMaker a b -> a -> b
J.toNullable NullMaker fieldsR nullableFieldsR
nullmaker) JoinType
PQ.LeftJoin
leftJoinAExplict :: U.Unpackspec fieldsR fieldsR
-> J.NullMaker fieldsR nullableFieldsR
-> S.Select fieldsR
-> S.SelectArr (fieldsR -> F.Field T.SqlBool) nullableFieldsR
leftJoinAExplict :: forall fieldsR nullableFieldsR.
Unpackspec fieldsR fieldsR
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsR
-> SelectArr (fieldsR -> Field SqlBool) nullableFieldsR
leftJoinAExplict = forall fieldsR nullableFieldsR.
Unpackspec fieldsR fieldsR
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsR
-> SelectArr (fieldsR -> Field SqlBool) nullableFieldsR
J.leftJoinAExplicit
rightJoinExplicit :: U.Unpackspec fieldsL fieldsL
-> U.Unpackspec fieldsR fieldsR
-> J.NullMaker fieldsL nullableFieldsL
-> S.Select fieldsL -> S.Select fieldsR
-> ((fieldsL, fieldsR) -> F.Field T.SqlBool)
-> S.Select (nullableFieldsL, fieldsR)
rightJoinExplicit :: forall fieldsL fieldsR nullableFieldsL.
Unpackspec fieldsL fieldsL
-> Unpackspec fieldsR fieldsR
-> NullMaker fieldsL nullableFieldsL
-> Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (nullableFieldsL, fieldsR)
rightJoinExplicit Unpackspec fieldsL fieldsL
uA Unpackspec fieldsR fieldsR
uB NullMaker fieldsL nullableFieldsL
nullmaker =
forall columnsA columnsB returnedColumnsA returnedColumnsB.
Unpackspec columnsA columnsA
-> Unpackspec columnsB columnsB
-> (columnsA -> returnedColumnsA)
-> (columnsB -> returnedColumnsB)
-> JoinType
-> Query columnsA
-> Query columnsB
-> ((columnsA, columnsB) -> Field SqlBool)
-> Query (returnedColumnsA, returnedColumnsB)
J.joinExplicit Unpackspec fieldsL fieldsL
uA Unpackspec fieldsR fieldsR
uB (forall a b. NullMaker a b -> a -> b
J.toNullable NullMaker fieldsL nullableFieldsL
nullmaker) forall a. a -> a
id JoinType
PQ.RightJoin
fullJoinExplicit :: U.Unpackspec fieldsL fieldsL
-> U.Unpackspec fieldsR fieldsR
-> J.NullMaker fieldsL nullableFieldsL
-> J.NullMaker fieldsR nullableFieldsR
-> S.Select fieldsL -> S.Select fieldsR
-> ((fieldsL, fieldsR) -> F.Field T.SqlBool)
-> S.Select (nullableFieldsL, nullableFieldsR)
fullJoinExplicit :: forall fieldsL fieldsR nullableFieldsL nullableFieldsR.
Unpackspec fieldsL fieldsL
-> Unpackspec fieldsR fieldsR
-> NullMaker fieldsL nullableFieldsL
-> NullMaker fieldsR nullableFieldsR
-> Select fieldsL
-> Select fieldsR
-> ((fieldsL, fieldsR) -> Field SqlBool)
-> Select (nullableFieldsL, nullableFieldsR)
fullJoinExplicit Unpackspec fieldsL fieldsL
uA Unpackspec fieldsR fieldsR
uB NullMaker fieldsL nullableFieldsL
nullmakerA NullMaker fieldsR nullableFieldsR
nullmakerB =
forall columnsA columnsB returnedColumnsA returnedColumnsB.
Unpackspec columnsA columnsA
-> Unpackspec columnsB columnsB
-> (columnsA -> returnedColumnsA)
-> (columnsB -> returnedColumnsB)
-> JoinType
-> Query columnsA
-> Query columnsB
-> ((columnsA, columnsB) -> Field SqlBool)
-> Query (returnedColumnsA, returnedColumnsB)
J.joinExplicit Unpackspec fieldsL fieldsL
uA Unpackspec fieldsR fieldsR
uB (forall a b. NullMaker a b -> a -> b
J.toNullable NullMaker fieldsL nullableFieldsL
nullmakerA) (forall a b. NullMaker a b -> a -> b
J.toNullable NullMaker fieldsR nullableFieldsR
nullmakerB) JoinType
PQ.FullJoin
optionalRestrictExplicit :: U.Unpackspec a a
-> S.Select a
-> S.SelectArr (a -> F.Field T.SqlBool) (M.MaybeFields a)
optionalRestrictExplicit :: forall a.
Unpackspec a a
-> Select a -> SelectArr (a -> Field SqlBool) (MaybeFields a)
optionalRestrictExplicit = forall a.
Unpackspec a a
-> Select a -> SelectArr (a -> Field SqlBool) (MaybeFields a)
J.optionalRestrictExplicit
optionalExplicit :: U.Unpackspec a a
-> S.SelectArr i a
-> S.SelectArr i (M.MaybeFields a)
optionalExplicit :: forall a i.
Unpackspec a a -> SelectArr i a -> SelectArr i (MaybeFields a)
optionalExplicit Unpackspec a a
_ = forall i a. SelectArr i a -> SelectArr i (MaybeFields a)
M.optional