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
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
.iter()
.enumerate()
.map(|(i, &field)| format!("{} = ${}", field.ident, i + 1))
.map(|(i, field)| format!("{} = ${}", field.ident, i + 1))
.collect::<Vec<String>>()
.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;

View File

@ -47,21 +47,12 @@ pub trait Georm<Id> {
///
/// # Errors
/// Returns any error Postgres may have encountered
fn create_or_update(
fn upsert(
&self,
pool: &sqlx::PgPool,
) -> impl ::std::future::Future<Output = sqlx::Result<Self>>
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.
///