pub mod ast_parser;
pub mod auto_migration;
pub mod autodetector;
pub mod dependency;
pub mod di_support;
pub mod executor;
pub mod fields;
pub mod graph;
pub mod introspect;
pub mod introspection;
pub mod migration;
pub mod migration_namer;
pub mod migration_numbering;
pub mod model_registry;
pub mod operation_trait;
pub mod operations;
pub mod plan;
pub mod recorder;
pub mod registry;
pub mod repository;
pub mod schema_diff;
pub mod schema_editor;
pub mod service;
pub mod source;
#[cfg(feature = "sqlite")]
pub(crate) mod sqlite_pragma;
pub mod squash;
pub mod state_loader;
pub mod visualization;
pub mod zero_downtime;
#[cfg(feature = "contenttypes")]
pub use crate::contenttypes::migration::MigrationRecord;
pub use autodetector::{
ChangeTracker,
ConstraintDefinition,
DetectedChanges,
FieldState,
ForeignKeyAction,
ForeignKeyConstraintInfo,
ForeignKeyInfo,
IndexDefinition,
InferenceEngine,
InferenceRule,
InferredIntent,
InteractiveAutodetector,
MigrationAutodetector,
MigrationPrompt,
ModelState,
OperationRef,
PatternMatcher,
ProjectState,
RuleCondition,
SimilarityConfig,
to_snake_case,
};
pub use dependency::{
DependencyCondition, DependencyResolutionContext, DependencyResolver, MigrationDependency,
OptionalDependency, SwappableDependency,
};
pub use di_support::{MigrationConfig, MigrationService as DIMigrationService};
pub use executor::{DatabaseMigrationExecutor, ExecutionResult, OperationOptimizer};
pub use fields::FieldType;
pub use graph::{MigrationGraph, MigrationKey, MigrationNode};
pub use migration::Migration;
pub use migration_namer::MigrationNamer;
pub use migration_numbering::MigrationNumbering;
pub use model_registry::{
FieldMetadata, ManyToManyMetadata, ModelMetadata, ModelRegistry, RelationshipMetadata,
global_registry,
};
pub use crate::m2m_naming as naming;
pub use crate::m2m_naming::{default_m2m_columns, default_through_table};
pub use operation_trait::MigrationOperation;
pub use operations::{
AddColumn, AlterColumn, AlterTableOptions, BulkLoadFormat, BulkLoadOptions, BulkLoadSource,
ColumnDefinition, Constraint, CreateTable, DeferrableOption, DropColumn, IndexType,
InterleaveSpec, MySqlAlgorithm, MySqlLock, Operation, PartitionDef, PartitionOptions,
PartitionType, PartitionValues, SqlDialect, field_type_string_to_field_type,
};
pub use plan::{MigrationPlan, TransactionMode};
pub use auto_migration::{
AutoMigrationError, AutoMigrationGenerator, AutoMigrationResult, ValidationResult,
};
pub use operations::{
AddField, AlterField, CreateCollation, CreateExtension, CreateModel, DeleteModel,
DropExtension, FieldDefinition, MoveModel, RemoveField, RenameField, RenameModel, RunCode,
RunSQL, StateOperation, special::DataMigration,
};
pub use recorder::{DatabaseMigrationRecorder, MigrationRecorder};
pub use repository::{MigrationRepository, filesystem::FilesystemRepository};
pub use schema_diff::{
ColumnSchema, ConstraintSchema, DatabaseSchema, ForeignKeySchemaInfo, IndexSchema, SchemaDiff,
SchemaDiffResult, TableSchema,
};
pub use schema_editor::SchemaEditor;
pub use service::MigrationService;
pub use source::{
MigrationSource, composite::CompositeSource, filesystem::FilesystemSource,
registry::RegistrySource,
};
pub use squash::{MigrationSquasher, SquashOptions};
pub use state_loader::{MigrationStateLoader, build_state_from_files};
pub use visualization::{HistoryEntry, MigrationStats, MigrationVisualizer, OutputFormat};
pub use zero_downtime::{MigrationPhase, Strategy, ZeroDowntimeMigration};
pub use introspect::{
GeneratedFile, GeneratedOutput, GenerationConfig, IntrospectConfig, NamingConvention,
OutputConfig, SchemaCodeGenerator, TableFilterConfig, TypeMapper, TypeMappingError,
escape_rust_keyword, generate_models, preview_output, sanitize_identifier, to_pascal_case,
write_output,
};
pub use introspection::{
ColumnInfo, DatabaseIntrospector, ForeignKeyInfo as IntrospectionForeignKeyInfo, IndexInfo,
TableInfo, UniqueConstraintInfo,
};
pub use crate::backends::{DatabaseConnection, DatabaseType};
use thiserror::Error;
pub trait MigrationProvider {
fn migrations() -> Vec<Migration>;
}
#[non_exhaustive]
#[derive(Debug, Error)]
pub enum MigrationError {
#[error("Migration not found: {0}")]
NotFound(String),
#[error("Dependency error: {0}")]
DependencyError(String),
#[error("SQL error: {0}")]
SqlError(#[from] sqlx::Error),
#[error("Database error: {0}")]
DatabaseError(#[from] crate::backends::QueryDatabaseError),
#[error("Invalid migration: {0}")]
InvalidMigration(String),
#[error("Irreversible migration: {0}")]
IrreversibleError(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("Format error: {0}")]
FmtError(#[from] std::fmt::Error),
#[error("Circular dependency detected: {cycle}")]
CircularDependency {
cycle: String,
},
#[error("Node not found: {message} - {node}")]
NodeNotFound {
message: String,
node: String,
},
#[error("Introspection error: {0}")]
IntrospectionError(String),
#[error("Unsupported database: {0}")]
UnsupportedDatabase(String),
#[error("Duplicate operations: {0}")]
DuplicateOperations(String),
#[error("Foreign key violation: {0}")]
ForeignKeyViolation(String),
#[error("Path traversal detected: {0}")]
PathTraversal(String),
}
pub type Result<T> = std::result::Result<T, MigrationError>;
pub mod prelude {
pub use super::fields::prelude::*;
pub use super::{ColumnDefinition, Constraint, ForeignKeyAction, Migration, Operation};
}