packages feed

clickhouse-haskell-0.1.2.0: src/Database/ClickHouseDriver/HTTP/Connection.hs

-- Copyright (c) 2020-present, EMQX, Inc.
-- All rights reserved.
--
-- This source code is distributed under the terms of a MIT license,
-- found in the LICENSE file.

{-# LANGUAGE CPP  #-}
{-# LANGUAGE OverloadedStrings #-}

-- | Connection pool for HTTP connection. User should import Database.ClickHouseDriver.HTTP instead

module Database.ClickHouseDriver.HTTP.Connection (
    httpConnect,
    httpConnectDb,
    defaultHttpConnection,
    HttpConnection(..),
    createHttpPool
) where
                                
import Network.HTTP.Client
    ( defaultManagerSettings, newManager)
import Database.ClickHouseDriver.HTTP.Types
    ( HttpConnection(..),
      HttpParams(HttpParams, httpUsername, httpPort, httpPassword,
                 httpHost, httpDatabase) ) 
import Data.Default.Class ( Default(..) )
import Data.Pool ( createPool, Pool )
import Data.Time.Clock ( NominalDiffTime )

#define DEFAULT_USERNAME  "default"
#define DEFAULT_HOST_NAME "localhost"
#define DEFAULT_PASSWORD  ""
--TODO change default password to ""

defaultHttpConnection :: IO (HttpConnection)
defaultHttpConnection = httpConnect DEFAULT_USERNAME DEFAULT_PASSWORD 8123 DEFAULT_HOST_NAME

instance Default HttpParams where
  def = HttpParams{
     httpHost = DEFAULT_HOST_NAME,
     httpPassword = DEFAULT_PASSWORD,
     httpPort = 8123,
     httpUsername = DEFAULT_USERNAME,
     httpDatabase = Nothing
  }

createHttpPool :: HttpParams
                ->Int
                ->NominalDiffTime
                ->Int
                ->IO(Pool HttpConnection)
createHttpPool HttpParams{
                httpHost=host,
                httpPassword = password,
                httpPort = port,
                httpUsername = user,
                httpDatabase = db
              } 
  = createPool(
      do
        httpConnectDb user password port host db
  )(\_->return ())


httpConnect :: String->String->Int->String->IO(HttpConnection)
httpConnect user password port host = 
  httpConnectDb user password port host Nothing

httpConnectDb :: String->String->Int->String->Maybe String->IO(HttpConnection)
httpConnectDb user password port host database = do
  mng <- newManager defaultManagerSettings
  return HttpConnection {
    httpParams = HttpParams {
      httpHost = host,
      httpPassword = password,
      httpPort = port,
      httpUsername = user,
      httpDatabase = database
    },
      httpManager = mng
  }