simplest-sqlite 0.0.0.8 → 0.0.0.9
raw patch · 3 files changed
+38/−6 lines, 3 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Database.SmplstSQLite3: Blob :: Type
+ Database.SmplstSQLite3: Float :: Type
+ Database.SmplstSQLite3: Integer :: Type
+ Database.SmplstSQLite3: Null :: Type
+ Database.SmplstSQLite3: Text :: Type
+ Database.SmplstSQLite3: bindNList :: SQLiteDataList a => Stmt -> Int -> [a] -> IO ()
+ Database.SmplstSQLite3: columnList :: SQLiteDataList a => Stmt -> Int -> IO [a]
+ Database.SmplstSQLite3: columnType :: Stmt -> Int -> IO Type
+ Database.SmplstSQLite3: data Type
+ Database.SmplstSQLite3: instance Database.SmplstSQLite3.SQLiteData ()
+ Database.SmplstSQLite3: instance GHC.Show.Show Database.SmplstSQLite3.Type
Files
- simplest-sqlite.cabal +2/−2
- src/Database/SmplstSQLite3.hs +27/−2
- src/Database/SmplstSQLite3/Constants.hsc +9/−2
simplest-sqlite.cabal view
@@ -2,7 +2,7 @@ cabal-version: >= 1.8 name: simplest-sqlite-version: 0.0.0.8+version: 0.0.0.9 stability: Experimental author: YoshikuniJujo <PAF01143@nifty.ne.jp> maintainer: YoshikuniJujo <PAF01143@nifty.ne.jp>@@ -23,7 +23,7 @@ source-repository this type: git location: git://github.com/YoshikuniJujo/test_haskell- tag: simplest-sqlite-0.0.0.8+ tag: simplest-sqlite-0.0.0.9 library hs-source-dirs: src
src/Database/SmplstSQLite3.hs view
@@ -3,9 +3,9 @@ module Database.SmplstSQLite3 ( -- * Functions withSQLite, withPrepared,- step, reset, bind, bindN, column, SQLiteData, SQLiteDataList,+ step, reset, bind, SQLiteData(..), SQLiteDataList(..), columnType, -- * Types- SQLite, Stmt, Result(..),+ SQLite, Stmt, Result(..), Type(..), ) where import Control.Applicative@@ -118,6 +118,10 @@ bindN = bindNList column = columnList +instance SQLiteData () where+ bindN = sqlite3BindNull+ column _ _ = return ()+ instance SQLiteData Int where bindN = sqlite3BindInt column (Stmt sm) i =@@ -138,6 +142,8 @@ column (Stmt sm) i = T.decodeUtf8 <$> (BS.packCString =<< c_sqlite3_column_text sm (fromIntegral i)) +foreign import ccall unsafe "sqlite3.h sqlite3_bind_null" c_sqlite3_bind_null ::+ Ptr Stmt -> CInt -> IO CInt foreign import ccall unsafe "sqlite3.h sqlite3_bind_int" c_sqlite3_bind_int :: Ptr Stmt -> CInt -> CInt -> IO CInt foreign import ccall unsafe "sqlite3.h sqlite3_bind_text" c_sqlite3_bind_text ::@@ -148,6 +154,12 @@ bind :: SQLiteData a => Stmt -> String -> a -> IO () bind sm ph x = flip (bindN sm) x =<< sqlite3BindParameterIndex sm ph +sqlite3BindNull :: Stmt -> Int -> () -> IO ()+sqlite3BindNull (Stmt sm) i _ = do+ ret <- c_sqlite3_bind_null sm (fromIntegral i)+ when (ret /= sQLITE_OK) . ioError . userError $+ "Cannot bind null: error code (" ++ show ret ++ ")"+ sqlite3BindInt :: Stmt -> Int -> Int -> IO () sqlite3BindInt (Stmt sm) i n = do ret <- c_sqlite3_bind_int sm (fromIntegral i) (fromIntegral n)@@ -191,3 +203,16 @@ ret <- c_sqlite3_reset sm when (ret /= sQLITE_OK) . ioError . userError $ "Cannot reset stmt: error code (" ++ show ret ++ ")"++data Type = Integer | Float | Text | Blob | Null deriving Show++foreign import ccall unsafe "sqlite3.h sqlite3_column_type"+ c_sqlite3_column_type :: Ptr Stmt -> CInt -> IO CInt++columnType :: Stmt -> Int -> IO Type+columnType (Stmt ps) i = (<$> c_sqlite3_column_type ps (fromIntegral i)) $ \t ->+ case () of _ | t == sQLITE_INTEGER -> Integer+ | t == sQLITE_FLOAT -> Float+ | t == sQLITE_TEXT -> Text+ | t == sQLITE_BLOB -> Blob+ | otherwise -> Null
src/Database/SmplstSQLite3/Constants.hsc view
@@ -1,8 +1,8 @@ #include <sqlite3.h> module Database.SmplstSQLite3.Constants (- sQLITE_OK, sQLITE_ERROR, sQLITE_BUSY,- sQLITE_ROW, sQLITE_DONE+ sQLITE_OK, sQLITE_ERROR, sQLITE_BUSY, sQLITE_ROW, sQLITE_DONE,+ sQLITE_INTEGER, sQLITE_FLOAT, sQLITE_TEXT, sQLITE_BLOB, sQLITE_NULL ) where import Foreign.C.Types@@ -13,3 +13,10 @@ sQLITE_BUSY = #const SQLITE_BUSY sQLITE_ROW = #const SQLITE_ROW sQLITE_DONE = #const SQLITE_DONE++sQLITE_INTEGER, sQLITE_FLOAT, sQLITE_TEXT, sQLITE_BLOB, sQLITE_NULL :: CInt+sQLITE_INTEGER = #const SQLITE_INTEGER+sQLITE_FLOAT = #const SQLITE_FLOAT+sQLITE_TEXT = #const SQLITE_TEXT+sQLITE_BLOB = #const SQLITE_BLOB+sQLITE_NULL = #const SQLITE_NULL