Skip to content

Commit

Permalink
Allow modifying the connection in migrations (#2397)
Browse files Browse the repository at this point in the history
* Add function run_cli_with_connection

* Delegate run_cli to run_cli_with_connection

* Update sea-orm-migration/src/cli.rs

---------

Co-authored-by: Chris Tsang <[email protected]>
  • Loading branch information
Lythenas and tyt2y3 authored Jan 9, 2025
1 parent bead32a commit 5db8cb0
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions sea-orm-migration/src/cli.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use std::future::Future;

use clap::Parser;
use dotenvy::dotenv;
use std::{error::Error, fmt::Display, process::exit};
use tracing_subscriber::{prelude::*, EnvFilter};

use sea_orm::{ConnectOptions, Database, DbConn};
use sea_orm::{ConnectOptions, Database, DbConn, DbErr};
use sea_orm_cli::{run_migrate_generate, run_migrate_init, MigrateSubcommands};

use super::MigratorTrait;
Expand All @@ -13,6 +15,20 @@ const MIGRATION_DIR: &str = "./";
pub async fn run_cli<M>(migrator: M)
where
M: MigratorTrait,
{
run_cli_with_connection(migrator, Database::connect).await;
}

/// Same as [`run_cli`] where you provide the function to create the [`DbConn`].
///
/// This allows configuring the database connection as you see fit.
/// E.g. you can change settings in [`ConnectOptions`] or you can load sqlite
/// extensions.
pub async fn run_cli_with_connection<M, F, Fut>(migrator: M, make_connection: F)
where
M: MigratorTrait,
F: FnOnce(ConnectOptions) -> Fut,
Fut: Future<Output = Result<DbConn, DbErr>>,
{
dotenv().ok();
let cli = Cli::parse();
Expand All @@ -25,11 +41,12 @@ where
let connect_options = ConnectOptions::new(url)
.set_schema_search_path(schema)
.to_owned();
let db = &Database::connect(connect_options)

let db = make_connection(connect_options)
.await
.expect("Fail to acquire database connection");

run_migrate(migrator, db, cli.command, cli.verbose)
run_migrate(migrator, &db, cli.command, cli.verbose)
.await
.unwrap_or_else(handle_error);
}
Expand Down

0 comments on commit 5db8cb0

Please sign in to comment.