groundhog-0.3.0.1: Database/Groundhog.hs
-- | This module exports the most commonly used functions and datatypes.
--
-- The example below shows the most of the main features. See more examples in the examples directory.
--
-- @
--{-\# LANGUAGE GADTs, TypeFamilies, TemplateHaskell, QuasiQuotes, FlexibleInstances \#-}
--import Control.Monad.IO.Class (liftIO)
--import Database.Groundhog.TH
--import Database.Groundhog.Sqlite
--
--data Customer a = Customer {customerName :: String, remark :: a} deriving Show
--data Product = Product {productName :: String, quantity :: Int, customer :: Customer String} deriving Show
--
--'mkPersist' ('defaultCodegenConfig' {migrationFunction = Just \"migrateAll\"}) [groundhog|
-- - entity: Customer
-- constructors:
-- - name: Customer
-- uniques:
-- - name: NameConstraint
-- fields: [customerName]
-- - entity: Product
-- |]
--
--main = withSqliteConn \":memory:\" $ runDbConn $ do
-- -- Customer is also migrated because Product references it.
-- -- It is possible to migrate schema for given type, e.g. migrate (undefined :: Customer String), or run migrateAll
-- 'runMigration' 'defaultMigrationLogger' migrateAll
-- let john = Customer \"John Doe\" \"Phone: 01234567\"
-- johnKey <- 'insert' john
-- -- John is inserted only once because of the name constraint
-- insert $ Product \"Apples\" 5 john
-- insert $ Product \"Melon\" 2 john
-- -- Groundhog prevents SQL injections. Quotes and other special symbols are safe.
-- insert $ Product \"Melon\" 6 (Customer \"Jack Smith\" \"Don't let him pay by check\")
-- -- Bonus melon for all large melon orders. The values used in expressions should have known type, so literal 5 is annotated.
-- 'update' [QuantityField '=.' toArith QuantityField + 1] (ProductNameField '==.' \"Melon\" '&&.' QuantityField '>.' (5 :: Int))
-- productsForJohn <- 'select' $ CustomerField ==. johnKey
-- liftIO $ putStrLn $ \"Products for John: \" ++ show productsForJohn
-- -- Check bonus
-- melon <- select $ (ProductNameField ==. \"Melon\") \`orderBy\` ['Desc' QuantityField]
-- liftIO $ putStrLn $ \"Melon orders: \" ++ show melon
-- @
module Database.Groundhog (
-- * Main definitions
PersistBackend(..)
, DbPersist(..)
, Key
, Unique
, BackendSpecific
, extractUnique
, Cond(..)
, Order(..)
, Selector(..)
, AutoKeyField(..)
, (~>)
, limitTo
, offsetBy
, orderBy
-- * Expressions
, (=.)
, (&&.), (||.)
, (==.), (/=.), (<.), (<=.), (>.), (>=.)
-- * Migration
, createMigration
, executeMigration
, executeMigrationUnsafe
, runMigration
, runMigrationUnsafe
, printMigration
, silentMigrationLogger
, defaultMigrationLogger
) where
import Database.Groundhog.Core
import Database.Groundhog.Expression
import Database.Groundhog.Generic
import Database.Groundhog.Instances