gardening: move RQL.Instances to Base and clean it

GitOrigin-RevId: 01fa4133a4002f891d213c1f913511ccfd3c1741
This commit is contained in:
Antoine Leblanc 2021-05-13 14:17:40 +01:00 committed by hasura-bot
parent f24caef627
commit 08d605baca
16 changed files with 138 additions and 160 deletions

View File

@ -48,7 +48,7 @@ source-repository-package
source-repository-package source-repository-package
type: git type: git
location: https://github.com/hasura/graphql-parser-hs.git location: https://github.com/hasura/graphql-parser-hs.git
tag: f3a20ab6201669bd683d5a0c8580410af264c7d0 tag: c4af9f09b128756d0ee2b2997d0aa2a5aabb8e9e
source-repository-package source-repository-package
type: git type: git

View File

@ -303,6 +303,7 @@ library
, Hasura.Metadata.Class , Hasura.Metadata.Class
, Hasura.Base.Error , Hasura.Base.Error
, Hasura.Base.Instances
, Hasura.Backends.BigQuery.Connection , Hasura.Backends.BigQuery.Connection
, Hasura.Backends.BigQuery.DataLoader.Execute , Hasura.Backends.BigQuery.DataLoader.Execute
@ -426,7 +427,6 @@ library
, Hasura.Server.Migrate.Internal , Hasura.Server.Migrate.Internal
, Hasura.Server.Auth.JWT.Internal , Hasura.Server.Auth.JWT.Internal
, Hasura.Server.Auth.JWT.Logging , Hasura.Server.Auth.JWT.Logging
, Hasura.RQL.Instances
, Hasura.RQL.Types , Hasura.RQL.Types
, Hasura.RQL.Types.Action , Hasura.RQL.Types.Action
, Hasura.RQL.Types.ApiLimit , Hasura.RQL.Types.ApiLimit

View File

@ -34,6 +34,7 @@ import Hasura.Backends.Postgres.Translate.Returning
import Hasura.Backends.Postgres.Translate.Select import Hasura.Backends.Postgres.Translate.Select
import Hasura.Backends.Postgres.Translate.Update import Hasura.Backends.Postgres.Translate.Update
import Hasura.Base.Error import Hasura.Base.Error
import Hasura.Base.Instances ()
import Hasura.EncJSON import Hasura.EncJSON
import Hasura.RQL.DML.Internal import Hasura.RQL.DML.Internal
import Hasura.RQL.IR.Delete import Hasura.RQL.IR.Delete
@ -41,7 +42,6 @@ import Hasura.RQL.IR.Insert
import Hasura.RQL.IR.Returning import Hasura.RQL.IR.Returning
import Hasura.RQL.IR.Select import Hasura.RQL.IR.Select
import Hasura.RQL.IR.Update import Hasura.RQL.IR.Update
import Hasura.RQL.Instances ()
import Hasura.RQL.Types import Hasura.RQL.Types
import Hasura.SQL.Types import Hasura.SQL.Types
import Hasura.Server.Version (HasVersion) import Hasura.Server.Version (HasVersion)

View File

@ -15,7 +15,7 @@ import Hasura.Backends.Postgres.SQL.Types
import Hasura.Backends.Postgres.SQL.Value import Hasura.Backends.Postgres.SQL.Value
import Hasura.Backends.Postgres.Types.Column import Hasura.Backends.Postgres.Types.Column
import Hasura.Base.Error import Hasura.Base.Error
import Hasura.RQL.Instances () import Hasura.Base.Instances ()
import Hasura.RQL.Types import Hasura.RQL.Types
import Hasura.SQL.Types import Hasura.SQL.Types

View File

