{-# LANGUAGE TemplateHaskell #-}
module Database.Relational.Export (
inlineQuery_,
inlineUpdate_,
inlineInsertValue_,
inlineInsertQuery_,
inlineDelete_,
) where
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Data.ByteString.Short (ShortByteString, toShort)
import Language.Haskell.TH (Q, Dec, stringE)
import Language.Haskell.TH.Name.CamelCase (varName, varCamelcaseName)
import Language.Haskell.TH.Lib.Extra (simpleValD)
import Database.Relational
(Query, Update, Insert, InsertQuery, Delete,
untypeQuery, UntypeableNoFetch (untypeNoFetch))
inlineSQL_ :: (String -> Q ())
-> String
-> String
-> Q [Dec]
inlineSQL_ :: (String -> Q ()) -> String -> String -> Q [Dec]
inlineSQL_ String -> Q ()
check String
sql String
declName = do
String -> Q ()
check String
sql
Name -> TypeQ -> ExpQ -> Q [Dec]
simpleValD (VarName -> Name
varName forall a b. (a -> b) -> a -> b
$ String -> VarName
varCamelcaseName String
declName)
[t| ShortByteString |]
[| toShort $ T.encodeUtf8 $ T.pack $(stringE sql) |]
inlineQuery_ :: (String -> Q ())
-> Query p a
-> String
-> Q [Dec]
inlineQuery_ :: forall p a. (String -> Q ()) -> Query p a -> String -> Q [Dec]
inlineQuery_ String -> Q ()
check Query p a
q String
declName = (String -> Q ()) -> String -> String -> Q [Dec]
inlineSQL_ String -> Q ()
check (forall p a. Query p a -> String
untypeQuery Query p a
q) String
declName
inlineNoFetch_ :: UntypeableNoFetch s
=> (String -> Q ())
-> s a
-> String
-> Q [Dec]
inlineNoFetch_ :: forall (s :: * -> *) a.
UntypeableNoFetch s =>
(String -> Q ()) -> s a -> String -> Q [Dec]
inlineNoFetch_ String -> Q ()
check s a
q String
declName = (String -> Q ()) -> String -> String -> Q [Dec]
inlineSQL_ String -> Q ()
check (forall (s :: * -> *) p. UntypeableNoFetch s => s p -> String
untypeNoFetch s a
q) String
declName
inlineUpdate_ :: (String -> Q ())
-> Update p
-> String
-> Q [Dec]
inlineUpdate_ :: forall p. (String -> Q ()) -> Update p -> String -> Q [Dec]
inlineUpdate_ = forall (s :: * -> *) a.
UntypeableNoFetch s =>
(String -> Q ()) -> s a -> String -> Q [Dec]
inlineNoFetch_
inlineInsertValue_ :: (String -> Q ())
-> Insert p
-> String
-> Q [Dec]
inlineInsertValue_ :: forall p. (String -> Q ()) -> Insert p -> String -> Q [Dec]
inlineInsertValue_ = forall (s :: * -> *) a.
UntypeableNoFetch s =>
(String -> Q ()) -> s a -> String -> Q [Dec]
inlineNoFetch_
inlineInsertQuery_ :: (String -> Q ())
-> InsertQuery p
-> String
-> Q [Dec]
inlineInsertQuery_ :: forall p. (String -> Q ()) -> InsertQuery p -> String -> Q [Dec]
inlineInsertQuery_ = forall (s :: * -> *) a.
UntypeableNoFetch s =>
(String -> Q ()) -> s a -> String -> Q [Dec]
inlineNoFetch_
inlineDelete_ :: (String -> Q ())
-> Delete p
-> String
-> Q [Dec]
inlineDelete_ :: forall p. (String -> Q ()) -> Delete p -> String -> Q [Dec]
inlineDelete_ = forall (s :: * -> *) a.
UntypeableNoFetch s =>
(String -> Q ()) -> s a -> String -> Q [Dec]
inlineNoFetch_