@@ -0,0 +1,162 @@
1+{-# LANGUAGE RecordWildCards, BangPatterns #-}
3+module Database.PostgreSQL.Simple.FromRow
10+import Control.Applicative (Applicative(..), (<$>))
11+import Control.Exception (SomeException(..), throw)
12+import Control.Monad (replicateM)
13+import Data.ByteString (ByteString)
14+import qualified Data.ByteString.Char8 as B
15+import Database.PostgreSQL.Simple.Internal
16+import Database.PostgreSQL.Simple.Result (ResultError(..), Result(..))
17+import Database.PostgreSQL.Simple.Types (Only(..))
18+import Database.PostgreSQL.Simple.Ok
19+import qualified Database.PostgreSQL.LibPQ as PQ
20+import Database.PostgreSQL.Simple.Internal
21+import Database.PostgreSQL.Simple.FromField
23+import Control.Monad.Trans.State.Strict
24+import Control.Monad.Trans.Reader
25+import Control.Monad.Trans.Class
27+import Data.Vector ((!))
29+import System.IO.Unsafe ( unsafePerformIO )
32+ fromRow :: RowParser a
34+field :: FromField a => RowParser a
38+ lift (put (column + 1))
39+ let typename = typenames ! (\(PQ.Col x) -> fromIntegral x) column
42+ if (column > nfields rowresult) then lift (lift (Errors [])) else return ()
43+ lift (lift (fromField field (getvalue result row column)))
45+numFieldsRemaining :: RowParser Int
46+numFieldsRemaining = RP $ do
49+ return $! (\(PQ.Col x) -> fromIntegral x) (nfields rowresult - column)
52+instance (FromField a) => FromRow (Only a) where
57+instance (FromField a, FromField b) => FromRow (a,b) where
63+instance (FromField a, FromField b, FromField c) => FromRow (a,b,c) where
70+instance (FromField a, FromField b, FromField c, FromField d) =>
71+ FromRow (a,b,c,d) where
79+instance (FromField a, FromField b, FromField c, FromField d, FromField e) =>
80+ FromRow (a,b,c,d,e) where
89+instance (FromField a, FromField b, FromField c, FromField d, FromField e,
91+ FromRow (a,b,c,d,e,f) where
101+instance (FromField a, FromField b, FromField c, FromField d, FromField e,
102+ FromField f, FromField g) =>
103+ FromRow (a,b,c,d,e,f,g) where
112+ return (a,b,c,d,e,f,g)
114+instance (FromField a, FromField b, FromField c, FromField d, FromField e,
115+ FromField f, FromField g, FromField h) =>
116+ FromRow (a,b,c,d,e,f,g,h) where
126+ return (a,b,c,d,e,f,g,h)
128+instance (FromField a, FromField b, FromField c, FromField d, FromField e,
129+ FromField f, FromField g, FromField h, FromField i) =>
130+ FromRow (a,b,c,d,e,f,g,h,i) where
141+ return (a,b,c,d,e,f,g,h,i)
143+instance (FromField a, FromField b, FromField c, FromField d, FromField e,
144+ FromField f, FromField g, FromField h, FromField i, FromField j) =>
145+ FromRow (a,b,c,d,e,f,g,h,i,j) where
157+ return (a,b,c,d,e,f,g,h,i,j)
159+instance FromField a => FromRow [a] where
161+ n <- numFieldsRemaining