mirror of
https://github.com/zhigang1992/graphql-engine.git
synced 2026-05-22 15:35:20 +08:00
server: add _is_null operator, closes #106
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
{-# LANGUAGE FlexibleContexts #-}
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
{-# LANGUAGE NoImplicitPrelude #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE FlexibleContexts #-}
|
||||
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
{-# LANGUAGE NoImplicitPrelude #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Hasura.GraphQL.Resolve.BoolExp
|
||||
( parseBoolExp
|
||||
@@ -25,6 +26,7 @@ import Hasura.GraphQL.Validate.Types
|
||||
import Hasura.RQL.Types
|
||||
|
||||
import Hasura.SQL.Types
|
||||
import Hasura.SQL.Value
|
||||
|
||||
parseOpExps
|
||||
:: (MonadError QErr m, MonadReader r m, Has FieldMap r)
|
||||
@@ -35,6 +37,7 @@ parseOpExps annVal = do
|
||||
"_eq" -> fmap RA.AEQ <$> asPGColValM v
|
||||
"_ne" -> fmap RA.ANE <$> asPGColValM v
|
||||
"_neq" -> fmap RA.ANE <$> asPGColValM v
|
||||
"_is_null" -> resolveIsNull v
|
||||
|
||||
"_in" -> fmap (RA.AIN . catMaybes) <$> parseMany asPGColValM v
|
||||
"_nin" -> fmap (RA.ANIN . catMaybes) <$> parseMany asPGColValM v
|
||||
@@ -59,6 +62,13 @@ parseOpExps annVal = do
|
||||
<> ": "
|
||||
<> showName k
|
||||
return $ map RA.OEVal $ catMaybes $ fromMaybe [] opExpsM
|
||||
where
|
||||
resolveIsNull v = case v of
|
||||
AGScalar _ Nothing -> return Nothing
|
||||
AGScalar _ (Just (PGValBoolean b)) ->
|
||||
return $ Just $ bool RA.ANISNOTNULL RA.ANISNULL b
|
||||
AGScalar _ _ -> throw500 "boolean value is expected"
|
||||
_ -> tyMismatch "pgvalue" v
|
||||
|
||||
parseColExp
|
||||
:: (MonadError QErr m, MonadReader r m, Has FieldMap r)
|
||||
|
||||
@@ -31,9 +31,9 @@ import qualified Language.GraphQL.Draft.Syntax as G
|
||||
import Hasura.GraphQL.Resolve.Context
|
||||
import Hasura.GraphQL.Validate.Types
|
||||
|
||||
import Hasura.Prelude
|
||||
import Hasura.RQL.Types
|
||||
import Hasura.SQL.Types
|
||||
import Hasura.Prelude
|
||||
|
||||
import qualified Hasura.SQL.DML as S
|
||||
|
||||
@@ -116,6 +116,7 @@ mkCompExpInp colTy =
|
||||
[ map (mk colScalarTy) typedOps
|
||||
, map (mk $ G.toLT colScalarTy) listOps
|
||||
, bool [] (map (mk $ mkScalarTy PGText) stringOps) isStringTy
|
||||
, [InpValInfo Nothing "_is_null" $ G.TypeNamed $ G.NamedType "Boolean"]
|
||||
]
|
||||
where
|
||||
tyDesc = mconcat
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{-# LANGUAGE FlexibleContexts #-}
|
||||
{-# LANGUAGE FlexibleInstances #-}
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE TypeSynonymInstances #-}
|
||||
{-# LANGUAGE FlexibleContexts #-}
|
||||
{-# LANGUAGE FlexibleInstances #-}
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE TypeSynonymInstances #-}
|
||||
|
||||
module Hasura.RQL.GBoolExp where
|
||||
|
||||
@@ -40,6 +40,9 @@ data AnnValOpExpG a
|
||||
| ASIMILAR !a -- similar, regex
|
||||
| ANSIMILAR !a-- not similar, regex
|
||||
|
||||
| ANISNULL -- IS NULL
|
||||
| ANISNOTNULL -- IS NOT NULL
|
||||
|
||||
deriving (Eq, Show)
|
||||
|
||||
data OpExpG a
|
||||
@@ -445,6 +448,8 @@ mkBoolExpBuilder rhsBldr lhs = \case
|
||||
ANILIKE val -> mkSimpleBoolExpBuilder (S.BECompare S.SNILIKE) val
|
||||
ASIMILAR val -> mkSimpleBoolExpBuilder (S.BECompare S.SSIMILAR) val
|
||||
ANSIMILAR val -> mkSimpleBoolExpBuilder (S.BECompare S.SNSIMILAR) val
|
||||
ANISNULL -> return $ S.BENull lhs
|
||||
ANISNOTNULL -> return $ S.BENotNull lhs
|
||||
where
|
||||
mkSimpleBoolExpBuilder beF pgColVal =
|
||||
beF lhs <$> rhsBldr pgColVal
|
||||
|
||||
Reference in New Issue
Block a user