pub struct SchemaDiff {
pub entries: Vec<DiffEntry>,
}Expand description
Represents the difference between two schemas.
The diff algorithm compares the Rust schema (source of truth) against the database schema (current state) to produce a set of changes. The comparison is done at two levels:
-
Table level: Find tables that exist in Rust but not DB (CREATE), or exist in DB but not Rust (DROP, except forge_ internal tables).
-
Column level: For tables in both, compare fields:
- Field in Rust but not DB → ADD COLUMN
- Field in DB but not Rust → DROP COLUMN
- Field in both but different type → ALTER COLUMN TYPE
The algorithm is intentionally simple and doesn’t handle:
- Column renames (seen as DROP + ADD)
- Index changes (handled separately)
- Complex type migrations (require manual migration)
This is by design: automatic migrations are for development convenience. Production deployments should use explicit migration files.
Fields§
§entries: Vec<DiffEntry>Changes to be applied.
Implementations§
Source§impl SchemaDiff
impl SchemaDiff
Sourcepub fn from_comparison(
rust_tables: &[TableDef],
db_tables: &[DatabaseTable],
) -> Self
pub fn from_comparison( rust_tables: &[TableDef], db_tables: &[DatabaseTable], ) -> Self
Compare a Rust schema to a database schema.
Trait Implementations§
Source§impl Clone for SchemaDiff
impl Clone for SchemaDiff
Source§fn clone(&self) -> SchemaDiff
fn clone(&self) -> SchemaDiff
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SchemaDiff
impl Debug for SchemaDiff
Auto Trait Implementations§
impl Freeze for SchemaDiff
impl RefUnwindSafe for SchemaDiff
impl Send for SchemaDiff
impl Sync for SchemaDiff
impl Unpin for SchemaDiff
impl UnwindSafe for SchemaDiff
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request