From eb0775e35d68acdf768e396be30f6f5f53a9accb Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Tue, 23 Feb 2021 18:44:37 +0300 Subject: [PATCH] refac: restructure database --- migra-cli/src/commands/apply.rs | 3 +- migra-cli/src/commands/downgrade.rs | 3 +- migra-cli/src/commands/init.rs | 3 +- migra-cli/src/commands/list.rs | 7 ++--- migra-cli/src/commands/upgrade.rs | 4 +-- migra-cli/src/config.rs | 2 +- migra-cli/src/database/adapter.rs | 17 +++++++++++ .../src/{database.rs => database/builder.rs} | 30 +------------------ migra-cli/src/database/clients/mod.rs | 3 ++ .../clients}/postgres.rs | 3 +- .../mod.rs => database/connection.rs} | 19 ++++++++---- migra-cli/src/{ => database}/migration.rs | 3 +- migra-cli/src/database/mod.rs | 14 +++++++++ migra-cli/src/main.rs | 2 -- 14 files changed, 62 insertions(+), 51 deletions(-) create mode 100644 migra-cli/src/database/adapter.rs rename migra-cli/src/{database.rs => database/builder.rs} (55%) create mode 100644 migra-cli/src/database/clients/mod.rs rename migra-cli/src/{databases => database/clients}/postgres.rs (93%) rename migra-cli/src/{databases/mod.rs => database/connection.rs} (65%) rename migra-cli/src/{ => database}/migration.rs (98%) create mode 100644 migra-cli/src/database/mod.rs diff --git a/migra-cli/src/commands/apply.rs b/migra-cli/src/commands/apply.rs index 56326ac..4c04fc2 100644 --- a/migra-cli/src/commands/apply.rs +++ b/migra-cli/src/commands/apply.rs @@ -1,5 +1,6 @@ use crate::config::Config; -use crate::migration::{DatabaseMigrationManager, MigrationManager}; +use crate::database::prelude::*; +use crate::database::MigrationManager; use crate::opts::ApplyCommandOpt; use crate::StdResult; use std::convert::TryFrom; diff --git a/migra-cli/src/commands/downgrade.rs b/migra-cli/src/commands/downgrade.rs index 21636b0..1723d66 100644 --- a/migra-cli/src/commands/downgrade.rs +++ b/migra-cli/src/commands/downgrade.rs @@ -1,5 +1,6 @@ use crate::config::Config; -use crate::migration::{DatabaseMigrationManager, MigrationManager}; +use crate::database::prelude::*; +use crate::database::MigrationManager; use crate::StdResult; use std::convert::TryFrom; diff --git a/migra-cli/src/commands/init.rs b/migra-cli/src/commands/init.rs index fbfe6ba..d7a5b8b 100644 --- a/migra-cli/src/commands/init.rs +++ b/migra-cli/src/commands/init.rs @@ -1,5 +1,4 @@ -use crate::config::Config; -use crate::config::MIGRA_TOML_FILENAME; +use crate::config::{Config, MIGRA_TOML_FILENAME}; use crate::StdResult; use std::path::PathBuf; diff --git a/migra-cli/src/commands/list.rs b/migra-cli/src/commands/list.rs index 887ad50..8087835 100644 --- a/migra-cli/src/commands/list.rs +++ b/migra-cli/src/commands/list.rs @@ -1,9 +1,8 @@ use crate::config::Config; -use crate::databases::*; +use crate::database::migration::filter_pending_migrations; +use crate::database::prelude::*; +use crate::database::{DatabaseConnectionManager, Migration, MigrationManager}; use crate::error::{Error, StdResult}; -use crate::migration::{ - filter_pending_migrations, DatabaseMigrationManager, Migration, MigrationManager, -}; const EM_DASH: char = '—'; diff --git a/migra-cli/src/commands/upgrade.rs b/migra-cli/src/commands/upgrade.rs index 83cf46c..48fb980 100644 --- a/migra-cli/src/commands/upgrade.rs +++ b/migra-cli/src/commands/upgrade.rs @@ -1,6 +1,4 @@ -use crate::migration::{ - filter_pending_migrations, DatabaseMigrationManager, Migration, MigrationManager, -}; +use crate::database::migration::*; use crate::Config; use crate::StdResult; use std::convert::TryFrom; diff --git a/migra-cli/src/config.rs b/migra-cli/src/config.rs index 2cb0869..20ed933 100644 --- a/migra-cli/src/config.rs +++ b/migra-cli/src/config.rs @@ -1,5 +1,5 @@ +use crate::database::migration::Migration; use crate::error::{Error, MigraResult}; -use crate::migration::Migration; use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; use std::{env, fs, io}; diff --git a/migra-cli/src/database/adapter.rs b/migra-cli/src/database/adapter.rs new file mode 100644 index 0000000..f48e404 --- /dev/null +++ b/migra-cli/src/database/adapter.rs @@ -0,0 +1,17 @@ +use crate::error::StdResult; + +pub trait ToSql { + fn to_sql(&self) -> String; +} + +pub type ToSqlParams<'a> = &'a [&'a dyn ToSql]; + +impl ToSql for &str { + fn to_sql(&self) -> String { + format!("'{}'", self) + } +} + +pub trait TryFromSql: Sized { + fn try_from_sql(row: QueryResultRow) -> StdResult; +} diff --git a/migra-cli/src/database.rs b/migra-cli/src/database/builder.rs similarity index 55% rename from migra-cli/src/database.rs rename to migra-cli/src/database/builder.rs index 69f0cbf..ae9a049 100644 --- a/migra-cli/src/database.rs +++ b/migra-cli/src/database/builder.rs @@ -1,32 +1,4 @@ -use crate::StdResult; - -pub trait ToSql { - fn to_sql(&self) -> String; -} - -pub type ToSqlParams<'a> = &'a [&'a dyn ToSql]; - -impl ToSql for &str { - fn to_sql(&self) -> String { - format!("'{}'", self) - } -} - -pub trait TryFromSql: Sized { - fn try_from_sql(row: QueryResultRow) -> StdResult; -} - -pub trait OpenDatabaseConnection: Sized { - fn open(connection_string: &str) -> StdResult; -} - -pub trait DatabaseConnection { - fn batch_execute(&mut self, query: &str) -> StdResult<()>; - - fn execute<'b>(&mut self, query: &str, params: ToSqlParams<'b>) -> StdResult; - - fn query<'b>(&mut self, query: &str, params: ToSqlParams<'b>) -> StdResult>>; -} +use super::prelude::*; pub(crate) fn merge_query_with_params(query: &str, params: ToSqlParams) -> String { params diff --git a/migra-cli/src/database/clients/mod.rs b/migra-cli/src/database/clients/mod.rs new file mode 100644 index 0000000..0111749 --- /dev/null +++ b/migra-cli/src/database/clients/mod.rs @@ -0,0 +1,3 @@ +mod postgres; + +pub use self::postgres::*; diff --git a/migra-cli/src/databases/postgres.rs b/migra-cli/src/database/clients/postgres.rs similarity index 93% rename from migra-cli/src/databases/postgres.rs rename to migra-cli/src/database/clients/postgres.rs index c5e610b..442368b 100644 --- a/migra-cli/src/databases/postgres.rs +++ b/migra-cli/src/database/clients/postgres.rs @@ -1,4 +1,5 @@ -use crate::database::*; +use crate::database::builder::merge_query_with_params; +use crate::database::prelude::*; use crate::error::StdResult; use postgres::{Client, NoTls}; diff --git a/migra-cli/src/databases/mod.rs b/migra-cli/src/database/connection.rs similarity index 65% rename from migra-cli/src/databases/mod.rs rename to migra-cli/src/database/connection.rs index d4b41b5..c9ef533 100644 --- a/migra-cli/src/databases/mod.rs +++ b/migra-cli/src/database/connection.rs @@ -1,11 +1,20 @@ -mod postgres; - -pub use self::postgres::*; - +use super::adapter::ToSqlParams; +use super::clients::*; use crate::config::{DatabaseConfig, SupportedDatabaseClient}; -use crate::database::{DatabaseConnection, OpenDatabaseConnection}; use crate::error::StdResult; +pub trait OpenDatabaseConnection: Sized { + fn open(connection_string: &str) -> StdResult; +} + +pub trait DatabaseConnection { + fn batch_execute(&mut self, query: &str) -> StdResult<()>; + + fn execute<'b>(&mut self, query: &str, params: ToSqlParams<'b>) -> StdResult; + + fn query<'b>(&mut self, query: &str, params: ToSqlParams<'b>) -> StdResult>>; +} + pub(crate) struct DatabaseConnectionManager { config: DatabaseConfig, } diff --git a/migra-cli/src/migration.rs b/migra-cli/src/database/migration.rs similarity index 98% rename from migra-cli/src/migration.rs rename to migra-cli/src/database/migration.rs index bf44e2b..650910d 100644 --- a/migra-cli/src/migration.rs +++ b/migra-cli/src/database/migration.rs @@ -1,6 +1,5 @@ +use super::connection::{DatabaseConnection, DatabaseConnectionManager}; use crate::config::Config; -use crate::database::DatabaseConnection; -use crate::databases::DatabaseConnectionManager; use crate::StdResult; use std::convert::TryFrom; use std::fs; diff --git a/migra-cli/src/database/mod.rs b/migra-cli/src/database/mod.rs new file mode 100644 index 0000000..fe4a41c --- /dev/null +++ b/migra-cli/src/database/mod.rs @@ -0,0 +1,14 @@ +pub(crate) mod adapter; +pub(crate) mod builder; +pub(crate) mod clients; +pub(crate) mod connection; +pub(crate) mod migration; + +pub mod prelude { + pub use super::adapter::{ToSql, ToSqlParams, TryFromSql}; + pub use super::connection::{DatabaseConnection, OpenDatabaseConnection}; + pub use super::migration::DatabaseMigrationManager; +} + +pub(crate) use connection::DatabaseConnectionManager; +pub(crate) use migration::{Migration, MigrationManager}; diff --git a/migra-cli/src/main.rs b/migra-cli/src/main.rs index c641144..20b9f99 100644 --- a/migra-cli/src/main.rs +++ b/migra-cli/src/main.rs @@ -4,9 +4,7 @@ mod commands; mod config; mod database; -mod databases; mod error; -mod migration; mod opts; use crate::error::StdResult;