mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-09-21 07:28:26 +03:00
MySQL: Initial connection and corresponding types
https://github.com/hasura/graphql-engine-mono/pull/1517 Co-authored-by: Sibi Prabakaran <737477+psibi@users.noreply.github.com> Co-authored-by: Chris Done <11019+chrisdone@users.noreply.github.com> Co-authored-by: Abby Sassel <3883855+sassela@users.noreply.github.com> GitOrigin-RevId: e0f61664b33d8ca50f223ec7fb76c66940eabc89
This commit is contained in:
parent
d8fa32776b
commit
921bdf709b
@ -393,6 +393,9 @@ library
|
||||
, Hasura.Backends.Postgres.Types.Table
|
||||
, Hasura.Backends.Postgres.Types.CitusExtraTableMetadata
|
||||
|
||||
, Hasura.Backends.MySQL.Types
|
||||
, Hasura.Backends.MySQL.Connection
|
||||
|
||||
-- Exposed for benchmark:
|
||||
, Hasura.Cache.Bounded
|
||||
, Hasura.Logging
|
||||
|
26
server/src-lib/Hasura/Backends/MySQL/Connection.hs
Normal file
26
server/src-lib/Hasura/Backends/MySQL/Connection.hs
Normal file
@ -0,0 +1,26 @@
|
||||
module Hasura.Backends.MySQL.Connection where
|
||||
|
||||
|
||||
import Data.Pool (createPool)
|
||||
import qualified Data.Text as T
|
||||
import Database.MySQL.Base
|
||||
import Hasura.Backends.MySQL.Types
|
||||
import Hasura.Base.Error
|
||||
import Hasura.Prelude
|
||||
import Hasura.RQL.Types.Common
|
||||
|
||||
|
||||
resolveSourceConfig :: (MonadIO m) =>
|
||||
SourceName -> ConnSourceConfig -> m (Either QErr SourceConfig)
|
||||
resolveSourceConfig _name csc@ConnSourceConfig{..} =
|
||||
let connectInfo =
|
||||
defaultConnectInfo
|
||||
{ connectHost = T.unpack _cscHost
|
||||
, connectPort = _cscPort
|
||||
, connectUser = T.unpack _cscUser
|
||||
, connectPassword = T.unpack _cscPassword
|
||||
, connectDatabase = T.unpack _cscDatabase
|
||||
}
|
||||
in runExceptT $
|
||||
SourceConfig csc <$>
|
||||
liftIO (createPool (connect connectInfo) close 1 (60 {-seconds-} * 60 {-minutes-}) 1)
|
54
server/src-lib/Hasura/Backends/MySQL/Types.hs
Normal file
54
server/src-lib/Hasura/Backends/MySQL/Types.hs
Normal file
@ -0,0 +1,54 @@
|
||||
{-# LANGUAGE DeriveAnyClass #-}
|
||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||
|
||||
|
||||
module Hasura.Backends.MySQL.Types where
|
||||
|
||||
|
||||
import qualified Data.Aeson as J
|
||||
import qualified Data.Aeson.Casing as J
|
||||
import qualified Data.Aeson.TH as J
|
||||
import Data.Hashable
|
||||
import Data.Pool
|
||||
import Data.Word (Word16)
|
||||
import Database.MySQL.Base
|
||||
import Hasura.Incremental.Internal.Dependency (Cacheable (..))
|
||||
import Hasura.Prelude
|
||||
import System.IO.Unsafe (unsafePerformIO)
|
||||
|
||||
|
||||
-- | Partial of Database.MySQL.Simple.ConnectInfo
|
||||
data ConnSourceConfig
|
||||
= ConnSourceConfig
|
||||
{ _cscHost :: !Text -- ^ Works with @127.0.0.1@ but not with @localhost@ for some reason
|
||||
, _cscPort :: !Word16
|
||||
, _cscUser :: !Text
|
||||
, _cscPassword :: !Text
|
||||
, _cscDatabase :: !Text
|
||||
} deriving (Eq, Show, NFData, Generic, Hashable)
|
||||
$(J.deriveJSON (J.aesonDrop 4 J.snakeCase) {J.omitNothingFields = False} ''ConnSourceConfig)
|
||||
instance Arbitrary ConnSourceConfig where
|
||||
arbitrary = genericArbitrary
|
||||
instance Cacheable Word16 where
|
||||
unchanged _ = (==)
|
||||
deriving instance Cacheable ConnSourceConfig
|
||||
|
||||
|
||||
data SourceConfig
|
||||
= SourceConfig
|
||||
{ scConfig :: !ConnSourceConfig
|
||||
, scConnectionPool :: !(Pool Connection)
|
||||
} deriving (Eq, Generic, J.ToJSON)
|
||||
instance Arbitrary SourceConfig where
|
||||
arbitrary = genericArbitrary
|
||||
instance J.ToJSON (Pool Connection) where
|
||||
toJSON = const (J.String "_REDACTED_")
|
||||
instance Eq (Pool Connection) where
|
||||
_ == _ = True
|
||||
instance Arbitrary (Pool Connection) where
|
||||
arbitrary = pure . unsafePerformIO $
|
||||
createPool (connect defaultConnectInfo) close 1 (60 {-seconds-} * 60 {-minutes-}) 1
|
||||
instance Cacheable SourceConfig where
|
||||
unchanged _ = (==)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user