mirror of
https://github.com/launchbadge/sqlx.git
synced 2026-03-23 18:40:24 +00:00
feat(cli): add --connect-timeout (#1889)
This commit is contained in:
@@ -1,43 +1,58 @@
|
||||
use crate::migrate;
|
||||
use crate::opt::ConnectOpts;
|
||||
use console::style;
|
||||
use promptly::{prompt, ReadlineError};
|
||||
use sqlx::any::Any;
|
||||
use sqlx::migrate::MigrateDatabase;
|
||||
|
||||
pub async fn create(uri: &str) -> anyhow::Result<()> {
|
||||
if !Any::database_exists(uri).await? {
|
||||
Any::create_database(uri).await?;
|
||||
pub async fn create(connect_opts: &ConnectOpts) -> anyhow::Result<()> {
|
||||
// NOTE: only retry the idempotent action.
|
||||
// We're assuming that if this succeeds, then any following operations should also succeed.
|
||||
let exists = crate::retry_connect_errors(connect_opts, Any::database_exists).await?;
|
||||
|
||||
if !exists {
|
||||
Any::create_database(&connect_opts.database_url).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn drop(uri: &str, confirm: bool) -> anyhow::Result<()> {
|
||||
if confirm && !ask_to_continue(uri) {
|
||||
pub async fn drop(connect_opts: &ConnectOpts, confirm: bool) -> anyhow::Result<()> {
|
||||
if confirm && !ask_to_continue(connect_opts) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if Any::database_exists(uri).await? {
|
||||
Any::drop_database(uri).await?;
|
||||
// NOTE: only retry the idempotent action.
|
||||
// We're assuming that if this succeeds, then any following operations should also succeed.
|
||||
let exists = crate::retry_connect_errors(connect_opts, Any::database_exists).await?;
|
||||
|
||||
if exists {
|
||||
Any::drop_database(&connect_opts.database_url).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn reset(migration_source: &str, uri: &str, confirm: bool) -> anyhow::Result<()> {
|
||||
drop(uri, confirm).await?;
|
||||
setup(migration_source, uri).await
|
||||
pub async fn reset(
|
||||
migration_source: &str,
|
||||
connect_opts: &ConnectOpts,
|
||||
confirm: bool,
|
||||
) -> anyhow::Result<()> {
|
||||
drop(connect_opts, confirm).await?;
|
||||
setup(migration_source, connect_opts).await
|
||||
}
|
||||
|
||||
pub async fn setup(migration_source: &str, uri: &str) -> anyhow::Result<()> {
|
||||
create(uri).await?;
|
||||
migrate::run(migration_source, uri, false, false).await
|
||||
pub async fn setup(migration_source: &str, connect_opts: &ConnectOpts) -> anyhow::Result<()> {
|
||||
create(connect_opts).await?;
|
||||
migrate::run(migration_source, connect_opts, false, false).await
|
||||
}
|
||||
|
||||
fn ask_to_continue(uri: &str) -> bool {
|
||||
fn ask_to_continue(connect_opts: &ConnectOpts) -> bool {
|
||||
loop {
|
||||
let r: Result<String, ReadlineError> =
|
||||
prompt(format!("Drop database at {}? (y/n)", style(uri).cyan()));
|
||||
let r: Result<String, ReadlineError> = prompt(format!(
|
||||
"Drop database at {}? (y/n)",
|
||||
style(&connect_opts.database_url).cyan()
|
||||
));
|
||||
match r {
|
||||
Ok(response) => {
|
||||
if response == "n" || response == "N" {
|
||||
|
||||
Reference in New Issue
Block a user