mirror of
https://github.com/zhigang1992/graphql-engine.git
synced 2026-05-25 10:23:36 +08:00
fix excessive memory consumption with bulk queries (#1972)
Use 'Strict' State monad instead of 'Lazy' to avoid unevaluated memory thunks
This commit is contained in:
committed by
Vamshi Surabhi
parent
6b3e544069
commit
7b5bbb758a
@@ -5,32 +5,34 @@ module Hasura.Prelude
|
||||
, onLeft
|
||||
) where
|
||||
|
||||
import Control.Applicative as M ((<|>))
|
||||
import Control.Monad as M (void, when)
|
||||
import Control.Monad.Base as M
|
||||
import Control.Monad.Except as M
|
||||
import Control.Monad.Fail as M (MonadFail)
|
||||
import Control.Monad.Identity as M
|
||||
import Control.Monad.Reader as M
|
||||
import Control.Monad.State as M
|
||||
import Data.Bool as M (bool)
|
||||
import Data.Either as M (lefts, partitionEithers, rights)
|
||||
import Data.Foldable as M (foldrM, toList)
|
||||
import Data.Hashable as M (Hashable)
|
||||
import Data.List as M (find, foldl', group, intercalate,
|
||||
intersect, lookup, sort, sortBy,
|
||||
sortOn, union, unionBy, (\\))
|
||||
import Data.Maybe as M (catMaybes, fromMaybe, isJust,
|
||||
isNothing, listToMaybe, mapMaybe,
|
||||
maybeToList)
|
||||
import Data.Ord as M (comparing)
|
||||
import Data.Semigroup as M (Semigroup (..))
|
||||
import Data.String as M (IsString)
|
||||
import Data.Text as M (Text)
|
||||
import Data.Word as M (Word64)
|
||||
import GHC.Generics as M (Generic)
|
||||
import Prelude as M hiding (fail, init, lookup)
|
||||
import Text.Read as M (readEither, readMaybe)
|
||||
import Control.Applicative as M ((<|>))
|
||||
import Control.Monad as M (void, when)
|
||||
import Control.Monad.Base as M
|
||||
import Control.Monad.Except as M
|
||||
import Control.Monad.Fail as M (MonadFail)
|
||||
import Control.Monad.Identity as M
|
||||
import Control.Monad.Reader as M
|
||||
import Control.Monad.State.Strict as M
|
||||
import Data.Bool as M (bool)
|
||||
import Data.Either as M (lefts, partitionEithers,
|
||||
rights)
|
||||
import Data.Foldable as M (foldrM, toList)
|
||||
import Data.Hashable as M (Hashable)
|
||||
import Data.List as M (find, foldl', group,
|
||||
intercalate, intersect,
|
||||
lookup, sort, sortBy, sortOn,
|
||||
union, unionBy, (\\))
|
||||
import Data.Maybe as M (catMaybes, fromMaybe, isJust,
|
||||
isNothing, listToMaybe,
|
||||
mapMaybe, maybeToList)
|
||||
import Data.Ord as M (comparing)
|
||||
import Data.Semigroup as M (Semigroup (..))
|
||||
import Data.String as M (IsString)
|
||||
import Data.Text as M (Text)
|
||||
import Data.Word as M (Word64)
|
||||
import GHC.Generics as M (Generic)
|
||||
import Prelude as M hiding (fail, init, lookup)
|
||||
import Text.Read as M (readEither, readMaybe)
|
||||
|
||||
onNothing :: (Monad m) => Maybe a -> m a -> m a
|
||||
onNothing m act = maybe act return m
|
||||
|
||||
@@ -50,10 +50,10 @@ import Hasura.RQL.Types.BoolExp as R
|
||||
import Hasura.RQL.Types.Common as R
|
||||
import Hasura.RQL.Types.DML as R
|
||||
import Hasura.RQL.Types.Error as R
|
||||
import Hasura.RQL.Types.EventTrigger as R
|
||||
import Hasura.RQL.Types.Permission as R
|
||||
import Hasura.RQL.Types.RemoteSchema as R
|
||||
import Hasura.RQL.Types.SchemaCache as R
|
||||
import Hasura.RQL.Types.EventTrigger as R
|
||||
|
||||
import Hasura.SQL.Types
|
||||
|
||||
@@ -165,9 +165,9 @@ instance (MonadTx m) => MonadTx (ReaderT s m) where
|
||||
liftTx = lift . liftTx
|
||||
|
||||
data LazyTx e a
|
||||
= LTErr e
|
||||
| LTNoTx a
|
||||
| LTTx (Q.TxE e a)
|
||||
= LTErr !e
|
||||
| LTNoTx !a
|
||||
| LTTx !(Q.TxE e a)
|
||||
|
||||
lazyTxToQTx :: LazyTx e a -> Q.TxE e a
|
||||
lazyTxToQTx = \case
|
||||
|
||||
Reference in New Issue
Block a user