Migration: Specify default value when adding non-null column
This commit is contained in:
parent
7218262223
commit
bff41673c4
3 changed files with 30 additions and 6 deletions
|
@ -79,7 +79,8 @@ class PersistSchema backend where
|
|||
removeEntity
|
||||
:: MonadIO m => EntityName -> SchemaT backend m ()
|
||||
addField
|
||||
:: MonadIO m => EntityName -> Field -> SchemaT backend m ()
|
||||
:: MonadIO m
|
||||
=> EntityName -> Field -> Maybe Text -> SchemaT backend m ()
|
||||
renameField
|
||||
:: MonadIO m
|
||||
=> EntityName -> FieldName -> FieldName -> SchemaT backend m ()
|
||||
|
|
|
@ -20,6 +20,7 @@ where
|
|||
|
||||
import Prelude
|
||||
|
||||
import Data.Monoid ((<>))
|
||||
import Data.Text (Text)
|
||||
import Database.Persist.Sql (SqlBackend)
|
||||
import Database.Persist.Types (SqlType (..))
|
||||
|
@ -92,9 +93,12 @@ schemaBackend = SqlSchemaBackend
|
|||
, ssbDropTable = \ table -> mconcat
|
||||
[ "DROP TABLE ", table2sql table
|
||||
]
|
||||
, ssbAddColumn = \ table column -> mconcat
|
||||
, ssbAddColumn = \ table column mdef -> mconcat
|
||||
[ "ALTER TABLE ", table2sql table
|
||||
, " ADD COLUMN ", columnSql column
|
||||
, case mdef of
|
||||
Nothing -> T.empty
|
||||
Just t -> " DEFAULT " <> t
|
||||
]
|
||||
, ssbRenameColumn = \ table old new -> mconcat
|
||||
[ "ALTER TABLE ", table2sql table
|
||||
|
@ -118,6 +122,16 @@ schemaBackend = SqlSchemaBackend
|
|||
, " SET ", column2sql column, " = ", val
|
||||
, " WHERE ", column2sql column, " IS NULL"
|
||||
]
|
||||
, ssbDefColumn = \ table column val -> mconcat
|
||||
[ "ALTER TABLE ", table2sql table
|
||||
, " ALTER COLUMN ", column2sql column
|
||||
, " SET DEFAULT ", val
|
||||
]
|
||||
, ssbUndefColumn = \ table column -> mconcat
|
||||
[ "ALTER TABLE ", table2sql table
|
||||
, " ALTER COLUMN ", column2sql column
|
||||
, " DROP DEFAULT"
|
||||
]
|
||||
, ssbDropColumn = \ table column -> mconcat
|
||||
[ "ALTER TABLE ", table2sql table
|
||||
, " DROP COLUMN ", column2sql column
|
||||
|
|
|
@ -26,11 +26,13 @@ where
|
|||
|
||||
import Prelude
|
||||
|
||||
import Control.Monad (when)
|
||||
import Control.Monad.IO.Class (MonadIO)
|
||||
import Control.Monad.Trans.Class (lift)
|
||||
import Control.Monad.Trans.Reader (ask)
|
||||
import Data.Char (isUpper, toLower)
|
||||
import Data.Foldable (traverse_)
|
||||
import Data.Maybe (isJust)
|
||||
import Data.Text (Text)
|
||||
import Database.Persist.Sql (Sql, SqlBackend, rawExecute)
|
||||
import Database.Persist.Types (SqlType)
|
||||
|
@ -101,11 +103,13 @@ instance PersistSchema SqlBackend where
|
|||
, ssbCreateTable :: TableName -> [Column] -> Sql
|
||||
, ssbRenameTable :: TableName -> TableName -> Sql
|
||||
, ssbDropTable :: TableName -> Sql
|
||||
, ssbAddColumn :: TableName -> Column -> Sql
|
||||
, ssbAddColumn :: TableName -> Column -> Maybe Text -> Sql
|
||||
, ssbRenameColumn :: TableName -> ColumnName -> ColumnName -> Sql
|
||||
, ssbRetypeColumn :: TableName -> ColumnName -> SqlType -> Sql
|
||||
, ssbRenullColumn :: TableName -> ColumnName -> MaybeNull -> Sql
|
||||
, ssbUnnullColumn :: TableName -> ColumnName -> Text -> Sql
|
||||
, ssbDefColumn :: TableName -> ColumnName -> Text -> Sql
|
||||
, ssbUndefColumn :: TableName -> ColumnName -> Sql
|
||||
, ssbDropColumn :: TableName -> ColumnName -> Sql
|
||||
, ssbAddUnique
|
||||
:: TableName -> ConstraintName -> [ColumnName] -> Sql
|
||||
|
@ -123,11 +127,16 @@ instance PersistSchema SqlBackend where
|
|||
removeEntity name = do
|
||||
ssb <- ask
|
||||
exec $ ssbDropTable ssb $ entity2table name
|
||||
addField ent (Field name typ mnull) = do
|
||||
addField ent (Field name typ mnull) mdef = do
|
||||
ssb <- ask
|
||||
exec $
|
||||
ssbAddColumn ssb (entity2table ent) $
|
||||
Column (field2column name) (type2sql ssb typ) mnull
|
||||
ssbAddColumn ssb
|
||||
(entity2table ent)
|
||||
(Column (field2column name) (type2sql ssb typ) mnull)
|
||||
mdef
|
||||
when (isJust mdef) $
|
||||
exec $
|
||||
ssbUndefColumn ssb (entity2table ent) (field2column name)
|
||||
renameField entity old new = do
|
||||
ssb <- ask
|
||||
exec $
|
||||
|
|
Loading…
Reference in a new issue