Skip to content

Docs

Class Model

High-level view of the main classes and how they collaborate. Method signatures and minor fields are omitted for readability — see source for details.

classDiagram
    direction LR

    class MigrationOrchestrator {
        <<service>>
    }

    class MigrationRunner {
        <<abstract>>
    }
    class FileMigrationRunner
    class AutoMigrationRunner

    class MigrationGraphService {
        <<service>>
    }
    class MigrationGenerator {
        <<service>>
    }
    class DiffResolver {
        <<service>>
    }
    class DatabricksStatementGenerator {
        <<service>>
    }

    class State {
        <<abstract>>
    }
    class DatabaseState
    class MigrationState
    class StateClient {
        <<abstract>>
    }

    class Migration
    class FileMigration
    class Operation
    class Diff {
        <<abstract, event>>
    }
    class MigrationConflictStrategy {
        <<abstract>>
    }

    %% Orchestration
    MigrationOrchestrator --> FileMigrationRunner : pre/post phases
    MigrationOrchestrator --> AutoMigrationRunner : auto phase
    MigrationOrchestrator --> StateClient

    %% Runners
    MigrationRunner <|-- FileMigrationRunner
    MigrationRunner <|-- AutoMigrationRunner
    MigrationRunner --> MigrationState : manages
    MigrationRunner --> MigrationGraphService : orders via
    FileMigrationRunner --> MigrationConflictStrategy
    AutoMigrationRunner --> MigrationGenerator

    %% Diff pipeline
    MigrationGenerator --> DiffResolver
    MigrationGenerator --> Migration : produces
    DiffResolver --> DatabaseState : compares
    DiffResolver --> Diff : produces
    Migration ..> DatabricksStatementGenerator : from_diff()

    %% Domain
    Migration <|-- FileMigration
    Migration *-- Operation
    Migration --> Migration : depends_on
    MigrationState *-- Migration

    %% State
    State <|-- DatabaseState
    State <|-- MigrationState
    State ..> StateClient : persists via

Notes:

  • Orchestration. MigrationOrchestrator runs three phases in order: pre-deployment and post-deployment go through FileMigrationRunner; the middle "auto" phase goes through AutoMigrationRunner. Configuration is bundled in MigrationOrchestratorConfig (not shown).
  • Runners. MigrationRunner is an abstract base. FileMigrationRunner loads SQL files from disk and applies a MigrationConflictStrategy (RaiseOnConflict / WarnOnConflict / IgnoreConflict) when previously-applied migrations have been modified or removed. AutoMigrationRunner generates migrations from a state diff via MigrationGenerator.
  • Diff pipeline. DiffResolver compares two DatabaseStates and emits a typed Diff hierarchy (DatabaseAdded/Removed/Changed, SchemaAdded/Removed/Changed, TableAdded/Removed/Changed, ColumnAdded/Removed/Changed, PrimaryKeyChanged). DatabricksStatementGenerator renders each Diff to SQL when Migration.from_diff is called.
  • State. State is the persistence base; concrete states are DatabaseState (a collection of Database objects from cloe_metadata) and MigrationState (a list of Migration/FileMigration). Read/write is delegated to a StateClient (LocalStateClient or AzureStateClient).
  • Migrations. Each Migration owns a list of frozen, hashable Operations and a MigrationStatus (NEW/PENDING/APPLIED/FAILED/UNDEFINED). FileMigration adds source_path and depends_on_paths for file-based migrations.