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