{-# LANGUAGE ScopedTypeVariables #-}
module Database.Selda.Unsafe
( fun, fun2, fun0
, aggr
, cast
, castAggr
, unsafeSelector
) where
import Database.Selda.Column
import Database.Selda.Inner (Aggr, aggr, liftAggr)
import Database.Selda.Selectors (unsafeSelector)
import Database.Selda.SqlType
import Data.Text (Text)
import Data.Proxy
cast :: forall s a b. SqlType b => Col s a -> Col s b
cast = liftC $ Cast (sqlType (Proxy :: Proxy b))
castAggr :: forall s a b. SqlType b => Aggr s a -> Aggr s b
castAggr = liftAggr $ Cast (sqlType (Proxy :: Proxy b))
fun :: Text -> Col s a -> Col s b
fun f = liftC $ UnOp (Fun f)
fun2 :: Text -> Col s a -> Col s b -> Col s c
fun2 f = liftC2 (Fun2 f)
fun0 :: Text -> Col s a
fun0 = One . NulOp . Fun0