mssql-simple-0.4.0.2: src/Database/MSSQLServer/Query/Row.hs
{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE TemplateHaskell #-}
module Database.MSSQLServer.Query.Row ( Row (..)
) where
import Database.Tds.Message
import Database.MSSQLServer.Query.Only
import Database.MSSQLServer.Query.Template
import Control.Monad(forM)
import Language.Haskell.TH (runIO,pprint)
mcdTypeInfo :: MetaColumnData -> TypeInfo
mcdTypeInfo (MetaColumnData _ _ ti _ _) = ti
class Row a where
fromListOfRawBytes :: [MetaColumnData] -> [RawBytes] -> a
instance (Data a) => Row (Only a) where
fromListOfRawBytes [m1] [b1] = Only d1
where
!d1 = fromRawBytes (mcdTypeInfo m1) b1
fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 1"
-- [MEMO] using Template Haskell
forM [2..30] $ \n -> do
dec <- rowTupleQ n
-- runIO $ putStrLn $ pprint dec
return dec
--instance (Data a1, Data a2) => Row (a1,a2) where
-- fromListOfRawBytes [m1,m2] [b1,b2] = (d1,d2)
-- where
-- !d1 = fromRawBytes (mcdTypeInfo m1) b1
-- !d2 = fromRawBytes (mcdTypeInfo m2) b2
-- fromListOfRawBytes _ _ = error "fromListOfRawBytes: List length must be 2"
--