@ -2,7 +2,7 @@ module Hasura.Backends.Postgres.Types.Column where
import Hasura.Backends.Postgres.Instances.Types () import Hasura.Backends.Postgres.Instances.Types ()
import Hasura.Backends.Postgres.SQL.Types import Hasura.Backends.Postgres.SQL.Types
import Hasura.RQL.Instances () import Hasura.Base.Instances ()
import Hasura.RQL.Types.Column import Hasura.RQL.Types.Column
import Hasura.SQL.Backend import Hasura.SQL.Backend

View File

@ -0,0 +1,107 @@
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
{- | This module defines all missing instances of third party libraries.
-}
module Hasura.Base.Instances where
import Hasura.Prelude
import qualified Data.Aeson as J
import qualified Data.HashMap.Strict as M
import qualified Data.HashSet as S
import qualified Data.URL.Template as UT
import qualified Database.PG.Query as Q
import qualified Language.Haskell.TH.Syntax as TH
import qualified System.Cron.Parser as C
import qualified System.Cron.Types as C
import qualified Text.Regex.TDFA as TDFA
import qualified Text.Regex.TDFA.Pattern as TDFA
import Data.Functor.Product
import Data.GADT.Compare
import Data.Text
--------------------------------------------------------------------------------
-- Deepseq
instance NFData UT.Variable
instance NFData UT.TemplateItem
instance NFData UT.URLTemplate
instance NFData C.StepField
instance NFData C.RangeField
instance NFData C.SpecificField
instance NFData C.BaseField
instance NFData C.CronField
instance NFData C.MonthSpec
instance NFData C.DayOfMonthSpec
instance NFData C.DayOfWeekSpec
instance NFData C.HourSpec
instance NFData C.MinuteSpec
instance NFData C.CronSchedule
--------------------------------------------------------------------------------
-- Template Haskell
instance (TH.Lift k, TH.Lift v) => TH.Lift (M.HashMap k v) where
lift m = [| M.fromList $(TH.lift $ M.toList m) |]
liftTyped = TH.unsafeTExpCoerce . TH.lift
instance TH.Lift a => TH.Lift (S.HashSet a) where
lift s = [| S.fromList $(TH.lift $ S.toList s) |]
liftTyped = TH.unsafeTExpCoerce . TH.lift
deriving instance TH.Lift TDFA.CompOption
deriving instance TH.Lift TDFA.DoPa
deriving instance TH.Lift TDFA.ExecOption
deriving instance TH.Lift TDFA.Pattern
deriving instance TH.Lift TDFA.PatternSet
deriving instance TH.Lift TDFA.PatternSetCharacterClass
deriving instance TH.Lift TDFA.PatternSetCollatingElement
deriving instance TH.Lift TDFA.PatternSetEquivalenceClass
--------------------------------------------------------------------------------
-- GADT
instance (GCompare f, GCompare g) => GCompare (Product f g) where
Pair a1 a2 `gcompare` Pair b1 b2 = case gcompare a1 b1 of
GLT -> GLT
GEQ -> case gcompare a2 b2 of
GLT -> GLT
GEQ -> GEQ
GGT -> GGT
GGT -> GGT
--------------------------------------------------------------------------------
-- JSON
instance J.FromJSON C.CronSchedule where
parseJSON = J.withText "CronSchedule" $ \t ->
onLeft (C.parseCronSchedule t) fail
instance J.ToJSON C.CronSchedule where
toJSON = J.String . C.serializeCronSchedule
instance J.ToJSONKey Void
--------------------------------------------------------------------------------
-- Postgres
instance Q.ToPrepArg C.CronSchedule where
toPrepVal = Q.toPrepVal . C.serializeCronSchedule
instance Q.FromCol C.CronSchedule where
fromCol bs =
case Q.fromCol bs of
Left err -> Left err
Right dbCron ->
case C.parseCronSchedule dbCron of
Left err' -> Left $ "invalid cron schedule " <> pack err'
Right cron -> Right cron

View File

