New patches: [added ByteString support to Database/Oracle benjamin.franksen@bessy.de**20070714222517] { hunk ./Database/Oracle/Enumerator.lhs 41 +> import qualified Data.ByteString.Char8 as B hunk ./Database/Oracle/Enumerator.lhs 948 +> bufferToByteString :: ColumnBuffer -> IO (Maybe B.ByteString) +> bufferToByteString buffer = OCI.bufferToByteString (undefined, colBufBufferFPtr buffer, colBufNullFPtr buffer, colBufSizeFPtr buffer) + hunk ./Database/Oracle/Enumerator.lhs 1010 +> instance DBType (Maybe B.ByteString) Query ColumnBuffer where +> allocBufferFor _ q n = allocBuffer q (16000, oci_SQLT_CHR) n +> fetchCol q buffer = bufferToByteString buffer + hunk ./Database/Oracle/OCIFunctions.lhs 39 +> import qualified Data.ByteString.Base as B hunk ./Database/Oracle/OCIFunctions.lhs 676 + +> bufferToByteString :: ColumnInfo -> IO (Maybe B.ByteString) +> bufferToByteString (_, bufFPtr, nullFPtr, sizeFPtr) = +> withForeignPtr nullFPtr $ \nullIndPtr -> do +> nullInd <- liftM cShort2Int (peek nullIndPtr) +> if (nullInd == -1) -- -1 == null, 0 == value +> then return Nothing +> else do +> -- Given a column buffer, extract a string of variable length +> withForeignPtr bufFPtr $ \bufferPtr -> +> withForeignPtr sizeFPtr $ \retSizePtr -> do +> retsize <- liftM cUShort2Int (peek retSizePtr) +> --create :: Int -> (Ptr Word8 -> IO ()) -> IO ByteString +> val <- B.create retsize (\p -> copyBytes (castPtr p) bufferPtr retsize) +> return (Just val) } [added ByteString support to Database/Sqlite Ben Franksen **20070714230837] { hunk ./Database/Sqlite/Enumerator.lhs 38 +> import qualified Data.ByteString.Char8 as B hunk ./Database/Sqlite/Enumerator.lhs 366 +> bufferToByteString query buffer = +> DBAPI.colValByteString (stmtHandle (queryStmt query)) (colPos buffer) + hunk ./Database/Sqlite/Enumerator.lhs 414 +> instance DBType (Maybe B.ByteString) Query ColumnBuffer where +> allocBufferFor _ q n = allocBuffer q n +> fetchCol q buffer = bufferToByteString q buffer + hunk ./Database/Sqlite/SqliteFunctions.lhs 22 +> import qualified Data.ByteString.Char8 as B hunk ./Database/Sqlite/SqliteFunctions.lhs 278 + +> colValByteString :: StmtHandle -> Int -> IO (Maybe B.ByteString) +> colValByteString stmt colnum = do +> cstrptr <- sqliteColumnText stmt (fromIntegral (colnum - 1)) +> if cstrptr == nullPtr +> then return Nothing +> else do +> str <- B.copyCString cstrptr +> return (Just str) } Context: [added Functor and MonadFix instances to DBM Ben Franksen **20070714112112] [TAG 0.6 oleg@okmij.org**20070202102428] Patch bundle hash: 3bd78e14633d172cbabf4fd716fc0bcf3b32fa8c