{-# LANGUAGE OverloadedStrings #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Database.PostgreSQL.Simple.LargeObjects
-- Copyright   :  (c) 2011 Leon P Smith
-- License     :  BSD3
--
-- Maintainer  :  leon@melding-monads.com
--
-----------------------------------------------------------------------------

module Database.PostgreSQL.Simple.LargeObjects
     ( loImport
     , loExport
     , Oid(..)
     ) where

import           Control.Applicative ((<$>))
import           Control.Exception (throwIO)
import           Database.PostgreSQL.LibPQ (Oid(..))
import qualified Database.PostgreSQL.LibPQ as PQ
import           Database.PostgreSQL.Simple.Internal
import           Foreign.C.Types(CInt)

loImport :: Connection -> FilePath -> IO Oid
loImport conn path = withConnection conn $ \c -> do
    res <- PQ.loImport c path
    case res of
      Nothing -> do
          msg <- maybe "loImport error" id <$> PQ.errorMessage c
          throwIO $ SqlError { sqlNativeError = -1   -- FIXME?
                             , sqlErrorMsg    = msg
                             , sqlState       = ""  }
      Just  x -> return x


loExport :: Connection -> Oid -> FilePath -> IO ()
loExport conn oid path = withConnection conn $ \c -> do
    res <- PQ.loExport c oid path
    case res of
      Nothing -> do
          msg <- maybe "loExport error" id <$> PQ.errorMessage c
          throwIO $ SqlError { sqlNativeError = -1   -- FIXME?
                             , sqlErrorMsg    = msg
                             , sqlState       = ""  }
      Just  x -> return x