mirror of
https://github.com/zhigang1992/graphql-engine.git
synced 2026-06-16 18:40:09 +08:00
This fixes #3759. Also, while we’re at it, also improve the way invalidations are synced across instances so enums and remote schemas are appropriately reloaded by the schema syncing process.
58 lines
2.0 KiB
Haskell
58 lines
2.0 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
|
|
module Main where
|
|
|
|
import Data.Text.Conversions (convertText)
|
|
|
|
import Hasura.App
|
|
import Hasura.Logging (Hasura)
|
|
import Hasura.Prelude
|
|
import Hasura.RQL.DDL.Metadata (fetchMetadata)
|
|
import Hasura.RQL.DDL.Schema
|
|
import Hasura.RQL.Types
|
|
import Hasura.Server.Init
|
|
import Hasura.Server.Migrate (dropCatalog)
|
|
import Hasura.Server.Version
|
|
|
|
import qualified Data.ByteString.Lazy as BL
|
|
import qualified Data.ByteString.Lazy.Char8 as BLC
|
|
import qualified Database.PG.Query as Q
|
|
|
|
main :: IO ()
|
|
main = parseArgs >>= unAppM . runApp
|
|
|
|
runApp :: HGEOptions Hasura -> AppM ()
|
|
runApp (HGEOptionsG rci hgeCmd) =
|
|
withVersion $$(getVersionFromEnvironment) case hgeCmd of
|
|
HCServe serveOptions -> do
|
|
(initCtx, initTime) <- initialiseCtx hgeCmd rci
|
|
runHGEServer serveOptions initCtx initTime
|
|
HCExport -> do
|
|
(initCtx, _) <- initialiseCtx hgeCmd rci
|
|
res <- runTx' initCtx fetchMetadata
|
|
either printErrJExit printJSON res
|
|
|
|
HCClean -> do
|
|
(initCtx, _) <- initialiseCtx hgeCmd rci
|
|
res <- runTx' initCtx dropCatalog
|
|
either printErrJExit (const cleanSuccess) res
|
|
|
|
HCExecute -> do
|
|
(InitCtx{..}, _) <- initialiseCtx hgeCmd rci
|
|
queryBs <- liftIO BL.getContents
|
|
let sqlGenCtx = SQLGenCtx False
|
|
res <- runAsAdmin _icPgPool sqlGenCtx _icHttpManager do
|
|
schemaCache <- buildRebuildableSchemaCache
|
|
execQuery queryBs
|
|
& runHasSystemDefinedT (SystemDefined False)
|
|
& runCacheRWT schemaCache
|
|
& fmap (\(res, _, _) -> res)
|
|
either printErrJExit (liftIO . BLC.putStrLn) res
|
|
|
|
HCVersion -> liftIO $ putStrLn $ "Hasura GraphQL Engine: " ++ convertText currentVersion
|
|
where
|
|
runTx' initCtx tx =
|
|
liftIO $ runExceptT $ Q.runTx (_icPgPool initCtx) (Q.Serializable, Nothing) tx
|
|
|
|
cleanSuccess = liftIO $ putStrLn "successfully cleaned graphql-engine related data"
|