From 0349c48dddaf20efcf6496a13efb9df8c4a0dd6e Mon Sep 17 00:00:00 2001 From: gudaoxuri Date: Tue, 29 Nov 2022 03:39:29 -0800 Subject: [PATCH] Improve postgresql operations. --- tardis/Cargo.toml | 3 ++- tardis/src/db/reldb_client.rs | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/tardis/Cargo.toml b/tardis/Cargo.toml index dd450193..6911ed75 100644 --- a/tardis/Cargo.toml +++ b/tardis/Cargo.toml @@ -48,7 +48,7 @@ lazy_static = { version = "1.4" } rand = { version = "0.8" } rand_core = { version = "0.6" } chrono = { version = "0.4" } -env_logger = { version = "0.9" } +env_logger = { version = "0.10" } config = { version = "0.13" } regex = { version = "1.5" } url = { version = "2.2" } @@ -84,6 +84,7 @@ async-trait = { version = "0.1", optional = true } # RelDB sea-orm = { version = "0.10", features = [ "sqlx-all", + "postgres-array", "macros", "runtime-tokio-native-tls", "debug-print", diff --git a/tardis/src/db/reldb_client.rs b/tardis/src/db/reldb_client.rs index 2a687fc9..c72cc602 100644 --- a/tardis/src/db/reldb_client.rs +++ b/tardis/src/db/reldb_client.rs @@ -456,6 +456,19 @@ impl TardisRelDBClient { Ok(()) } + pub(self) async fn insert_raw_many_inner(sql: &str, params: Vec>, db: &C) -> TardisResult<()> + where + C: ConnectionTrait, + { + trace!("[Tardis.RelDBClient] Inserting many sql {}, some params:{:?}", sql, params[0]); + // TODO Performance Optimization + for param in params { + let execute_stmt = Statement::from_sql_and_values(db.get_database_backend(), sql, param); + Self::execute_inner(execute_stmt, db).await?; + } + Ok(()) + } + pub(self) async fn update_one_inner(mut model: T, db: &C, ctx: &TardisContext) -> TardisResult<()> where C: ConnectionTrait, @@ -813,8 +826,6 @@ impl TardisRelDBlConnection { } /// Execute SQL operations (provide custom SQL processing capabilities) / 执行SQL操作(提供自定义SQL处理能力) - /// - /// pub async fn execute_one(&self, sql: &str, params: Vec) -> TardisResult { if let Some(tx) = &self.tx { TardisRelDBClient::execute_one_inner(sql, params, tx).await @@ -905,6 +916,14 @@ impl TardisRelDBlConnection { } } + pub async fn insert_raw_many(&self, sql: &str, params: Vec>) -> TardisResult<()> { + if let Some(tx) = &self.tx { + TardisRelDBClient::insert_raw_many_inner(sql, params, tx).await + } else { + TardisRelDBClient::insert_raw_many_inner(sql, params, self.conn.as_ref()).await + } + } + /// Update a record / 更新一条记录 /// /// # Arguments @@ -1224,7 +1243,6 @@ pub trait TardisActiveModel: ActiveModelBehavior { | sea_query::TableRef::DatabaseSchemaTableAlias(_, _, t, _) => t.to_string(), _ => unimplemented!(), }; - // let df = table_name.; let create_function_sql = Self::create_function_sqls(db, &table_name, update_time_field); return (create_table_statement, create_index_statement, create_function_sql); }