postgresql-simple-migration 0.1.1.0 → 0.1.2.0
raw patch · 8 files changed
+104/−59 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Database.PostgreSQL.Simple.Internal.Util: existsTable :: Connection -> String -> IO Bool
+ Database.PostgreSQL.Simple.Util: existsTable :: Connection -> String -> IO Bool
Files
- Changelog.markdown +4/−0
- postgresql-simple-migration.cabal +2/−3
- src/Database/PostgreSQL/Simple/Internal/Util.hs +0/−24
- src/Database/PostgreSQL/Simple/Migration.hs +29/−22
- src/Database/PostgreSQL/Simple/Util.hs +24/−0
- src/Main.hs +14/−0
- test/Database/PostgreSQL/Simple/MigrationTest.hs +20/−10
- test/Main.hs +11/−0
Changelog.markdown view
@@ -1,5 +1,9 @@ # Changelog +## 0.1.2.0+* Moved Util module+* Improved documentation+ ## 0.1.1.0 * Support for schema validations. * Improved Haskell API
postgresql-simple-migration.cabal view
@@ -1,5 +1,5 @@ name: postgresql-simple-migration-version: 0.1.1.0+version: 0.1.2.0 synopsis: PostgreSQL Schema Migrations homepage: https://github.com/ameingast/postgresql-simple-migration Bug-reports: https://github.com/ameingast/postgresql-simple-migration/issues@@ -19,7 +19,6 @@ src/*.hs src/Database/PostgreSQL/Simple/*.hs- src/Database/PostgreSQL/Simple/Internal/*.hs test/*.hs test/Database/PostgreSQL/Simple/*.hs@@ -33,7 +32,7 @@ Library exposed-modules: Database.PostgreSQL.Simple.Migration- Database.PostgreSQL.Simple.Internal.Util+ Database.PostgreSQL.Simple.Util hs-source-dirs: src ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns default-extensions: OverloadedStrings
− src/Database/PostgreSQL/Simple/Internal/Util.hs
@@ -1,24 +0,0 @@--- |--- Module : Database.PostgreSQL.Simple.Migration--- Copyright : (c) 2014 Andreas Meingast <ameingast@gmail.com>------ License : BSD-style--- Maintainer : ameingast@gmail.com--- Stability : experimental--- Portability : GHC------ Migration library for postgresql-simple.--module Database.PostgreSQL.Simple.Internal.Util- ( existsTable- ) where--import Control.Monad (liftM)-import Database.PostgreSQL.Simple (Connection, Only (..), query)---- | Checks if the table named 'table' exists in the provided database.-existsTable :: Connection -> String -> IO Bool-existsTable con table =- liftM (not . null) (query con q (Only table) :: IO [[Int]])- where- q = "select count(relname) from pg_class where relname = ?"
src/Database/PostgreSQL/Simple/Migration.hs view
@@ -7,7 +7,9 @@ -- Stability : experimental -- Portability : GHC ----- Migration library for postgresql-simple.+-- A migration library for postgresql-simple.+--+-- For usage, see Readme.markdown. module Database.PostgreSQL.Simple.Migration (@@ -28,27 +30,31 @@ , SchemaMigration(..) ) where -import Control.Applicative ((<$>), (<*>))-import Control.Monad (liftM, void, when)-import qualified Crypto.Hash.MD5 as MD5 (hash)-import qualified Data.ByteString as BS (ByteString,- readFile)-import qualified Data.ByteString.Base64 as B64 (encode)-import Data.List (isPrefixOf, sort)-import Data.Monoid (mconcat)-import Data.Time (LocalTime)-import Database.PostgreSQL.Simple (Connection,- Only (..), execute,- execute_, query,- query_)-import Database.PostgreSQL.Simple.FromRow (FromRow (..), field)-import Database.PostgreSQL.Simple.Internal.Util (existsTable)-import Database.PostgreSQL.Simple.ToField (ToField (..))-import Database.PostgreSQL.Simple.ToRow (ToRow (..))-import Database.PostgreSQL.Simple.Types (Query (..))-import System.Directory (getDirectoryContents)+import Control.Applicative ((<$>), (<*>))+import Control.Monad (liftM, void, when)+import qualified Crypto.Hash.MD5 as MD5 (hash)+import qualified Data.ByteString as BS (ByteString, readFile)+import qualified Data.ByteString.Base64 as B64 (encode)+import Data.List (isPrefixOf, sort)+import Data.Monoid (mconcat)+import Data.Time (LocalTime)+import Database.PostgreSQL.Simple (Connection, Only (..),+ execute, execute_, query,+ query_)+import Database.PostgreSQL.Simple.FromRow (FromRow (..), field)+import Database.PostgreSQL.Simple.ToField (ToField (..))+import Database.PostgreSQL.Simple.ToRow (ToRow (..))+import Database.PostgreSQL.Simple.Types (Query (..))+import Database.PostgreSQL.Simple.Util (existsTable)+import System.Directory (getDirectoryContents) -- | Executes migrations inside the provided 'MigrationContext'.+-- +-- Returns 'MigrationSuccess' if the provided 'MigrationCommand' executes+-- without error. If an error occurs, execution is stopped and+-- a 'MigrationError' is returned.+--+-- It is recommended to wrap 'runMigration' inside a database transaction. runMigration :: MigrationContext -> IO (MigrationResult String) runMigration (MigrationContext cmd verbose con) = case cmd of MigrationInitialization ->@@ -101,7 +107,7 @@ when verbose $ putStrLn $ "Fail:\t" ++ name return (MigrationError name) where- q = "insert into schema_migrations(filename, checksum) values(?, ?) "+ q = "insert into schema_migrations(filename, checksum) values(?, ?)" -- | Initializes the database schema with a helper table containing -- meta-information about executed migrations.@@ -208,6 +214,7 @@ | MigrationScript ScriptName BS.ByteString -- ^ Executes a migration based on the provided bytestring. | MigrationValidation MigrationCommand+ -- ^ Validates the provided MigrationCommand. deriving (Show, Eq, Read, Ord) -- | A sum-type denoting the result of a single migration.@@ -245,7 +252,7 @@ getMigrations = flip query_ q where q = mconcat [ "select filename, checksum, executed_at "- , "from schema_migrations"+ , "from schema_migrations order by executed_at asc" ] -- | A product type representing a single, executed 'SchemaMigration'.
+ src/Database/PostgreSQL/Simple/Util.hs view
@@ -0,0 +1,24 @@+-- |+-- Module : Database.PostgreSQL.Simple.Util+-- Copyright : (c) 2014 Andreas Meingast <ameingast@gmail.com>+--+-- License : BSD-style+-- Maintainer : ameingast@gmail.com+-- Stability : experimental+-- Portability : GHC+--+-- A collection of utilites for database migrations.++module Database.PostgreSQL.Simple.Util+ ( existsTable+ ) where++import Control.Monad (liftM)+import Database.PostgreSQL.Simple (Connection, Only (..), query)++-- | Checks if the table with the given name exists in the database.+existsTable :: Connection -> String -> IO Bool+existsTable con table =+ liftM (not . null) (query con q (Only table) :: IO [[Int]])+ where+ q = "select count(relname) from pg_class where relname = ?"
src/Main.hs view
@@ -1,3 +1,14 @@+-- |+-- Module : Main+-- Copyright : (c) 2014 Andreas Meingast <ameingast@gmail.com>+--+-- License : BSD-style+-- Maintainer : ameingast@gmail.com+-- Stability : experimental+-- Portability : GHC+--+-- A standalone program for the postgresql-simple-migration library.+ module Main ( main ) where@@ -60,6 +71,9 @@ putStrLn " ignored. If a script was changed since the" putStrLn " time of its last execution, an error is" putStrLn " raised."+ putStrLn " validate <con> <directory>"+ putStrLn " Validate all SQL scripts in the provided"+ putStrLn " directory." putStrLn " The <con> parameter is based on libpq connection string" putStrLn " syntax. Detailled information is available here:" putStrLn " <http://www.postgresql.org/docs/9.3/static/libpq-connect.html>"
test/Database/PostgreSQL/Simple/MigrationTest.hs view
@@ -1,16 +1,26 @@-{-# LANGUAGE ScopedTypeVariables #-}+-- |+-- Module : Database.PostgreSQL.Simple.MigrationTest+-- Copyright : (c) 2014 Andreas Meingast <ameingast@gmail.com>+--+-- License : BSD-style+-- Maintainer : ameingast@gmail.com+-- Stability : experimental+-- Portability : GHC+--+-- A collection of postgresql-simple-migration specifications. module Database.PostgreSQL.Simple.MigrationTest where -import Database.PostgreSQL.Simple (Connection)-import Database.PostgreSQL.Simple.Internal.Util (existsTable)-import Database.PostgreSQL.Simple.Migration (MigrationCommand (..), MigrationContext (..),- MigrationResult (..),- SchemaMigration (..),- getMigrations,- runMigration)-import Test.Hspec (Spec, describe, it,- shouldBe)+import Database.PostgreSQL.Simple (Connection)+import Database.PostgreSQL.Simple.Migration (MigrationCommand (..),+ MigrationContext (..),+ MigrationResult (..),+ SchemaMigration (..),+ getMigrations,+ runMigration)+import Database.PostgreSQL.Simple.Util (existsTable)+import Test.Hspec (Spec, describe, it,+ shouldBe) migrationSpec:: Connection -> Spec migrationSpec con = describe "Migrations" $ do
test/Main.hs view
@@ -1,3 +1,14 @@+-- |+-- Module : Main+-- Copyright : (c) 2014 Andreas Meingast <ameingast@gmail.com>+--+-- License : BSD-style+-- Maintainer : ameingast@gmail.com+-- Stability : experimental+-- Portability : GHC+--+-- The test entry-point for postgresql-simple-migration.+ module Main ( main ) where