module Opaleye.Join where
import qualified Opaleye.Internal.Unpackspec as U
import qualified Opaleye.Internal.Join as J
import qualified Opaleye.Internal.PrimQuery as PQ
import Opaleye.QueryArr (Query)
import Opaleye.Internal.Column (Column)
import qualified Opaleye.PGTypes as T
import qualified Data.Profunctor.Product.Default as D
leftJoin :: (D.Default U.Unpackspec columnsL columnsL,
D.Default U.Unpackspec columnsR columnsR,
D.Default J.NullMaker columnsR nullableColumnsR)
=> Query columnsL
-> Query columnsR
-> ((columnsL, columnsR) -> Column T.PGBool)
-> Query (columnsL, nullableColumnsR)
leftJoin = leftJoinExplicit D.def D.def D.def
rightJoin :: (D.Default U.Unpackspec columnsL columnsL,
D.Default U.Unpackspec columnsR columnsR,
D.Default J.NullMaker columnsL nullableColumnsL)
=> Query columnsL
-> Query columnsR
-> ((columnsL, columnsR) -> Column T.PGBool)
-> Query (nullableColumnsL, columnsR)
rightJoin = rightJoinExplicit D.def D.def D.def
fullJoin :: (D.Default U.Unpackspec columnsL columnsL,
D.Default U.Unpackspec columnsR columnsR,
D.Default J.NullMaker columnsL nullableColumnsL,
D.Default J.NullMaker columnsR nullableColumnsR)
=> Query columnsL
-> Query columnsR
-> ((columnsL, columnsR) -> Column T.PGBool)
-> Query (nullableColumnsL, nullableColumnsR)
fullJoin = fullJoinExplicit D.def D.def D.def D.def
leftJoinExplicit :: U.Unpackspec columnsL columnsL
-> U.Unpackspec columnsR columnsR
-> J.NullMaker columnsR nullableColumnsR
-> Query columnsL -> Query columnsR
-> ((columnsL, columnsR) -> Column T.PGBool)
-> Query (columnsL, nullableColumnsR)
leftJoinExplicit uA uB nullmaker =
J.joinExplicit uA uB id (J.toNullable nullmaker) PQ.LeftJoin
rightJoinExplicit :: U.Unpackspec columnsL columnsL
-> U.Unpackspec columnsR columnsR
-> J.NullMaker columnsL nullableColumnsL
-> Query columnsL -> Query columnsR
-> ((columnsL, columnsR) -> Column T.PGBool)
-> Query (nullableColumnsL, columnsR)
rightJoinExplicit uA uB nullmaker =
J.joinExplicit uA uB (J.toNullable nullmaker) id PQ.RightJoin
fullJoinExplicit :: U.Unpackspec columnsL columnsL
-> U.Unpackspec columnsR columnsR
-> J.NullMaker columnsL nullableColumnsL
-> J.NullMaker columnsR nullableColumnsR
-> Query columnsL -> Query columnsR
-> ((columnsL, columnsR) -> Column T.PGBool)
-> Query (nullableColumnsL, nullableColumnsR)
fullJoinExplicit uA uB nullmakerA nullmakerB =
J.joinExplicit uA uB (J.toNullable nullmakerA) (J.toNullable nullmakerB) PQ.FullJoin