@ -2,14 +2,14 @@ module Hasura.RQL.DDL.Headers where
import Data.Aeson import Data.Aeson
import Hasura.Base.Error import Hasura.Base.Error
import Hasura.Incremental (Cacheable) import Hasura.Base.Instances ()
import Hasura.Incremental (Cacheable)
import Hasura.Prelude import Hasura.Prelude
import Hasura.RQL.Instances ()
import qualified Data.CaseInsensitive as CI import qualified Data.CaseInsensitive as CI
import qualified Data.Environment as Env import qualified Data.Environment as Env
import qualified Data.Text as T import qualified Data.Text as T
import qualified Network.HTTP.Types as HTTP import qualified Network.HTTP.Types as HTTP
data HeaderConf = HeaderConf HeaderName HeaderValue data HeaderConf = HeaderConf HeaderName HeaderValue

View File

@ -48,13 +48,13 @@ import Data.Aeson.TH
import Hasura.Backends.Postgres.DDL.RunSQL import Hasura.Backends.Postgres.DDL.RunSQL
import Hasura.Base.Error import Hasura.Base.Error
import Hasura.Base.Instances ()
import Hasura.EncJSON import Hasura.EncJSON
import Hasura.RQL.DDL.Schema.Cache import Hasura.RQL.DDL.Schema.Cache
import Hasura.RQL.DDL.Schema.Catalog import Hasura.RQL.DDL.Schema.Catalog
import Hasura.RQL.DDL.Schema.Function import Hasura.RQL.DDL.Schema.Function
import Hasura.RQL.DDL.Schema.Rename import Hasura.RQL.DDL.Schema.Rename
import Hasura.RQL.DDL.Schema.Table import Hasura.RQL.DDL.Schema.Table
import Hasura.RQL.Instances ()
import Hasura.RQL.Types import Hasura.RQL.Types
import Hasura.Server.Utils (quoteRegex) import Hasura.Server.Utils (quoteRegex)

View File

@ -45,9 +45,9 @@ import qualified Hasura.Backends.Postgres.SQL.DML as PG
import Hasura.Backends.Postgres.Instances.Types () import Hasura.Backends.Postgres.Instances.Types ()
import Hasura.Backends.Postgres.SQL.Types import Hasura.Backends.Postgres.SQL.Types
import Hasura.Base.Instances ()
import Hasura.RQL.IR.BoolExp import Hasura.RQL.IR.BoolExp
import Hasura.RQL.IR.OrderBy import Hasura.RQL.IR.OrderBy
import Hasura.RQL.Instances ()
import Hasura.RQL.Types.Column import Hasura.RQL.Types.Column
import Hasura.RQL.Types.Common import Hasura.RQL.Types.Common
import Hasura.SQL.Backend import Hasura.SQL.Backend

View File

@ -12,7 +12,7 @@ import qualified Data.Text as T
import Data.Aeson import Data.Aeson
import Hasura.RQL.Instances () import Hasura.Base.Instances ()
import Hasura.RQL.Types.Backend import Hasura.RQL.Types.Backend
import Hasura.RQL.Types.Common import Hasura.RQL.Types.Common
import Hasura.SQL.Backend import Hasura.SQL.Backend

View File

