diff --git a/src/Model/Migration.hs b/src/Model/Migration.hs index 98652d070..30614eaae 100644 --- a/src/Model/Migration.hs +++ b/src/Model/Migration.hs @@ -79,16 +79,27 @@ customMigrations :: MonadIO m => Map (Key AppliedMigration) (ReaderT SqlBackend customMigrations = Map.fromListWith (>>) [ ( AppliedMigrationKey [migrationVersion|initial|] [version|0.0.0|] , do -- New theme format - userThemes <- [sqlQQ| SELECT @{UserId}, @{UserTheme} FROM ^{User}; |] - forM_ userThemes $ \(uid, Single str) -> case stripPrefix "theme--" str of - Just v - | Just theme <- fromPathPiece v -> update uid [UserTheme =. theme] - other -> error $ "Could not parse theme: " <> show other + haveUserTable <- [sqlQQ| SELECT to_regclass('user'); |] + + case haveUserTable :: [Maybe (Single Text)] of + [Just _] -> do + userThemes <- [sqlQQ| SELECT 'id', 'theme' FROM 'user'; |] + forM_ userThemes $ \(uid, Single str) -> case stripPrefix "theme--" str of + Just v + | Just theme <- fromPathPiece v -> update uid [UserTheme =. theme] + other -> error $ "Could not parse theme: " <> show other + _other -> return () ) , ( AppliedMigrationKey [migrationVersion|0.0.0|] [version|1.0.0|] - , [executeQQ| -- Better JSON encoding - ALTER TABLE "sheet" ALTER COLUMN "type" TYPE json USING "type"::json; - ALTER TABLE "sheet" ALTER COLUMN "grouping" TYPE json USING "grouping"::json; - |] + , do -- Better JSON encoding + haveSheetTable <- [sqlQQ| SELECT to_regclass('sheet'); |] + + case haveSheetTable :: [Maybe (Single Text)] of + [Just _] -> + [executeQQ| + ALTER TABLE 'sheet' ALTER COLUMN 'type' TYPE json USING 'type'::json; + ALTER TABLE 'sheet' ALTER COLUMN 'grouping' TYPE json USING 'grouping'::json; + |] + _other -> return () ) ]