pg-migrate-import-hasql-migration-1.0.0.0: src/Database/PostgreSQL/Migrate/History/HasqlMigration/Parser.hs
module Database.PostgreSQL.Migrate.History.HasqlMigration.Parser
( hasqlMigrationImportCommandParser,
)
where
import Data.Text qualified as Text
import Database.PostgreSQL.Migrate (MigrationPlan)
import Database.PostgreSQL.Migrate.CLI (OutputFormat (..))
import Database.PostgreSQL.Migrate.History.HasqlMigration.Types
import Hasql.Connection.Settings qualified as Settings
import Options.Applicative
-- | Build the reusable, target-aware hasql-migration import parser.
hasqlMigrationImportCommandParser :: MigrationPlan -> Parser HasqlMigrationImportCommand
hasqlMigrationImportCommandParser _ =
HasqlMigrationImportCommand
<$> parserOptionGroup
"Connection"
( optional
( option
(Settings.connectionString . Text.pack <$> str)
(long "source-database-url" <> metavar "URL" <> help "hasql-migration source connection string; no environment variable is read")
)
)
<*> option
(eitherReader (either (Left . show) Right . qualifiedTable . Text.pack))
(long "source-table" <> metavar "SCHEMA.TABLE" <> value defaultHasqlMigrationTable <> showDefaultWith (const "public.schema_migrations"))
<*> strOption (long "mapping" <> metavar "PATH" <> help "Checked-in source-to-target mapping artifact")
<*> strOption (long "source-directory" <> metavar "PATH" <> help "Directory containing exact selected legacy SQL payloads")
<*> switch (long "strict-source" <> help "Reject every unselected source row")
<*> switch (long "allow-equivalent" <> help "Opt in to mappings proven by read-only state validators")
<*> flag TextOutput JsonOutput (long "json" <> help "Emit JSON schema version 1 conventions")