mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 01:12:56 +03:00
server: fix missing/wrong graphql-default
field name transformations
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/4927 GitOrigin-RevId: 02dc61f05e06f46c193be3685abbef9c8535edef
This commit is contained in:
parent
edcbe129a7
commit
680cf5b3c0
@ -338,22 +338,22 @@ orderByOperators ::
|
|||||||
orderByOperators tCase =
|
orderByOperators tCase =
|
||||||
(Name._order_by,) $
|
(Name._order_by,) $
|
||||||
NE.fromList
|
NE.fromList
|
||||||
[ ( define (applyFieldNameCaseCust tCase Name._asc) "in ascending order, nulls last",
|
[ ( define (applyEnumValueCase tCase Name._asc) "in ascending order, nulls last",
|
||||||
(PG.OTAsc, PG.NLast)
|
(PG.OTAsc, PG.NLast)
|
||||||
),
|
),
|
||||||
( define (applyFieldNameCaseCust tCase Name._asc_nulls_first) "in ascending order, nulls first",
|
( define (applyEnumValueCase tCase Name._asc_nulls_first) "in ascending order, nulls first",
|
||||||
(PG.OTAsc, PG.NFirst)
|
(PG.OTAsc, PG.NFirst)
|
||||||
),
|
),
|
||||||
( define (applyFieldNameCaseCust tCase Name._asc_nulls_last) "in ascending order, nulls last",
|
( define (applyEnumValueCase tCase Name._asc_nulls_last) "in ascending order, nulls last",
|
||||||
(PG.OTAsc, PG.NLast)
|
(PG.OTAsc, PG.NLast)
|
||||||
),
|
),
|
||||||
( define (applyFieldNameCaseCust tCase Name._desc) "in descending order, nulls first",
|
( define (applyEnumValueCase tCase Name._desc) "in descending order, nulls first",
|
||||||
(PG.OTDesc, PG.NFirst)
|
(PG.OTDesc, PG.NFirst)
|
||||||
),
|
),
|
||||||
( define (applyFieldNameCaseCust tCase Name._desc_nulls_first) "in descending order, nulls first",
|
( define (applyEnumValueCase tCase Name._desc_nulls_first) "in descending order, nulls first",
|
||||||
(PG.OTDesc, PG.NFirst)
|
(PG.OTDesc, PG.NFirst)
|
||||||
),
|
),
|
||||||
( define (applyFieldNameCaseCust tCase Name._desc_nulls_last) "in descending order, nulls last",
|
( define (applyEnumValueCase tCase Name._desc_nulls_last) "in descending order, nulls last",
|
||||||
(PG.OTDesc, PG.NLast)
|
(PG.OTDesc, PG.NLast)
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
@ -388,8 +388,8 @@ comparisonExps = memoize 'comparisonExps \columnType -> do
|
|||||||
lqueryParser <- columnParser (ColumnScalar PGLquery) (G.Nullability False)
|
lqueryParser <- columnParser (ColumnScalar PGLquery) (G.Nullability False)
|
||||||
-- `ltxtquery` represents a full-text-search-like pattern for matching `ltree` values.
|
-- `ltxtquery` represents a full-text-search-like pattern for matching `ltree` values.
|
||||||
ltxtqueryParser <- columnParser (ColumnScalar PGLtxtquery) (G.Nullability False)
|
ltxtqueryParser <- columnParser (ColumnScalar PGLtxtquery) (G.Nullability False)
|
||||||
maybeCastParser <- castExp columnType
|
|
||||||
tCase <- asks getter
|
tCase <- asks getter
|
||||||
|
maybeCastParser <- castExp columnType tCase
|
||||||
let name = applyTypeNameCaseCust tCase $ P.getName typedParser <> Name.__comparison_exp
|
let name = applyTypeNameCaseCust tCase $ P.getName typedParser <> Name.__comparison_exp
|
||||||
desc =
|
desc =
|
||||||
G.Description $
|
G.Description $
|
||||||
@ -675,8 +675,8 @@ comparisonExps = memoize 'comparisonExps \columnType -> do
|
|||||||
(ColumnScalar $ PG.PGArray scalarType)
|
(ColumnScalar $ PG.PGArray scalarType)
|
||||||
(PG.PGValArray $ cvValue <$> columnValues)
|
(PG.PGValArray $ cvValue <$> columnValues)
|
||||||
|
|
||||||
castExp :: ColumnType ('Postgres pgKind) -> m (Maybe (Parser 'Input n (CastExp ('Postgres pgKind) (IR.UnpreparedValue ('Postgres pgKind)))))
|
castExp :: ColumnType ('Postgres pgKind) -> NamingCase -> m (Maybe (Parser 'Input n (CastExp ('Postgres pgKind) (IR.UnpreparedValue ('Postgres pgKind)))))
|
||||||
castExp sourceType = do
|
castExp sourceType tCase = do
|
||||||
let maybeScalars = case sourceType of
|
let maybeScalars = case sourceType of
|
||||||
ColumnScalar PGGeography -> Just (PGGeography, PGGeometry)
|
ColumnScalar PGGeography -> Just (PGGeography, PGGeometry)
|
||||||
ColumnScalar PGGeometry -> Just (PGGeometry, PGGeography)
|
ColumnScalar PGGeometry -> Just (PGGeometry, PGGeography)
|
||||||
@ -684,10 +684,11 @@ comparisonExps = memoize 'comparisonExps \columnType -> do
|
|||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
|
||||||
forM maybeScalars $ \(sourceScalar, targetScalar) -> do
|
forM maybeScalars $ \(sourceScalar, targetScalar) -> do
|
||||||
sourceName <- mkScalarTypeName sourceScalar <&> (<> Name.__cast_exp)
|
scalarTypeName <- C.fromName <$> mkScalarTypeName sourceScalar
|
||||||
targetName <- mkScalarTypeName targetScalar
|
targetName <- mkScalarTypeName targetScalar
|
||||||
targetOpExps <- comparisonExps $ ColumnScalar targetScalar
|
targetOpExps <- comparisonExps $ ColumnScalar targetScalar
|
||||||
let field = P.fieldOptional targetName Nothing $ (targetScalar,) <$> targetOpExps
|
let field = P.fieldOptional targetName Nothing $ (targetScalar,) <$> targetOpExps
|
||||||
|
sourceName = applyTypeNameCaseIdentifier tCase (scalarTypeName <> (C.fromTuple $$(G.litGQLIdentifier ["cast", "exp"])))
|
||||||
pure $ P.object sourceName Nothing $ M.fromList . maybeToList <$> field
|
pure $ P.object sourceName Nothing $ M.fromList . maybeToList <$> field
|
||||||
|
|
||||||
geographyWithinDistanceInput ::
|
geographyWithinDistanceInput ::
|
||||||
|
@ -7,6 +7,7 @@ module Hasura.GraphQL.Schema.OrderBy
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.Has
|
import Data.Has
|
||||||
|
import Data.Text.Casing qualified as C
|
||||||
import Data.Text.Extended
|
import Data.Text.Extended
|
||||||
import Hasura.GraphQL.Parser.Class
|
import Hasura.GraphQL.Parser.Class
|
||||||
import Hasura.GraphQL.Schema.Backend
|
import Hasura.GraphQL.Schema.Backend
|
||||||
@ -99,7 +100,7 @@ orderByExp sourceInfo tableInfo = memoizeOn 'orderByExp (_siName sourceInfo, tab
|
|||||||
otherTableOrderBy <- join <$> P.fieldOptional fieldName Nothing (P.nullable otherTableParser)
|
otherTableOrderBy <- join <$> P.fieldOptional fieldName Nothing (P.nullable otherTableParser)
|
||||||
pure $ fmap (map $ fmap $ IR.AOCObjectRelation relationshipInfo newPerms) otherTableOrderBy
|
pure $ fmap (map $ fmap $ IR.AOCObjectRelation relationshipInfo newPerms) otherTableOrderBy
|
||||||
ArrRel -> do
|
ArrRel -> do
|
||||||
let aggregateFieldName = fieldName <> Name.__aggregate
|
let aggregateFieldName = applyFieldNameCaseIdentifier tCase $ C.fromTuple (fieldName, [G.convertNameToSuffix Name._aggregate])
|
||||||
aggregationParser <- lift $ orderByAggregation sourceInfo remoteTableInfo
|
aggregationParser <- lift $ orderByAggregation sourceInfo remoteTableInfo
|
||||||
pure $ do
|
pure $ do
|
||||||
aggregationOrderBy <- join <$> P.fieldOptional aggregateFieldName Nothing (P.nullable aggregationParser)
|
aggregationOrderBy <- join <$> P.fieldOptional aggregateFieldName Nothing (P.nullable aggregationParser)
|
||||||
@ -123,7 +124,7 @@ orderByExp sourceInfo tableInfo = memoizeOn 'orderByExp (_siName sourceInfo, tab
|
|||||||
(orderByOperator @b tCase sourceInfo)
|
(orderByOperator @b tCase sourceInfo)
|
||||||
<&> fmap (pure . mkOrderByItemG @b (IR.AOCComputedField computedFieldOrderBy)) . join
|
<&> fmap (pure . mkOrderByItemG @b (IR.AOCComputedField computedFieldOrderBy)) . join
|
||||||
ReturnsTable table -> do
|
ReturnsTable table -> do
|
||||||
let aggregateFieldName = fieldName <> Name.__aggregate
|
let aggregateFieldName = applyFieldNameCaseIdentifier tCase $ C.fromTuple (fieldName, [G.convertNameToSuffix Name._aggregate])
|
||||||
tableInfo' <- askTableInfo sourceInfo table
|
tableInfo' <- askTableInfo sourceInfo table
|
||||||
perms <- MaybeT $ tableSelectPermissions tableInfo'
|
perms <- MaybeT $ tableSelectPermissions tableInfo'
|
||||||
let newPerms = fmap partialSQLExpToUnpreparedValue <$> spiFilter perms
|
let newPerms = fmap partialSQLExpToUnpreparedValue <$> spiFilter perms
|
||||||
@ -238,7 +239,7 @@ orderByOperator' ::
|
|||||||
Parser 'Both n (Maybe (BasicOrderType b, NullsOrderType b))
|
Parser 'Both n (Maybe (BasicOrderType b, NullsOrderType b))
|
||||||
orderByOperator' tCase sourceInfo =
|
orderByOperator' tCase sourceInfo =
|
||||||
let (sourcePrefix, orderOperators) = orderByOperators @b sourceInfo tCase
|
let (sourcePrefix, orderOperators) = orderByOperators @b sourceInfo tCase
|
||||||
in P.nullable $ P.enum (applyFieldNameCaseCust tCase sourcePrefix) (Just "column ordering options") $ orderOperators
|
in P.nullable $ P.enum (applyTypeNameCaseCust tCase sourcePrefix) (Just "column ordering options") $ orderOperators
|
||||||
|
|
||||||
mkOrderByItemG :: forall b a. a -> (BasicOrderType b, NullsOrderType b) -> IR.OrderByItemG b a
|
mkOrderByItemG :: forall b a. a -> (BasicOrderType b, NullsOrderType b) -> IR.OrderByItemG b a
|
||||||
mkOrderByItemG column (orderType, nullsOrder) =
|
mkOrderByItemG column (orderType, nullsOrder) =
|
||||||
|
@ -7,6 +7,7 @@ import Control.Lens
|
|||||||
import Data.Has
|
import Data.Has
|
||||||
import Data.HashMap.Strict.Extended qualified as Map
|
import Data.HashMap.Strict.Extended qualified as Map
|
||||||
import Data.List.NonEmpty qualified as NE
|
import Data.List.NonEmpty qualified as NE
|
||||||
|
import Data.Text.Casing qualified as C
|
||||||
import Data.Text.Extended
|
import Data.Text.Extended
|
||||||
import Hasura.Base.Error
|
import Hasura.Base.Error
|
||||||
import Hasura.GraphQL.Schema.Backend
|
import Hasura.GraphQL.Schema.Backend
|
||||||
@ -29,7 +30,7 @@ import Hasura.RQL.Types.RemoteSchema
|
|||||||
import Hasura.RQL.Types.ResultCustomization
|
import Hasura.RQL.Types.ResultCustomization
|
||||||
import Hasura.RQL.Types.SchemaCache hiding (askTableInfo)
|
import Hasura.RQL.Types.SchemaCache hiding (askTableInfo)
|
||||||
import Hasura.RQL.Types.Source
|
import Hasura.RQL.Types.Source
|
||||||
import Hasura.RQL.Types.SourceCustomization (NamingCase (..), mkCustomizedTypename)
|
import Hasura.RQL.Types.SourceCustomization
|
||||||
import Hasura.SQL.AnyBackend
|
import Hasura.SQL.AnyBackend
|
||||||
import Hasura.Session
|
import Hasura.Session
|
||||||
import Language.GraphQL.Draft.Syntax qualified as G
|
import Language.GraphQL.Draft.Syntax qualified as G
|
||||||
@ -182,6 +183,7 @@ remoteRelationshipToSourceField ::
|
|||||||
m [FieldParser n (IR.RemoteSourceSelect (IR.RemoteRelationshipField IR.UnpreparedValue) IR.UnpreparedValue tgt)]
|
m [FieldParser n (IR.RemoteSourceSelect (IR.RemoteRelationshipField IR.UnpreparedValue) IR.UnpreparedValue tgt)]
|
||||||
remoteRelationshipToSourceField sourceCache RemoteSourceFieldInfo {..} =
|
remoteRelationshipToSourceField sourceCache RemoteSourceFieldInfo {..} =
|
||||||
P.withTypenameCustomization (mkCustomizedTypename (Just _rsfiSourceCustomization) HasuraCase) do
|
P.withTypenameCustomization (mkCustomizedTypename (Just _rsfiSourceCustomization) HasuraCase) do
|
||||||
|
tCase <- asks getter
|
||||||
sourceInfo <-
|
sourceInfo <-
|
||||||
onNothing (unsafeSourceInfo @tgt =<< Map.lookup _rsfiSource sourceCache) $
|
onNothing (unsafeSourceInfo @tgt =<< Map.lookup _rsfiSource sourceCache) $
|
||||||
throw500 $ "source not found " <> dquote _rsfiSource
|
throw500 $ "source not found " <> dquote _rsfiSource
|
||||||
@ -202,7 +204,7 @@ remoteRelationshipToSourceField sourceCache RemoteSourceFieldInfo {..} =
|
|||||||
IR.SourceRelationshipObject $
|
IR.SourceRelationshipObject $
|
||||||
IR.AnnObjectSelectG fields _rsfiTable $ IR._tpFilter $ tablePermissionsInfo tablePerms
|
IR.AnnObjectSelectG fields _rsfiTable $ IR._tpFilter $ tablePermissionsInfo tablePerms
|
||||||
ArrRel -> do
|
ArrRel -> do
|
||||||
let aggFieldName = fieldName <> Name.__aggregate
|
let aggFieldName = applyFieldNameCaseIdentifier tCase $ C.fromTuple (fieldName, [G.convertNameToSuffix Name._aggregate])
|
||||||
selectionSetParser <- selectTable sourceInfo tableInfo fieldName Nothing
|
selectionSetParser <- selectTable sourceInfo tableInfo fieldName Nothing
|
||||||
aggSelectionSetParser <- selectTableAggregate sourceInfo tableInfo aggFieldName Nothing
|
aggSelectionSetParser <- selectTableAggregate sourceInfo tableInfo aggFieldName Nothing
|
||||||
pure $
|
pure $
|
||||||
|
Loading…
Reference in New Issue
Block a user