The use of `where_` in DbRequestBuilder issues a warning since GHC 9.2 as per https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0366-no-ambiguous-field-access.rst To disambiguate that, move the type to a separate module and use the record field names qualified. For symmetry, MutateQuery also gets its own module.
49 lines
1.6 KiB
Haskell
49 lines
1.6 KiB
Haskell
module PostgREST.Request.ReadQuery
|
|
( ReadNode
|
|
, ReadQuery(..)
|
|
, ReadRequest
|
|
, SelectItem
|
|
, fstFieldNames
|
|
) where
|
|
|
|
import Data.Tree (Tree (..))
|
|
|
|
import PostgREST.DbStructure.Identifiers (FieldName,
|
|
QualifiedIdentifier)
|
|
import PostgREST.DbStructure.Relationship (Relationship)
|
|
import PostgREST.RangeQuery (NonnegRange)
|
|
import PostgREST.Request.Types (Alias, Cast, Depth, Field,
|
|
Hint, JoinCondition,
|
|
JoinType, LogicTree,
|
|
NodeName, OrderTerm)
|
|
|
|
|
|
import Protolude
|
|
|
|
type ReadRequest = Tree ReadNode
|
|
|
|
type ReadNode =
|
|
(ReadQuery, (NodeName, Maybe Relationship, Maybe Alias, Maybe Hint, Maybe JoinType, Depth))
|
|
|
|
-- | The select value in `/tbl?select=alias:field::cast`
|
|
type SelectItem = (Field, Maybe Cast, Maybe Alias, Maybe Hint, Maybe JoinType)
|
|
|
|
data ReadQuery = Select
|
|
{ select :: [SelectItem]
|
|
, from :: QualifiedIdentifier
|
|
-- ^ A table alias is used in case of self joins
|
|
, fromAlias :: Maybe Alias
|
|
-- ^ Only used for Many to Many joins. Parent and Child joins use explicit joins.
|
|
, implicitJoins :: [QualifiedIdentifier]
|
|
, where_ :: [LogicTree]
|
|
, joinConditions :: [JoinCondition]
|
|
, order :: [OrderTerm]
|
|
, range_ :: NonnegRange
|
|
}
|
|
deriving (Eq)
|
|
|
|
-- First level FieldNames(e.g get a,b from /table?select=a,b,other(c,d))
|
|
fstFieldNames :: ReadRequest -> [FieldName]
|
|
fstFieldNames (Node (sel, _) _) =
|
|
fst . (\(f, _, _, _, _) -> f) <$> select sel
|