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