factual-api-0.2.0: Data/Factual/Query/ReadQuery.hs
-- | This module exports the types used to create read queries.
module Data.Factual.Query.ReadQuery
(
-- * ReadQuery type
ReadQuery(..)
-- * Required modules
, module Data.Factual.Shared.Table
, module Data.Factual.Shared.Search
, module Data.Factual.Shared.Filter
, module Data.Factual.Shared.Geo
) where
import Data.Factual.Query
import Data.Factual.Shared.Table
import Data.Factual.Shared.Search
import Data.Factual.Shared.Filter
import Data.Factual.Shared.Geo
import Data.Factual.Utils
-- | The ReadQuery type is used to construct read queries. A table should be
-- specified, but the rest of the query options are essentially optional
-- (you opt out using Nothing or an empty List for the value). The select is
-- a list of field names to include in the results. The limit and offset are
-- used to request a specific range of rows and includeCount will include the
-- count of returned rows if it is set to True.
data ReadQuery = ReadQuery { table :: Table
, search :: Search
, select :: [String]
, limit :: Maybe Int
, offset :: Maybe Int
, filters :: [Filter]
, geo :: Maybe Geo
, includeCount :: Bool
} deriving (Eq, Show)
-- The ReadQuery type is a member of the Query typeclass so it can be used to
-- make a request.
instance Query ReadQuery where
toPath query = (show $ table query)
++ "read?"
++ joinAndFilter [ searchString $ search query
, selectString $ select query
, limitString $ limit query
, offsetString $ offset query
, filtersString $ filters query
, geoString $ geo query
, includeCountString $ includeCount query ]
-- The following helper functions are used in generating query Strings.
offsetString :: Maybe Int -> String
offsetString (Just x) = "offset=" ++ show x
offsetString Nothing = ""