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 +5/−0
- README.lhs +1/−1
- README.md +1/−1
- beam-automigrate.cabal +3/−3
- src/Database/Beam/AutoMigrate.hs +4/−0
- src/Database/Beam/AutoMigrate/Compat.hs +10/−0
- src/Database/Beam/AutoMigrate/Postgres.hs +12/−4
- src/Database/Beam/AutoMigrate/Types.hs +2/−0
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 ================-[](https://haskell.org) [](https://hackage.haskell.org/package/beam-automigrate) [](https://matrix.hackage.haskell.org/#/package/beam-automigrate) [](https://github.com/obsidiansystems/beam-automigrate/actions) [](https://github.com/obsidiansystems/beam-automigrate/blob/master/LICENSE)+[](https://haskell.org) [](https://hackage.haskell.org/package/beam-automigrate) [](https://github.com/obsidiansystems/beam-automigrate/actions) [](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 ================-[](https://haskell.org) [](https://hackage.haskell.org/package/beam-automigrate) [](https://matrix.hackage.haskell.org/#/package/beam-automigrate) [](https://github.com/obsidiansystems/beam-automigrate/actions) [](https://github.com/obsidiansystems/beam-automigrate/blob/master/LICENSE)+[](https://haskell.org) [](https://hackage.haskell.org/package/beam-automigrate) [](https://github.com/obsidiansystems/beam-automigrate/actions) [](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