hpgsql-simple-compat-0.1.0.0: src/Database/PostgreSQL/Query/TH.hs
module Database.PostgreSQL.Query.TH
( -- * Deriving instances
-- deriveEverything,
-- , module Database.PostgreSQL.Query.TH.Entity
-- , module Database.PostgreSQL.Query.TH.Enum
-- , module Database.PostgreSQL.Query.TH.Row
module Database.PostgreSQL.Query.TH.SqlExp,
)
where
-- import Database.PostgreSQL.Query.TH.Entity
-- import Database.PostgreSQL.Query.TH.Enum
-- import Database.PostgreSQL.Query.TH.Row
import Database.PostgreSQL.Query.TH.SqlExp
-- | Calls sequently `deriveFromRow` `deriveToRow` `deriveEntity`. E.g. code like this:
--
-- @
-- data Agent = Agent
-- { aName :: !Text
-- , aAttributes :: !HStoreMap
-- , aLongWeirdName :: !Int
-- } deriving (Ord, Eq, Show)
--
-- \$(deriveEverything
-- def { eoIdType = ''Id
-- , eoTableName = textFN . toUnderscore'
-- , eoColumnNames = textFN . toUnderscore' . drop 1
-- , eoDeriveClasses =
-- [''Show, ''Read, ''Ord, ''Eq
-- , ''FromField, ''ToField, ''PathPiece]
-- }
-- ''Agent )
-- @
--
-- will generate that:
--
-- @
-- instance ToRow Agent where
-- toRow (Agent a_aE3w a_aE3x a_aE3y)
-- = [toField a_aE3w, toField a_aE3x, toField a_aE3y]
-- instance FromRow Agent where
-- fromRow
-- = Agent <$> Database.PostgreSQL.Simple.FromRow.field
-- <*> Database.PostgreSQL.Simple.FromRow.field
-- <*> Database.PostgreSQL.Simple.FromRow.field
-- instance Database.PostgreSQL.Query.Entity Agent where
-- newtype EntityId Agent
-- = AgentId {getAgentId :: Id}
-- deriving (Show, Read, Ord, Eq, FromField, ToField, PathPiece)
-- tableName _ = "agent"
-- fieldNames _ = ["name", "attributes", "long_weird_name"]
-- type AgentId = EntityId Agent
-- @
-- deriveEverything :: EntityOptions -> Name -> Q [Dec]
-- deriveEverything opts tname =
-- fmap concat $
-- sequence
-- [ deriveToRow tname,
-- deriveFromRow tname,
-- deriveEntity opts tname
-- ]