feat: upsert
Some checks failed
CI / tests (push) Failing after 3m16s

This commit is contained in:
Lucien Cartier-Tilet 2025-06-05 09:10:38 +02:00
parent 2b5a2df950
commit f8da8345f5
Signed by: phundrak
SSH Key Fingerprint: SHA256:PKiD+T7oShFqdUOz1Yo8AIAtwFwCaNVoi0YmMobDd6E
3 changed files with 9 additions and 12 deletions

View File

@ -30,6 +30,8 @@
}) })
sqls sqls
sqlx-cli sqlx-cli
tree-sitter-grammars.tree-sitter-rust
tree-sitter-grammars.tree-sitter-sql
]; ];
}; };
}); });

View File

@ -56,7 +56,7 @@ fn generate_update_query(
let update_columns = fields let update_columns = fields
.iter() .iter()
.enumerate() .enumerate()
.map(|(i, &field)| format!("{} = ${}", field.ident, i + 1)) .map(|(i, field)| format!("{} = ${}", field.ident, i + 1))
.collect::<Vec<String>>() .collect::<Vec<String>>()
.join(", "); .join(", ");
let update_string = format!( 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 { fn generate_delete_query(table: &str, id: &GeormField) -> proc_macro2::TokenStream {
let delete_string = format!("DELETE FROM {table} WHERE {} = $1", id.ident); let delete_string = format!("DELETE FROM {table} WHERE {} = $1", id.ident);
let ty = &id.ty; let ty = &id.ty;

View File

@ -47,21 +47,12 @@ pub trait Georm<Id> {
/// ///
/// # Errors /// # Errors
/// Returns any error Postgres may have encountered /// Returns any error Postgres may have encountered
fn create_or_update( fn upsert(
&self, &self,
pool: &sqlx::PgPool, pool: &sqlx::PgPool,
) -> impl ::std::future::Future<Output = sqlx::Result<Self>> ) -> impl ::std::future::Future<Output = sqlx::Result<Self>>
where where
Self: Sized, Self: Sized;
{
async {
if Self::find(pool, self.get_id()).await?.is_some() {
self.update(pool).await
} else {
self.create(pool).await
}
}
}
/// Delete the entity from the database if it exists. /// Delete the entity from the database if it exists.
/// ///