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};