@@ -35,6 +35,7 @@ import qualified Database.PostgreSQL.LibPQ as PQ
35import Database.PostgreSQL.Simple.Internal
35import Database.PostgreSQL.Simple.Internal
36import Database.PostgreSQL.Simple.FromField
36import Database.PostgreSQL.Simple.FromField
37import Database.PostgreSQL.Simple.Types ((:.)(..))
37import Database.PostgreSQL.Simple.Types ((:.)(..))
38+import System.IO.Unsafe (unsafePerformIO)
39import Control.Monad.Trans.State.Strict
40import Control.Monad.Trans.State.Strict
40import Control.Monad.Trans.Reader
41import Control.Monad.Trans.Reader
@@ -65,16 +66,22 @@ import Data.Vector ((!))
65class FromRow a where
66class FromRow a where
66 fromRow :: RowParser a
67 fromRow :: RowParser a
69+getvalue :: PQ.Result -> PQ.Row -> PQ.Column -> Maybe ByteString
70+getvalue result row col = unsafePerformIO (PQ.getvalue result row col)
72+nfields :: PQ.Result -> PQ.Column
73+nfields result = unsafePerformIO (PQ.nfields result)
68fieldWith :: FieldParser a -> RowParser a
75fieldWith :: FieldParser a -> RowParser a
69fieldWith fieldP = RP $ do
76fieldWith fieldP = RP $ do
70 let unCol (PQ.Col x) = fromIntegral x :: Int
77 let unCol (PQ.Col x) = fromIntegral x :: Int
71− r@Row{..} <- ask
78+ Row{..} <- ask
72 column <- lift get
79 column <- lift get
73 lift (put (column + 1))
80 lift (put (column + 1))
74 let ncols = nfields rowresult
81 let ncols = nfields rowresult
75 if (column >= ncols)
82 if (column >= ncols)
77− let vals = map (\c -> ( typenames r ! (unCol c)
84+ let vals = map (\c -> ( typname (typ (typeinfos ! unCol c))
78 , fmap ellipsis (getvalue rowresult row c) ))
85 , fmap ellipsis (getvalue rowresult row c) ))
79 [0..ncols-1]
86 [0..ncols-1]
80 convertError = ConversionFailed
87 convertError = ConversionFailed