@ -1,130 +0,0 @@
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Hasura.RQL.Instances where
import Hasura.Prelude
import qualified Data.Aeson as J
import qualified Data.HashMap.Strict as M
import qualified Data.HashSet as S
import qualified Data.URL.Template as UT
import qualified Database.PG.Query as Q
import qualified Language.GraphQL.Draft.Syntax as G
import qualified Language.Haskell.TH.Syntax as TH
import qualified Text.Regex.TDFA as TDFA
import qualified Text.Regex.TDFA.Pattern as TDFA
import Control.DeepSeq (NFData (..))
import Data.Functor.Product
import Data.GADT.Compare
import Data.Text
import System.Cron.Parser
import System.Cron.Types
instance NFData G.FragmentDefinition
instance NFData G.GType
instance NFData G.OperationType
instance NFData G.VariableDefinition
instance NFData G.SchemaDefinition
instance NFData G.RootOperationTypeDefinition
instance NFData G.TypeSystemDefinition
instance NFData G.SchemaDocument
instance NFData UT.Variable
instance NFData UT.TemplateItem
instance NFData UT.URLTemplate
instance NFData G.Name where
rnf = rnf . G.unName
instance NFData a => NFData (G.Directive a)
instance NFData a => NFData (G.ExecutableDefinition a)
instance (NFData (a b), NFData b) => NFData (G.Field a b)
instance NFData a => NFData (G.FragmentSpread a)
instance (NFData (a b), NFData b) => NFData (G.InlineFragment a b)
instance (NFData (a b), NFData b) => NFData (G.OperationDefinition a b)
instance (NFData (a b), NFData b) => NFData (G.Selection a b)
instance (NFData (a b), NFData b) => NFData (G.TypedOperationDefinition a b)
instance NFData G.InputValueDefinition
instance NFData a => NFData (G.InputObjectTypeDefinition a)
instance (NFData a) => NFData (G.ObjectTypeDefinition a)
instance NFData G.UnionTypeDefinition
instance NFData G.EnumTypeDefinition
instance NFData G.EnumValueDefinition
instance (NFData a) => NFData (G.FieldDefinition a)
instance NFData G.ScalarTypeDefinition
instance (NFData a, NFData b) => NFData (G.InterfaceTypeDefinition a b)
instance (NFData a, NFData b) => NFData (G.TypeDefinition a b)
instance NFData a => NFData (G.Value a)
deriving instance NFData G.Description
deriving instance NFData G.EnumValue
deriving instance NFData G.Nullability
deriving instance NFData a => NFData (G.ExecutableDocument a)
-- instances for CronSchedule from package `cron`
instance NFData StepField
instance NFData RangeField
instance NFData SpecificField
instance NFData BaseField
instance NFData CronField
instance NFData MonthSpec
instance NFData DayOfMonthSpec
instance NFData DayOfWeekSpec
instance NFData HourSpec
instance NFData MinuteSpec
instance NFData CronSchedule
instance (TH.Lift k, TH.Lift v) => TH.Lift (M.HashMap k v) where
lift m = [| M.fromList $(TH.lift $ M.toList m) |]
#if MIN_VERSION_template_haskell(2,16,0)
liftTyped = TH.unsafeTExpCoerce . TH.lift
#endif
instance TH.Lift a => TH.Lift (S.HashSet a) where
lift s = [| S.fromList $(TH.lift $ S.toList s) |]
#if MIN_VERSION_template_haskell(2,16,0)
liftTyped = TH.unsafeTExpCoerce . TH.lift
#endif
deriving instance TH.Lift TDFA.CompOption
deriving instance TH.Lift TDFA.DoPa
deriving instance TH.Lift TDFA.ExecOption
deriving instance TH.Lift TDFA.Pattern
deriving instance TH.Lift TDFA.PatternSet
deriving instance TH.Lift TDFA.PatternSetCharacterClass
deriving instance TH.Lift TDFA.PatternSetCollatingElement
deriving instance TH.Lift TDFA.PatternSetEquivalenceClass
instance (GCompare f, GCompare g) => GCompare (Product f g) where
Pair a1 a2 `gcompare` Pair b1 b2 = case gcompare a1 b1 of
GLT -> GLT
GEQ -> case gcompare a2 b2 of
GLT -> GLT
GEQ -> GEQ
GGT -> GGT
GGT -> GGT
instance J.FromJSON CronSchedule where
parseJSON = J.withText "CronSchedule" $ \t ->
onLeft (parseCronSchedule t) fail
instance J.ToJSON CronSchedule where
toJSON = J.String . serializeCronSchedule
instance Q.ToPrepArg CronSchedule where
toPrepVal = Q.toPrepVal . serializeCronSchedule
instance Q.FromCol CronSchedule where
fromCol bs =
case Q.fromCol bs of
Left err -> Left err
Right dbCron ->
case parseCronSchedule dbCron of
Left err' -> Left $ "invalid cron schedule " <> pack err'
Right cron -> Right cron
instance J.ToJSONKey Void

