packages feed

beam-automigrate 0.1.3.0 → 0.1.4.0

raw patch · 8 files changed

+38/−9 lines, 8 filesdep ~beam-coredep ~postgresql-syntax

Dependency ranges changed: beam-core, postgresql-syntax

Files

CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for beam-automigrate +## 0.1.4.0++* [#52](https://github.com/obsidiansystems/beam-automigrate/pull/52) Support sql arrays+* Loosen some version bounds+ ## 0.1.3.0  * [#47](https://github.com/obsidiansystems/beam-automigrate/pull/47): Generate postgres enum types in schema when using `Nullable PgEnum` values.
README.lhs view
@@ -1,6 +1,6 @@ beam-automigrate ================-[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/beam-automigrate.svg)](https://hackage.haskell.org/package/beam-automigrate) [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/beam-automigrate/badge)](https://matrix.hackage.haskell.org/#/package/beam-automigrate)   [![Github CI](https://github.com/obsidiansystems/beam-automigrate/workflows/github-action/badge.svg)](https://github.com/obsidiansystems/beam-automigrate/actions) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/obsidiansystems/beam-automigrate/blob/master/LICENSE)+[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/beam-automigrate.svg)](https://hackage.haskell.org/package/beam-automigrate) [![Github CI](https://github.com/obsidiansystems/beam-automigrate/workflows/github-action/badge.svg)](https://github.com/obsidiansystems/beam-automigrate/actions) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/obsidiansystems/beam-automigrate/blob/master/LICENSE)  Automatic migrations for [beam](https://hackage.haskell.org/package/beam-core) databases! 
README.md view
@@ -1,6 +1,6 @@ beam-automigrate ================-[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/beam-automigrate.svg)](https://hackage.haskell.org/package/beam-automigrate) [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/beam-automigrate/badge)](https://matrix.hackage.haskell.org/#/package/beam-automigrate)   [![Github CI](https://github.com/obsidiansystems/beam-automigrate/workflows/github-action/badge.svg)](https://github.com/obsidiansystems/beam-automigrate/actions) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/obsidiansystems/beam-automigrate/blob/master/LICENSE)+[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/beam-automigrate.svg)](https://hackage.haskell.org/package/beam-automigrate) [![Github CI](https://github.com/obsidiansystems/beam-automigrate/workflows/github-action/badge.svg)](https://github.com/obsidiansystems/beam-automigrate/actions) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/obsidiansystems/beam-automigrate/blob/master/LICENSE)  Automatic migrations for [beam](https://hackage.haskell.org/package/beam-core) databases! 
beam-automigrate.cabal view
@@ -1,5 +1,5 @@ name:               beam-automigrate-version:            0.1.3.0+version:            0.1.4.0 license-file:       LICENSE build-type:         Simple cabal-version:      2.0@@ -42,7 +42,7 @@   build-depends:       aeson                 >=1.4.4    && <2.2     , base                  >=4.9      && <5-    , beam-core             >=0.9      && <0.10+    , beam-core             >=0.9      && <0.11     , beam-postgres         >=0.5      && <0.6     , bytestring            >=0.10.8.2 && <0.12.0.0     , containers            >=0.5.9.2  && <0.8.0.0@@ -125,7 +125,7 @@     , beam-postgres     , containers     , postgresql-simple-    , postgresql-syntax >= 0.4 && <0.5+    , postgresql-syntax >= 0.3 && <0.5     , pretty-simple     , QuickCheck     , tasty
src/Database/Beam/AutoMigrate.hs view
@@ -569,6 +569,10 @@   PgSpecificType (PgEnumeration (EnumerationName ty)) -> ty   -- oid   PgSpecificType PgOid -> "oid"+  -- Arrays+  SqlArrayType (SqlArrayType _ _) _ -> error "beam-automigrate: invalid nested array."+  SqlArrayType _ 0 -> error "beam-automigrate: array with zero dimensions"+  SqlArrayType t d -> renderDataType t <> mconcat (replicate (fromIntegral d) "[]")  evalMigration :: Monad m => Migration m -> m (Either MigrationError [WithPriority Edit]) evalMigration m = do
src/Database/Beam/AutoMigrate/Compat.hs view
@@ -20,6 +20,7 @@ import Data.Time.Calendar (Day) import Data.Typeable import Data.UUID+import Data.Vector (Vector) import Data.Word import qualified Database.Beam as Beam import Database.Beam.AutoMigrate.Types@@ -244,6 +245,15 @@  instance HasColumnType (Pg.PgRange Pg.PgDateRange a) where   defaultColumnType _ = PgSpecificType PgRangeDate++--+-- support for arrays+--++instance HasColumnType a => HasColumnType (Vector a) where+  defaultColumnType _ = case defaultColumnType (Proxy @a) of+    SqlArrayType t d -> SqlArrayType t (d + 1)+    t -> SqlArrayType t 1  -- -- Support for 'SqlSerial'. \"SERIAL\" is treated by Postgres as syntactic sugar for:
src/Database/Beam/AutoMigrate/Postgres.hs view
@@ -123,7 +123,7 @@ tableColumnsQ =   fromString $     unlines-      [ "SELECT attname, atttypid, atttypmod, attnotnull, pg_catalog.format_type(atttypid, atttypmod) ",+      [ "SELECT attname, atttypid, atttypmod, attndims, attnotnull, pg_catalog.format_type(atttypid, atttypmod) ",         "FROM pg_catalog.pg_attribute att ",         "WHERE att.attrelid=? AND att.attnum>0 AND att.attisdropped='f' "       ]@@ -249,9 +249,9 @@       Map Pg.Oid (EnumerationName, Enumeration) ->       AllDefaults ->       Columns ->-      (ByteString, Pg.Oid, Int, Bool, ByteString) ->+      (ByteString, Pg.Oid, Int, Int, Bool, ByteString) ->       IO Columns-    getColumns tName enumData defaultData c (attname, atttypid, atttypmod, attnotnull, format_type) = do+    getColumns tName enumData defaultData c (attname, atttypid, atttypmod, attndims, attnotnull, format_type) = do       -- /NOTA BENE(adn)/: The atttypmod - 4 was originally taken from 'beam-migrate'       -- (see: https://github.com/tathougies/beam/blob/d87120b58373df53f075d92ce12037a98ca709ab/beam-postgres/Database/Beam/Postgres/Migrate.hs#L343)       -- but there are cases where this is not correct, for example in the case of bitstrings.@@ -272,7 +272,8 @@       case asum         [ pgSerialTyColumnType atttypid mbDefault,           pgTypeToColumnType atttypid mbPrecision,-          pgEnumTypeToColumnType enumData atttypid+          pgEnumTypeToColumnType enumData atttypid,+          pgArrayTypeToColumnType atttypid mbPrecision attndims         ] of         Just cType -> do           let nullConstraint = if attnotnull then S.fromList [NotNull] else mempty@@ -377,6 +378,13 @@     Just (PgSpecificType PgOid)   | otherwise =     Nothing++pgArrayTypeToColumnType :: Pg.Oid -> Maybe Int -> Int -> Maybe ColumnType+pgArrayTypeToColumnType oid width dims = case Pg.staticTypeInfo oid of+  Just (Pg.Array _ _ _ _ subTypeInfo) -> case pgTypeToColumnType (Pg.typoid subTypeInfo) width of+    Just columnType -> Just $ SqlArrayType columnType (fromIntegral dims)+    _ -> Nothing+  _ -> Nothing  -- -- Constraints discovery
src/Database/Beam/AutoMigrate/Types.hs view
@@ -141,6 +141,8 @@     PgSpecificType PgDataType   | -- | An enumeration implemented with text-based encoding.     DbEnumeration EnumerationName Enumeration+  | -- | Array type.+    SqlArrayType ColumnType Word   deriving (Show, Eq, Generic)  data PgDataType