Skip to main content

oxide_sql_core/migrations/
mod.rs

1//! Type-Safe Database Migrations System
2//!
3//! This module provides a compile-time validated migrations system inspired by Django,
4//! where:
5//! - Invalid migrations fail to compile (missing columns, wrong types, etc.)
6//! - Operations are reversible with typed `up()` and `down()` methods
7//! - SQL generation is dialect-aware
8//!
9//! # Example
10//!
11//! ```rust
12//! use oxide_sql_core::migrations::{
13//!     Migration, Operation, CreateTableBuilder,
14//!     bigint, varchar, timestamp, boolean,
15//! };
16//!
17//! pub struct Migration0001;
18//!
19//! impl Migration for Migration0001 {
20//!     const ID: &'static str = "0001_create_users";
21//!
22//!     fn up() -> Vec<Operation> {
23//!         vec![
24//!             CreateTableBuilder::new()
25//!                 .name("users")
26//!                 .column(bigint("id").primary_key().autoincrement().build())
27//!                 .column(varchar("username", 255).not_null().unique().build())
28//!                 .column(varchar("email", 255).build())
29//!                 .column(timestamp("created_at").not_null().default_expr("CURRENT_TIMESTAMP").build())
30//!                 .build()
31//!                 .into(),
32//!         ]
33//!     }
34//!
35//!     fn down() -> Vec<Operation> {
36//!         vec![
37//!             Operation::drop_table("users"),
38//!         ]
39//!     }
40//! }
41//! ```
42
43pub mod codegen;
44mod column_builder;
45pub mod dialect;
46pub mod diff;
47pub mod introspect;
48mod migration;
49mod operation;
50pub mod snapshot;
51mod state;
52mod table_builder;
53
54pub use codegen::generate_migration_code;
55pub use column_builder::{
56    ColumnBuilder, ColumnDefinition, DefaultValue, ForeignKeyAction, ForeignKeyRef, bigint, binary,
57    blob, boolean, char, date, datetime, decimal, double, integer, numeric, real, smallint, text,
58    time, timestamp, varbinary, varchar,
59};
60pub use dialect::{DuckDbDialect, MigrationDialect, PostgresDialect, SqliteDialect};
61pub use diff::{AmbiguousChange, DiffWarning, SchemaDiff, auto_diff_schema, auto_diff_table};
62pub use introspect::Introspect;
63pub use migration::{Migration, MigrationRunner, MigrationStatus};
64pub use operation::{
65    AddColumnOp, AddForeignKeyOp, AlterColumnChange, AlterColumnOp, CreateIndexOp, CreateTableOp,
66    DropColumnOp, DropForeignKeyOp, DropIndexOp, DropTableOp, IndexType, Operation, RawSqlOp,
67    RenameColumnOp, RenameTableOp,
68};
69pub use snapshot::{
70    ColumnSnapshot, ForeignKeySnapshot, IndexSnapshot, SchemaSnapshot, TableSnapshot,
71};
72pub use state::MigrationState;
73pub use table_builder::{
74    CreateTableBuilder, DropTableBuilder, HasColumns, HasName, NoColumns, NoName,
75};