packages feed

sqlite-simple 0.4.15.0 → 0.4.16.0

raw patch · 7 files changed

+124/−4 lines, 7 filesdep +template-haskell

Dependencies added: template-haskell

Files

Database/SQLite/Simple/FromField.hs view
@@ -195,6 +195,9 @@    fromField f = returnError ConversionFailed f "expecting SQLText column type" +instance FromField SQLData where+  fromField f = Ok (fieldData f)+ fieldTypename :: Field -> String fieldTypename = B.unpack . gettypename . result 
+ Database/SQLite/Simple/QQ.hs view
@@ -0,0 +1,51 @@+{-# LANGUAGE TemplateHaskell #-}++------------------------------------------------------------------------------+-- |+-- Module:      Database.SQLite.Simple.QQ+-- Copyright:   (c) 2011-2012 Leon P Smith+--              (c) 2018 Janne Hellsten+-- License:     BSD3+-- Maintainer:  Janne Hellsten <jjhellst@gmail.com>+-- Portability: portable+--+-- The 'sql' quasiquoter, for writing large @SQL@ statements.+--+------------------------------------------------------------------------------++module Database.SQLite.Simple.QQ+     ( sql+     ) where++import           Data.String                  (fromString)+import           Database.SQLite.Simple.Types (Query)+import           Language.Haskell.TH          (Exp, Q, appE, stringE)+import           Language.Haskell.TH.Quote    (QuasiQuoter (..))++{- | A quasiquoter for writing big @SQL@ queries.++One should consider turning on the @-XQuasiQuotes@ pragma in that module:++@+{-# LANGUAGE QuasiQuoter #-}++myQuery = query conn [sql|+    SELECT+      *+    FROM+      users+    WHERE jobTitle = ?+    |] jobTitle+@++-}+sql :: QuasiQuoter+sql = QuasiQuoter+    { quotePat  = error "Database.SQLite.Simple.QQ.sql: quasiquoter used in pattern context"+    , quoteType = error "Database.SQLite.Simple.QQ.sql: quasiquoter used in type context"+    , quoteDec  = error "Database.SQLite.Simple.QQ.sql: quasiquoter used in declaration context"+    , quoteExp  = sqlExp+    }++sqlExp :: String -> Q Exp+sqlExp = appE [| fromString :: String -> Query |] . stringE
changelog view
@@ -1,3 +1,7 @@+0.4.16.0+	* Add FromField instance for SQLData (thanks @LindaOrtega, @Shimuuar)+	* Add QuasiQuoter sql (thanks @vrom911)+	 0.4.15.0 	* Support GHC 8.4.1 (Add instance Semigroup Query) (thanks @gwils!) 
sqlite-simple.cabal view
@@ -1,5 +1,5 @@ Name:                sqlite-simple-Version:             0.4.15.0+Version:             0.4.16.0 Synopsis:            Mid-Level SQLite client library Description:     Mid-level SQLite client library, based on postgresql-simple.@@ -35,6 +35,7 @@      Database.SQLite.Simple.FromField      Database.SQLite.Simple.FromRow      Database.SQLite.Simple.Internal+     Database.SQLite.Simple.QQ      Database.SQLite.Simple.ToField      Database.SQLite.Simple.ToRow      Database.SQLite.Simple.Types@@ -50,6 +51,7 @@     containers,     direct-sqlite >= 2.3.13 && < 2.4,     semigroups == 0.18.*,+    template-haskell,     text >= 0.11,     time,     transformers,@@ -81,6 +83,7 @@                 , Errors                 , Fold                 , ParamConv+                , QQ                 , Simple                 , Statement                 , TestImports@@ -103,4 +106,3 @@                , direct-sqlite                , text                , time-
test/Main.hs view
@@ -1,4 +1,3 @@- import Common import Control.Exception (bracket) import Control.Monad     (when)@@ -10,6 +9,7 @@ import Errors import Fold import ParamConv+import QQ import Simple import Statement import TestImports()@@ -54,6 +54,7 @@     , TestLabel "Utf8"      . testUtf8Simplest     , TestLabel "Utf8"      . testBlobs     , TestLabel "Instances" . testUserFromField+    , TestLabel "Instances" . testSQLDataFromField     , TestLabel "Fold"      . testFolds     , TestLabel "Statement" . testBind     , TestLabel "Statement" . testDoubleBind@@ -62,6 +63,8 @@     , TestLabel "Debug"     . testDebugTracing     , TestLabel "Direct"    . testDirectSqlite     , TestLabel "Imports"   . testImports+    , TestLabel "QQ"        . testSimpleQQ+    , TestLabel "QQ"        . testMultiLinedQQ     ]  -- | Action for connecting to the database that will be used for testing.
+ test/QQ.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE QuasiQuotes #-}++module QQ (+     testSimpleQQ+   , testMultiLinedQQ+   ) where++import Common+import Database.SQLite.Simple.QQ (sql)++testSimpleQQ :: TestEnv -> Test+testSimpleQQ TestEnv{..} = TestCase $ do+  q <- query_ conn "SELECT 1+1" :: IO [Only Int]+  qq <- query_ conn [sql|+                        SELECT 1 + 1+                        |] :: IO [Only Int]+  assertEqual "result" q qq+++testMultiLinedQQ :: TestEnv -> Test+testMultiLinedQQ TestEnv{..} = TestCase $ do+  execute_ conn "CREATE TABLE testQQ (id INTEGER PRIMARY KEY, t TEXT)"+  execute_ conn "INSERT INTO testQQ (t) VALUES ('test string')"+  q <- query_ conn "SELECT t FROM testQQ" :: IO [Only String]+  qq <- query_ conn [sql|+    SELECT+      t+    FROM+      testQQ++    |] :: IO [Only String]+  assertEqual "result" q qq
test/UserInstances.hs view
@@ -1,8 +1,12 @@ {-# LANGUAGE DeriveDataTypeable #-} -module UserInstances (testUserFromField) where+module UserInstances (+   testUserFromField+  ,testSQLDataFromField+  ) where  import           Common+import           Data.Int (Int64) import           Data.Typeable (Typeable) import qualified Data.Text as T import           Database.SQLite.Simple.FromField@@ -31,3 +35,24 @@   execute conn "INSERT INTO fromfield (t) VALUES (?)" (Only (MyType "test2"))   [Only r] <- query_ conn "SELECT t FROM fromfield" :: IO [(Only String)]   "toField test2" @=? r++testSQLDataFromField :: TestEnv -> Test+testSQLDataFromField TestEnv{..} = TestCase $ do+  execute_ conn "CREATE TABLE sqldatafromfield (t TEXT, i INT, b BOOLEAN, f FLOAT)"+  execute conn "INSERT INTO sqldatafromfield (t,i,b,f) VALUES (?,?,?,?)" (("test string" :: T.Text,+                                                                    1 :: Int64,+                                                                    True :: Bool,+                                                                    1.11 :: Double))+  execute conn "INSERT INTO sqldatafromfield (t,i,b) VALUES (?,?,?)" (("test string2" :: T.Text,+                                                                    2 :: Int64,+                                                                    False :: Bool))+  r <- query_ conn "SELECT * FROM sqldatafromfield" :: IO [[SQLData]]+  let testData = [[SQLText "test string",+                   SQLInteger 1,+                   SQLInteger 1,+                   SQLFloat 1.11],+                  [SQLText "test string2",+                   SQLInteger 2,+                   SQLInteger 0,+                   SQLNull]]+  testData @=? r