beam-sqlite 0.5.3.0 → 0.5.4.0
raw patch · 5 files changed
+47/−53 lines, 5 filesdep −Win32dep −unixnew-uploaderPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: Win32, unix
API changes (from Hackage documentation)
- Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.ByteString
- Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.ByteString.Internal.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Backend.SQL.Row.FromBackendRow Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.Type.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Migrate.Generics.Tables.HasDefaultSqlDataType Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.Type.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.Type.ByteString
+ Database.Beam.Sqlite.Connection: instance Database.Beam.Query.Ord.HasSqlQuantifiedEqualityCheck Database.Beam.Sqlite.Connection.Sqlite Data.ByteString.Internal.Type.ByteString
+ Database.Beam.Sqlite.Syntax: instance Database.Beam.Backend.SQL.SQL92.HasSqlValueSyntax Database.Beam.Sqlite.Syntax.SqliteValueSyntax Data.ByteString.Internal.Type.ByteString
Files
- ChangeLog.md +16/−3
- Database/Beam/Sqlite/Connection.hs +19/−27
- Database/Beam/Sqlite/Migrate.hs +2/−4
- Database/Beam/Sqlite/Syntax.hs +5/−7
- beam-sqlite.cabal +5/−12
ChangeLog.md view
@@ -1,17 +1,30 @@+# 0.5.4.0++## Added features++ * Removed the reliance on either the `unix` or `windows` package, which should enable (#738)+ `beam-sqlite` to be buildable on a wider variety of platforms.++# 0.5.3.1++## Added features++ * Replaced use of deprecated functions.+ # 0.5.3.0 -# Added features+## Added features * Loosen some version bounds * `HasSqlEqualityCheck` instance for `Day` # 0.5.2.0 -# Bug fixes+## Bug fixes * Fix encoding for `UTCTime` -# Addded features+## Addded features * `IN (SELECT ...)` syntax via `inQuery_`
Database/Beam/Sqlite/Connection.hs view
@@ -1,6 +1,5 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE BangPatterns #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE UndecidableInstances #-}@@ -72,6 +71,7 @@ import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.DList as D+import Data.Hashable (hash) import Data.Int import Data.Maybe (mapMaybe) import Data.Proxy (Proxy(..))@@ -82,21 +82,13 @@ import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Encoding as TL (decodeUtf8) import Data.Time ( LocalTime, UTCTime, Day- , ZonedTime, utc, utcToLocalTime )+ , ZonedTime, utc, utcToLocalTime, getCurrentTime ) import Data.Typeable (cast) import Data.Word import GHC.TypeLits import Network.URI -#ifdef UNIX-import System.Posix.Process (getProcessID)-#elif defined(WINDOWS)-import System.Win32.Process (getCurrentProcessId)-#else-#error Need either POSIX or Win32 API for MonadBeamInsertReturning-#endif- import Text.Read (readMaybe) -- | The SQLite backend. Used to parameterize 'MonadBeam' and 'FromBackendRow'@@ -388,34 +380,34 @@ runInsertReturningList (SqlInsert tblSettings insertStmt_@(SqliteInsertSyntax nm _ _ _)) = do (logger, conn) <- SqliteM ask SqliteM . liftIO $ do--#ifdef UNIX- processId <- fromString . show <$> getProcessID-#elif defined(WINDOWS)- processId <- fromString . show <$> getCurrentProcessId-#else-#error Need either POSIX or Win32 API for MonadBeamInsertReturning-#endif+ + -- We create a pseudo-random savepoint identification that can be referenced+ -- throughout this operation. -- This used to be based on the process ID + -- (e.g. `System.Posix.Process.getProcessID` for UNIX),+ -- but using timestamps is more portable; see #738+ --+ -- Note that `hash` can return negative numbers, hence the use of `abs`.+ savepointId <- fromString . show . abs . hash <$> getCurrentTime let tableNameTxt = T.decodeUtf8 (BL.toStrict (sqliteRenderSyntaxScript (fromSqliteTableName nm))) startSavepoint =- execute_ conn (Query ("SAVEPOINT insert_savepoint_" <> processId))+ execute_ conn (Query ("SAVEPOINT insert_savepoint_" <> savepointId)) rollbackToSavepoint =- execute_ conn (Query ("ROLLBACK TRANSACTION TO SAVEPOINT insert_savepoint_" <> processId))+ execute_ conn (Query ("ROLLBACK TRANSACTION TO SAVEPOINT insert_savepoint_" <> savepointId)) releaseSavepoint =- execute_ conn (Query ("RELEASE SAVEPOINT insert_savepoint_" <> processId))+ execute_ conn (Query ("RELEASE SAVEPOINT insert_savepoint_" <> savepointId)) createInsertedValuesTable =- execute_ conn (Query ("CREATE TEMPORARY TABLE inserted_values_" <> processId <> " AS SELECT * FROM " <> tableNameTxt <> " LIMIT 0"))+ execute_ conn (Query ("CREATE TEMPORARY TABLE inserted_values_" <> savepointId <> " AS SELECT * FROM " <> tableNameTxt <> " LIMIT 0")) dropInsertedValuesTable =- execute_ conn (Query ("DROP TABLE inserted_values_" <> processId))+ execute_ conn (Query ("DROP TABLE inserted_values_" <> savepointId)) createInsertTrigger =- execute_ conn (Query ("CREATE TEMPORARY TRIGGER insert_trigger_" <> processId <> " AFTER INSERT ON " <> tableNameTxt <> " BEGIN " <>- "INSERT INTO inserted_values_" <> processId <> " SELECT * FROM " <> tableNameTxt <> " WHERE ROWID=last_insert_rowid(); END" ))+ execute_ conn (Query ("CREATE TEMPORARY TRIGGER insert_trigger_" <> savepointId <> " AFTER INSERT ON " <> tableNameTxt <> " BEGIN " <>+ "INSERT INTO inserted_values_" <> savepointId <> " SELECT * FROM " <> tableNameTxt <> " WHERE ROWID=last_insert_rowid(); END" )) dropInsertTrigger =- execute_ conn (Query ("DROP TRIGGER insert_trigger_" <> processId))+ execute_ conn (Query ("DROP TRIGGER insert_trigger_" <> savepointId)) mask $ \restore -> do@@ -430,7 +422,7 @@ allBeamValues (\(Columnar' projField) -> quotedIdentifier (_fieldName projField)) $ tblSettings - fmap (\(BeamSqliteRow r) -> r) <$> query_ conn (Query ("SELECT " <> columns <> " FROM inserted_values_" <> processId))+ fmap (\(BeamSqliteRow r) -> r) <$> query_ conn (Query ("SELECT " <> columns <> " FROM inserted_values_" <> savepointId)) releaseSavepoint return x
Database/Beam/Sqlite/Migrate.hs view
@@ -3,8 +3,7 @@ -- | Migrations support for SQLite databases module Database.Beam.Sqlite.Migrate- ( -- * @beam-migrate@ CLI support- migrationBackend, SqliteCommandSyntax+ ( migrationBackend, SqliteCommandSyntax -- * @beam-migrate@ utility functions , migrateScript, writeMigrationScript@@ -48,8 +47,7 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as TE --- | Top-level 'Tool.BeamMigrationBackend' loaded dynamically by the--- @beam-migrate@ CLI tool.+-- | Top-level 'Tool.BeamMigrationBackend' migrationBackend :: Tool.BeamMigrationBackend Sqlite SqliteM migrationBackend = Tool.BeamMigrationBackend "sqlite"
Database/Beam/Sqlite/Syntax.hs view
@@ -68,6 +68,7 @@ import qualified Data.Text.Encoding as TE import qualified Data.Text.Lazy as TL import Data.Time+import qualified Data.Time.Format.ISO8601 as Time import Data.Word #if !MIN_VERSION_base(4, 11, 0) import Data.Semigroup@@ -105,12 +106,11 @@ displaySyntax = BL.unpack . sqliteRenderSyntaxScript instance Semigroup SqliteSyntax where- (<>) = mappend+ (<>) (SqliteSyntax ab av) (SqliteSyntax bb bv) =+ SqliteSyntax (\v -> ab v <> bb v) (av <> bv) instance Monoid SqliteSyntax where mempty = SqliteSyntax (\_ -> mempty) mempty- mappend (SqliteSyntax ab av) (SqliteSyntax bb bv) =- SqliteSyntax (\v -> ab v <> bb v) (av <> bv) instance Eq SqliteSyntax where SqliteSyntax ab av == SqliteSyntax bb bv =@@ -967,12 +967,10 @@ sqlValueSyntax tm = SqliteValueSyntax (emitValue (toField tm)) instance HasSqlValueSyntax SqliteValueSyntax LocalTime where- sqlValueSyntax tm = SqliteValueSyntax (emitValue (SQLText (fromString tmStr)))- where tmStr = formatTime defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S%Q")) tm+ sqlValueSyntax tm = SqliteValueSyntax (emitValue (SQLText (fromString (Time.formatShow Time.iso8601Format tm)))) instance HasSqlValueSyntax SqliteValueSyntax Day where- sqlValueSyntax tm = SqliteValueSyntax (emitValue (SQLText (fromString tmStr)))- where tmStr = formatTime defaultTimeLocale (iso8601DateFormat Nothing) tm+ sqlValueSyntax tm = SqliteValueSyntax (emitValue (SQLText (fromString (Time.formatShow Time.iso8601Format tm)))) instance HasDataTypeCreatedCheck SqliteDataTypeSyntax where dataTypeHasBeenCreated _ _ = True
beam-sqlite.cabal view
@@ -1,5 +1,5 @@ name: beam-sqlite-version: 0.5.3.0+version: 0.5.4.0 synopsis: Beam driver for SQLite description: Beam driver for the <https://sqlite.org/ SQLite> embedded database. See <https://haskell-beam.github.io/beam/user-guide/backends/beam-sqlite/ here>@@ -29,9 +29,9 @@ beam-migrate >=0.5 && <0.6, sqlite-simple >=0.4 && <0.5,- text >=1.0 && <2.1,- bytestring >=0.10 && <0.12,- hashable >=1.2 && <1.5,+ text >=1.0 && <2.2,+ bytestring >=0.10 && <0.13,+ hashable >=1.2 && <1.6, time >=1.6 && <1.13, dlist >=0.8 && <1.1, mtl >=2.1 && <2.4,@@ -39,7 +39,7 @@ scientific >=0.3 && <0.4, monad-control >=1.0 && <1.1, network-uri >=2.6 && <2.7,- aeson >=0.11 && <2.2,+ aeson >=0.11 && <2.3, attoparsec >=0.13 && <0.15, transformers-base >=0.4 && <0.5 default-language: Haskell2010@@ -49,13 +49,6 @@ ghc-options: -Wall if flag(werror) ghc-options: -Werror-- if os(windows)- cpp-options: -DWINDOWS- build-depends: Win32 >=2.4 && <2.8- if os(freebsd) || os(netbsd) || os(openbsd) || os(darwin) || os(linux) || os(solaris) || os(android)- cpp-options: -DUNIX- build-depends: unix >=2.0 && <2.9 test-suite beam-sqlite-tests type: exitcode-stdio-1.0