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
43mod column_builder;
44pub mod dialect;
45mod migration;
46mod operation;
47mod state;
48mod table_builder;
49
50pub use column_builder::{
51    bigint, binary, blob, boolean, char, date, datetime, decimal, double, integer, numeric, real,
52    smallint, text, time, timestamp, varbinary, varchar, ColumnBuilder, ColumnDefinition,
53    DefaultValue, ForeignKeyRef,
54};
55pub use dialect::{DuckDbDialect, MigrationDialect, PostgresDialect, SqliteDialect};
56pub use migration::{Migration, MigrationRunner, MigrationStatus};
57pub use operation::{
58    AddColumnOp, AddForeignKeyOp, AlterColumnOp, CreateIndexOp, CreateTableOp, DropColumnOp,
59    DropForeignKeyOp, DropIndexOp, DropTableOp, IndexType, Operation, RawSqlOp, RenameColumnOp,
60    RenameTableOp,
61};
62pub use state::MigrationState;
63pub use table_builder::{
64    CreateTableBuilder, DropTableBuilder, HasColumns, HasName, NoColumns, NoName,
65};