packages feed

clickhouse-migrate-0.1.0.0: test/public/Valid.hs

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedStrings #-}

module Main (main) where

import ClickHouseMigrate
import Data.List.NonEmpty (NonEmpty (..))
import Data.List.NonEmpty qualified as NE
import Data.Set qualified as Set

libraryA :: Either DefinitionError MigrationComponent
libraryA = do
  step <- sqlStep "create" "CREATE TABLE app.a (id UInt64) ENGINE=MergeTree ORDER BY id"
  migration <- sqlMigration "0001" (step :| [])
  migrationComponent "library-a" Set.empty (withMigrationDescription (Just "A") migration :| [])

libraryB :: Either DefinitionError MigrationComponent
libraryB = do
  step <- sqlStep "create" "CREATE TABLE app.b (id UInt64) ENGINE=MergeTree ORDER BY id"
  migration <- sqlMigration "0001" (step :| [])
  migrationComponent "library-b" (Set.singleton "library-a") (migration :| [])

main :: IO ()
main = case (libraryA, libraryB) of
  (Right a, Right b) -> case do
    ca <- componentName "library-a"
    cb <- componentName "library-b"
    name <- migrationName "0001"
    pure [migrationIdFromNames ca name, migrationIdFromNames cb name] of
    Right ids -> case scheduledMigrationPlanFromList [a, b] ids of
      Right p
        | map (componentNameText . componentViewName) (NE.toList (inspectPlan p)) == ["library-a", "library-b"] ->
            mapM_ (print . migrationChecksumHex . migrationChecksum) (concatMap (NE.toList . componentMigrations) (NE.toList (inspectPlan p)))
      _ -> fail "Public plan composition failed"
    _ -> fail "Public schedule identity failed"
  _ -> fail "Public authoring failed"