packages feed

clickhouse-migrate-embed-0.1.0.0: test/fixtures/Main.hs

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

module Main (main) where

import ClickHouseMigrate
import ClickHouseMigrate.Embed (embedComponent)
import Data.ByteString qualified as BS
import Data.List.NonEmpty (NonEmpty (..))
import Data.List.NonEmpty qualified as NE
import Data.Text qualified as Text
import Numeric (showHex)

component :: MigrationComponent
component = $(embedComponent "component/manifest.json")

main :: IO ()
main = case migrationPlan (component :| []) of
  Left _ -> fail "Embedded plan failed"
  Right plan -> mapM_ render (concatMap (NE.toList . componentMigrations) (NE.toList (inspectPlan plan)))
  where
    render migration = do
      putStrLn (Text.unpack (migrationChecksumHex (migrationChecksum migration)))
      mapM_ (putStrLn . concatMap hex . BS.unpack . stepSql) (NE.toList (migrationSteps migration))
    hex byte = case showHex byte "" of [c] -> ['0', c]; chars -> chars