From f8da8345f5bf0554a4840604ed0140ff5378eb71 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Thu, 5 Jun 2025 09:10:38 +0200 Subject: [PATCH] feat: upsert --- flake.nix | 2 ++ georm-macros/src/georm/trait_implementation.rs | 6 +++++- src/georm.rs | 13 ++----------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/flake.nix b/flake.nix index b00068c..07abb9a 100644 --- a/flake.nix +++ b/flake.nix @@ -30,6 +30,8 @@ }) sqls sqlx-cli + tree-sitter-grammars.tree-sitter-rust + tree-sitter-grammars.tree-sitter-sql ]; }; }); diff --git a/georm-macros/src/georm/trait_implementation.rs b/georm-macros/src/georm/trait_implementation.rs index 6da75c7..ee08b9d 100644 --- a/georm-macros/src/georm/trait_implementation.rs +++ b/georm-macros/src/georm/trait_implementation.rs @@ -56,7 +56,7 @@ fn generate_update_query( let update_columns = fields .iter() .enumerate() - .map(|(i, &field)| format!("{} = ${}", field.ident, i + 1)) + .map(|(i, field)| format!("{} = ${}", field.ident, i + 1)) .collect::>() .join(", "); let update_string = format!( @@ -79,6 +79,10 @@ fn generate_update_query( } } +fn generate_upsert_query(table: &str, fields: &[GeormField]) -> proc_macro2::TokenStream { +} + + fn generate_delete_query(table: &str, id: &GeormField) -> proc_macro2::TokenStream { let delete_string = format!("DELETE FROM {table} WHERE {} = $1", id.ident); let ty = &id.ty; diff --git a/src/georm.rs b/src/georm.rs index 3f7759d..7af8385 100644 --- a/src/georm.rs +++ b/src/georm.rs @@ -47,21 +47,12 @@ pub trait Georm { /// /// # Errors /// Returns any error Postgres may have encountered - fn create_or_update( + fn upsert( &self, pool: &sqlx::PgPool, ) -> impl ::std::future::Future> where - Self: Sized, - { - async { - if Self::find(pool, self.get_id()).await?.is_some() { - self.update(pool).await - } else { - self.create(pool).await - } - } - } + Self: Sized; /// Delete the entity from the database if it exists. ///