module Drifter
(
resolveDependencyOrder
, changeSequence
, migrate
, Drifter(..)
, ChangeName(..)
, Change(..)
, Description
, Method
, DBConnection
) where
import Data.List
import Drifter.Graph
import Drifter.Types
changeSequence :: [Change a] -> [Change a]
changeSequence :: [Change a] -> [Change a]
changeSequence [] = []
changeSequence (Change a
x:[Change a]
xs) = [Change a] -> [Change a]
forall a. [a] -> [a]
reverse ([Change a] -> [Change a]) -> [Change a] -> [Change a]
forall a b. (a -> b) -> a -> b
$ (Change a, [Change a]) -> [Change a]
forall a b. (a, b) -> b
snd ((Change a, [Change a]) -> [Change a])
-> (Change a, [Change a]) -> [Change a]
forall a b. (a -> b) -> a -> b
$ ((Change a, [Change a]) -> Change a -> (Change a, [Change a]))
-> (Change a, [Change a]) -> [Change a] -> (Change a, [Change a])
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (Change a, [Change a]) -> Change a -> (Change a, [Change a])
forall a.
(Change a, [Change a]) -> Change a -> (Change a, [Change a])
go (Change a
x, [Change a
x]) [Change a]
xs
where
go :: (Change a, [Change a]) -> Change a -> (Change a, [Change a])
go :: (Change a, [Change a]) -> Change a -> (Change a, [Change a])
go (Change a
lastChange, [Change a]
xs') Change a
c =
let c' :: Change a
c' = Change a
c { changeDependencies :: [ChangeName]
changeDependencies = [Change a -> ChangeName
forall a. Change a -> ChangeName
changeName Change a
lastChange] }
in (Change a
c', Change a
c'Change a -> [Change a] -> [Change a]
forall a. a -> [a] -> [a]
:[Change a]
xs')