pub struct EmbeddedMigration<'a> {
pub name: &'a str,
pub sql: &'a str,
pub hash: &'a str,
}Expand description
One migration whose SQL is resolved at compile time, usually by
include_str!.
A single-binary distribution — cargo install, a tap, a curl | sh
installer — has no migrations directory on the target machine, so the bytes
have to travel inside the executable:
const MIGRATIONS: &[EmbeddedMigration] = &[EmbeddedMigration {
name: "0001_init.sql",
sql: include_str!("../migrations/0001_init.sql"),
hash: "sha256:2c8f…",
}];Baking the SQL in does not weaken the integrity check, it strengthens it:
on disk the file can be edited after install, whereas here
verify_hash turns an edit to a shipped .sql into a
failing test in the project that ships it.
Fields§
§name: &'a strRecorded in _migrations.name, and how an already-applied migration is
recognized. Conventionally the file name, e.g. "0001_init.sql", so a
project can move between this and run_migrate.
sql: &'a strThe migration’s SQL. Several statements separate with
--> statement-breakpoint, exactly as in a generated file.
hash: &'a strThe expected SHA-256 of sql, as "sha256:…" — the same string
_journal.json carries for this migration.
Implementations§
Source§impl EmbeddedMigration<'_>
impl EmbeddedMigration<'_>
Sourcepub fn verify_hash(&self) -> Result<(), MigrateError>
pub fn verify_hash(&self) -> Result<(), MigrateError>
Checks sql against hash without touching a database, so a project can
assert its whole list in one #[test].
§Errors
Returns MigrateError::HashMismatch when the two disagree.
Auto Trait Implementations§
impl<'a> Freeze for EmbeddedMigration<'a>
impl<'a> RefUnwindSafe for EmbeddedMigration<'a>
impl<'a> Send for EmbeddedMigration<'a>
impl<'a> Sync for EmbeddedMigration<'a>
impl<'a> Unpin for EmbeddedMigration<'a>
impl<'a> UnsafeUnpin for EmbeddedMigration<'a>
impl<'a> UnwindSafe for EmbeddedMigration<'a>
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
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request