这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions server/src-lib/Hasura/GraphQL/Resolve/BoolExp.hs
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion server/src-lib/Hasura/GraphQL/Schema.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
17 changes: 11 additions & 6 deletions server/src-lib/Hasura/RQL/GBoolExp.hs
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down