@@ -11,10 +11,7 @@ module Rel8.Expr.Opaleye
1111 ( castExpr, unsafeCastExpr
1212 , scastExpr, sunsafeCastExpr
1313 , unsafeLiteral
14− , unsafeFromPrimExpr, unsafeToPrimExpr, unsafeMapPrimExpr
15− , unsafeZipPrimExprsWith, unsafeTraversePrimExpr
16− , sfromPrimExpr, stoPrimExpr
17− , fromPrimExpr, toPrimExpr, mapPrimExpr, zipPrimExprsWith
14+ , fromPrimExpr, toPrimExpr, mapPrimExpr, zipPrimExprsWith, traversePrimExpr
1815 , toColumn, fromColumn
1916 )
2017where
@@ -28,7 +25,6 @@ import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
2825
2926-- rel8
3027import {-# SOURCE #-} Rel8.Expr ( Expr( Expr ) )
31−import Rel8.Kind.Bool ( SBool( SFalse, STrue ), KnownBool, boolSing, IsList )
3228import Rel8.Schema.Nullability ( Nullability, Nullabilizes, nullabilization )
3329import Rel8.Type ( DBType, typeInformation )
3430import Rel8.Type.Information ( TypeInformation(..) )
@@ -49,92 +45,34 @@ scastExpr = sunsafeCastExpr
4945sunsafeCastExpr :: ()
5046 => Nullability db b -> TypeInformation db -> Expr a -> Expr b
5147sunsafeCastExpr _ TypeInformation {typeName} =
52− Expr . Opaleye.CastExpr typeName . unsafeToPrimExpr
48+ fromPrimExpr . Opaleye.CastExpr typeName . toPrimExpr
5349
5450
5551unsafeLiteral :: (DBType db, Nullabilizes db a) => String -> Expr a
5652unsafeLiteral = castExpr . Expr . Opaleye.ConstExpr . Opaleye.OtherLit
5753
5854
59−unsafeFromPrimExpr :: Opaleye.PrimExpr -> Expr a
60−unsafeFromPrimExpr = Expr
55+fromPrimExpr :: Opaleye.PrimExpr -> Expr a
56+fromPrimExpr = Expr
6157
6258
63−unsafeToPrimExpr :: Expr a -> Opaleye.PrimExpr
64−unsafeToPrimExpr (Expr a) = a
59+toPrimExpr :: Expr a -> Opaleye.PrimExpr
60+toPrimExpr (Expr a) = a
6561
6662
67−unsafeMapPrimExpr :: ()
68− => (Opaleye.PrimExpr -> Opaleye.PrimExpr) -> Expr a -> Expr b
69−unsafeMapPrimExpr f = unsafeFromPrimExpr . f . unsafeToPrimExpr
63+mapPrimExpr :: (Opaleye.PrimExpr -> Opaleye.PrimExpr) -> Expr a -> Expr b
64+mapPrimExpr f = fromPrimExpr . f . toPrimExpr
7065
7166
72−unsafeZipPrimExprsWith :: ()
67+zipPrimExprsWith :: ()
7368 => (Opaleye.PrimExpr -> Opaleye.PrimExpr -> Opaleye.PrimExpr)
7469 -> Expr a -> Expr b -> Expr c
75−unsafeZipPrimExprsWith f a b =
76− unsafeFromPrimExpr (f (unsafeToPrimExpr a) (unsafeToPrimExpr b))
70+zipPrimExprsWith f a b = fromPrimExpr (f (toPrimExpr a) (toPrimExpr b))
7771
7872
79−unsafeTraversePrimExpr :: Functor f
73+traversePrimExpr :: Functor f
8074 => (Opaleye.PrimExpr -> f Opaleye.PrimExpr) -> Expr a -> f (Expr b)
81−unsafeTraversePrimExpr f = fmap unsafeFromPrimExpr . f . unsafeToPrimExpr
82−
83−
84−fromPrimExpr ::
85− ( KnownBool (IsList _a), Nullabilizes _a a
86− )
87− => Opaleye.PrimExpr -> Expr a
88−fromPrimExpr = sfromPrimExpr nullabilization boolSing
89−
90−
91−toPrimExpr ::
92− ( KnownBool (IsList _a), Nullabilizes _a a
93− )
94− => Expr a -> Opaleye.PrimExpr
95−toPrimExpr = stoPrimExpr nullabilization boolSing
96−
97−
98−sfromPrimExpr :: ()
99− => Nullability _a a -> SBool (IsList _a) -> Opaleye.PrimExpr -> Expr a
100−sfromPrimExpr _ = \case
101− SFalse -> unsafeFromPrimExpr
102− STrue -> \a -> Expr $
103− Opaleye.CaseExpr
104− [ (Opaleye.UnExpr Opaleye.OpIsNull a, Opaleye.ConstExpr Opaleye.NullLit)
105− ]
106− (Opaleye.UnExpr (Opaleye.UnOpOther "ROW") a)
107−
108−
109−stoPrimExpr :: ()
110− => Nullability _a a -> SBool (IsList _a) -> Expr a -> Opaleye.PrimExpr
111−stoPrimExpr _ = \case
112− SFalse -> unsafeToPrimExpr
113− STrue -> \(Expr a) ->
114− Opaleye.CaseExpr
115− [ (Opaleye.UnExpr Opaleye.OpIsNull a, Opaleye.ConstExpr Opaleye.NullLit)
116− ]
117− -- Requires at least Postgres 13
118− (Opaleye.CompositeExpr a "f1")
119−
120−
121−mapPrimExpr ::
122− ( KnownBool (IsList _a), Nullabilizes _a a
123− , KnownBool (IsList _b), Nullabilizes _b b
124− )
125− => (Opaleye.PrimExpr -> Opaleye.PrimExpr)
126− -> Expr a -> Expr b
127−mapPrimExpr f = fromPrimExpr . f . toPrimExpr
128−
129−
130−zipPrimExprsWith ::
131− ( KnownBool (IsList _a), Nullabilizes _a a
132− , KnownBool (IsList _b), Nullabilizes _b b
133− , KnownBool (IsList _c), Nullabilizes _c c
134− )
135− => (Opaleye.PrimExpr -> Opaleye.PrimExpr -> Opaleye.PrimExpr)
136− -> Expr a -> Expr b -> Expr c
137−zipPrimExprsWith f a b = fromPrimExpr (f (toPrimExpr a) (toPrimExpr b))
75+traversePrimExpr f = fmap fromPrimExpr . f . toPrimExpr
13876
13977
14078toColumn :: Opaleye.PrimExpr -> Opaleye.Column b