2020-10-29 19:58:13 +03:00
|
|
|
module Hasura.RQL.IR.RemoteJoin
|
|
|
|
( RemoteJoin(..)
|
|
|
|
) where
|
|
|
|
|
|
|
|
import Hasura.Prelude
|
|
|
|
|
|
|
|
import qualified Language.GraphQL.Draft.Syntax as G
|
|
|
|
|
|
|
|
import Hasura.GraphQL.Parser hiding (field)
|
|
|
|
import Hasura.RQL.IR.Select
|
|
|
|
import Hasura.RQL.Types
|
|
|
|
|
|
|
|
|
|
|
|
-- | A 'RemoteJoin' represents the context of remote relationship to be extracted from 'AnnFieldG's.
|
2020-10-30 21:55:53 +03:00
|
|
|
data RemoteJoin (b :: Backend)
|
2020-10-29 19:58:13 +03:00
|
|
|
= RemoteJoin
|
|
|
|
{ _rjName :: !FieldName -- ^ The remote join field name.
|
|
|
|
, _rjArgs :: ![RemoteFieldArgument] -- ^ User-provided arguments with variables.
|
|
|
|
, _rjSelSet :: !(G.SelectionSet G.NoFragments Variable) -- ^ User-provided selection set of remote field.
|
|
|
|
, _rjHasuraFields :: !(HashSet FieldName) -- ^ Table fields.
|
|
|
|
, _rjFieldCall :: !(NonEmpty FieldCall) -- ^ Remote server fields.
|
|
|
|
, _rjRemoteSchema :: !RemoteSchemaInfo -- ^ The remote schema server info.
|
|
|
|
, _rjPhantomFields :: ![ColumnInfo b]
|
|
|
|
-- ^ Hasura fields which are not in the selection set, but are required as
|
|
|
|
-- parameters to satisfy the remote join.
|
|
|
|
}
|
|
|
|
deriving instance Eq (RemoteJoin 'Postgres)
|