-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Derive a postgres client to database API specified by servant-db -- -- Derive a postgres client to database API specified by servant-db @package servant-db-postgresql @version 0.2.1.0 module Servant.DB.PostgreSQL.Default -- | Wrapper around Maybe to distinguish default arguments from -- nullable ones newtype Default a Default :: Maybe a -> Default a [unDefault] :: Default a -> Maybe a instance GHC.Generics.Generic (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Read.Read a => GHC.Read.Read (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Default.Default a) module Servant.DB.PostgreSQL.Variadic newtype Variadic a Variadic :: PGArray a -> Variadic a [unVariadic] :: Variadic a -> PGArray a newtype PGArray a :: * -> * PGArray :: [a] -> PGArray a [fromPGArray] :: PGArray a -> [a] instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Read.Read a => GHC.Read.Read (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Base.Functor Servant.DB.PostgreSQL.Variadic.Variadic module Servant.DB.PostgreSQL.Context -- | Captures special cases of stored function arguments data Argument a -- | Variadic argument has uncommon call syntax ArgVariadic :: (Variadic a) -> Argument a -- | Default keyword ArgDefault :: (Maybe a) -> Argument a -- | Common case ArgSimple :: a -> Argument a -- | Encapsulated argument that can be serialized into field or type -- checked -- -- The type parameter can be ToField for query generation or -- Typeable for type checking of DB signature. data QueryArg (r :: * -> Constraint) QueryArg :: (Argument a) -> QueryArg -- | Catches intermediate parameters for query data QueryContext (r :: * -> Constraint) QueryContext :: !(Seq (Maybe Text, QueryArg r)) -> !(Maybe Text) -> !Bool -> QueryContext -- | List of named and positional arguments [queryArguments] :: QueryContext -> !(Seq (Maybe Text, QueryArg r)) -- | Schema name [querySchema] :: QueryContext -> !(Maybe Text) -- | Whether the query returns void [queryVoid] :: QueryContext -> !Bool -- | New empty query context newQueryContext :: QueryContext r -- | Add new argument to query context addQueryArgument :: r a => Maybe Text -> Argument a -> QueryContext r -> QueryContext r -- | Construct query that calls DB stored function queryStoredFunction :: forall r. r ~ ToField => Text -> QueryContext r -> SqlBuilder instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Context.Argument a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Context.Argument a) instance GHC.Generics.Generic (Servant.DB.PostgreSQL.Context.Argument a) module Servant.DB.PostgreSQL.HasDB -- | Derive DB client from API deriveDB :: HasDB layout m => Proxy layout -> Proxy m -> DB layout m -- | Derive DB client from API class HasDB layout (m :: * -> *) where type DB layout m :: * where { type family DB layout m :: *; } -- | Derive DB client from API layout deriveDBWithCtx :: HasDB layout m => Proxy layout -> Proxy m -> QueryContext ToField -> DB layout m instance (Servant.DB.PostgreSQL.HasDB.HasDB api1 m, Servant.DB.PostgreSQL.HasDB.HasDB api2 m) => Servant.DB.PostgreSQL.HasDB.HasDB (api1 Servant.API.Alternative.:<|> api2) m instance (GHC.TypeLits.KnownSymbol n, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (n Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgNamed n a Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgNamed n (Servant.DB.PostgreSQL.Variadic.Variadic a) Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgNamed n (Servant.DB.PostgreSQL.Default.Default a) Servant.API.Sub.:> api) m instance (Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgPos a Servant.API.Sub.:> api) m instance (Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgPos (Servant.DB.PostgreSQL.Variadic.Variadic a) Servant.API.Sub.:> api) m instance (Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgPos (Servant.DB.PostgreSQL.Default.Default a) Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n ()) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.FromRow.FromRow a, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n [a]) m instance Database.PostgreSQL.Simple.FromRow.FromRow a => Database.PostgreSQL.Simple.FromRow.FromRow (GHC.Base.Maybe a) instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.FromRow.FromRow a, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n (GHC.Base.Maybe a)) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.FromRow.FromRow a, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n a) m module Servant.DB.PostgreSQL.Composite -- | Wrapper around a that indicates that the type can be used as -- composite type. -- --
--   >>> type UserAPI = Arg "u" (Composite User) :> Procedure "insertUser" ()
--   
newtype Composite a Composite :: a -> Composite a [unComposite] :: Composite a -> a instance GHC.Classes.Ord a => GHC.Classes.Ord (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Read.Read a => GHC.Read.Read (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Generics.Generic (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Composite.Composite a) instance Database.PostgreSQL.Simple.ToRow.ToRow a => Database.PostgreSQL.Simple.ToField.ToField (Servant.DB.PostgreSQL.Composite.Composite a) -- |

Quick start

-- -- Automatic derive of typed DB API based on -- postgresql-query package. -- -- How to use: -- -- -- --
--   newtype PostgresM a = PostgresM { runPostgresM :: PgMonadT (LoggingT IO) a }
--    deriving (Functor, HasPostgres, MonadLogger, Monad, Applicative, MonadBase IO)
--   
-- -- -- --
--   type UserId = Int
--   
--   data RegisterUser = RegisterUser {
--     userRegName     :: String
--   , userRegPassword :: String
--   , userRegRegTime  :: Day
--   } deriving (Eq)
--   
--   deriveToRow ''RegisterUser
--   
--   data User = User {
--     userId       :: UserId
--   , userName     :: String
--   , userPassword :: String
--   , userRegTime  :: Day
--   } deriving (Eq)
--   
--   deriveFromRow ''User
--   deriveToRow ''User
--   
--   type UserAPI =
--          ArgNamed "u" (Composite RegisterUser)
--       :> Procedure "postUser" (Only Int)
--     :<|> ArgPos Int
--       :> Procedure "getUser" (Maybe User)
--     :<|> ArgPos Int
--       :> Procedure "deleteUser" ()
--     :<|> Procedure "getUsers" [User]
--   
-- -- -- --
--   postUser :: Composite RegisterUser -> PostgresM (Only Int)
--   getUser :: Int -> PostgresM (Maybe User)
--   deleteUser :: Int -> PostgresM ()
--   getUsers :: PostgresM [User]
--   (      postUser
--     :<|> getUser
--     :<|> deleteUser
--     :<|> getUsers) = deriveDB (Proxy :: Proxy UserAPI) (Proxy :: Proxy PostgresM)
--   
-- --

Features

-- -- -- --
--   type API = "test" :> ArgPos Int :> Procedure "square" (Only Int)
--   
-- -- That will call function `test.square(int)`. -- -- -- --
--   type API = ArgNamed "u" (Composite UserCreate) :> Procedure "postUser" (Only Int)
--   
-- -- -- --
--   type API = ArgPos (PGArray Int) :> Procedure "mleast" (Maybe (Only Int))
--   
-- -- -- --
--   type API = ArgPos (Variadic Int) :> Procedure "mleast" (Maybe (Only Int))
--   
-- -- -- --
--   type API = ArgPos (Default Int) :> Procedure "foo" (Only Int)
--   
module Servant.DB.PostgreSQL