View File

@ -38,8 +38,8 @@ import Data.Aeson.TH
import Data.Text.Extended import Data.Text.Extended
import Hasura.Base.Error import Hasura.Base.Error
import Hasura.Base.Instances ()
import Hasura.Incremental (Cacheable) import Hasura.Incremental (Cacheable)
import Hasura.RQL.Instances ()
import Hasura.RQL.Types.Backend import Hasura.RQL.Types.Backend
import Hasura.RQL.Types.Common import Hasura.RQL.Types.Common
import Hasura.SQL.Backend import Hasura.SQL.Backend

View File

@ -35,7 +35,7 @@ import qualified Data.Text as T
import Data.Text.Extended import Data.Text.Extended
import Data.Text.NonEmpty import Data.Text.NonEmpty
import Hasura.RQL.Instances () import Hasura.Base.Instances ()
import Hasura.RQL.Types.Endpoint.Trie as Trie import Hasura.RQL.Types.Endpoint.Trie as Trie
import Hasura.RQL.Types.QueryCollection (CollectionName, QueryName) import Hasura.RQL.Types.QueryCollection (CollectionName, QueryName)
import Web.HttpApiData (FromHttpApiData (..)) import Web.HttpApiData (FromHttpApiData (..))

View File

@ -31,8 +31,8 @@ import Data.Aeson.TH
import Data.Text.Extended import Data.Text.Extended
import Data.Text.NonEmpty import Data.Text.NonEmpty
import Hasura.Base.Instances ()
import Hasura.Incremental (Cacheable) import Hasura.Incremental (Cacheable)
import Hasura.RQL.Instances ()

View File

@ -2,17 +2,6 @@ module Hasura.Server.Utils where
import Hasura.Prelude import Hasura.Prelude
import Control.Lens ((^..))
import Data.Aeson
import Data.Aeson.Internal
import Data.Char
import Data.Text.Extended
import Data.Time
import Language.Haskell.TH.Syntax (Q, TExp)
import System.Environment
import System.Exit
import System.Process
import qualified Data.ByteString as B import qualified Data.ByteString as B
import qualified Data.CaseInsensitive as CI import qualified Data.CaseInsensitive as CI
import qualified Data.HashSet as Set import qualified Data.HashSet as Set
@ -31,7 +20,19 @@ import qualified Text.Regex.TDFA as TDFA
import qualified Text.Regex.TDFA.ReadRegex as TDFA import qualified Text.Regex.TDFA.ReadRegex as TDFA
import qualified Text.Regex.TDFA.TDFA as TDFA import qualified Text.Regex.TDFA.TDFA as TDFA
import Hasura.RQL.Instances () import Control.Lens ((^..))
import Data.Aeson
import Data.Aeson.Internal
import Data.Char
import Data.Text.Extended
import Data.Time
import Language.Haskell.TH.Syntax (Q, TExp)
import System.Environment
import System.Exit
import System.Process
import Hasura.Base.Instances ()
jsonHeader :: HTTP.Header jsonHeader :: HTTP.Header
jsonHeader = ("Content-Type", "application/json; charset=utf-8") jsonHeader = ("Content-Type", "application/json; charset=utf-8")

View File

@ -23,7 +23,7 @@ import Data.FileEmbed (makeRelativeToProject)
import Data.Text.Conversions (FromText (..), ToText (..)) import Data.Text.Conversions (FromText (..), ToText (..))
import Text.Regex.TDFA ((=~~)) import Text.Regex.TDFA ((=~~))
import Hasura.RQL.Instances () import Hasura.Base.Instances ()
import Hasura.Server.Utils (getValFromEnvOrScript) import Hasura.Server.Utils (getValFromEnvOrScript)
data Version data Version