Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better encapsulate diesel's connection to ease the split of editoast_models #8712

Merged
merged 1 commit into from
Sep 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions editoast/editoast_derive/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ fn create_functions(config: &Config) -> TokenStream {
quote! {
#[async_trait::async_trait]
impl crate::models::Create for #model_name {
async fn create_conn(self, conn: &mut editoast_models::DbConnection) -> crate::error::Result<Self> {
async fn create_conn(self, conn: &mut editoast_models::DieselConnection) -> crate::error::Result<Self> {
use #table::table;
use diesel_async::RunQueryDsl;

Expand Down Expand Up @@ -126,7 +126,7 @@ fn retrieve_functions(config: &Config) -> TokenStream {
quote! {
#[async_trait::async_trait]
impl crate::models::Retrieve for #model_name {
async fn retrieve_conn(conn: &mut editoast_models::DbConnection, obj_id: i64) -> crate::error::Result<Option<Self>> {
async fn retrieve_conn(conn: &mut editoast_models::DieselConnection, obj_id: i64) -> crate::error::Result<Option<Self>> {
use #table::table;
use #table::dsl;
use diesel_async::RunQueryDsl;
Expand Down Expand Up @@ -174,7 +174,7 @@ fn delete_functions(config: &Config) -> TokenStream {
quote! {
#[async_trait::async_trait]
impl crate::models::Delete for #model_name {
async fn delete_conn(conn: &mut editoast_models::DbConnection, obj_id: i64) -> crate::error::Result<bool> {
async fn delete_conn(conn: &mut editoast_models::DieselConnection, obj_id: i64) -> crate::error::Result<bool> {
use #table::table;
use #table::dsl;
use diesel_async::RunQueryDsl;
Expand Down Expand Up @@ -207,7 +207,7 @@ fn update_functions(config: &Config) -> TokenStream {
quote! {
#[async_trait::async_trait]
impl crate::models::Update for #model_name {
async fn update_conn(self, conn: &mut editoast_models::DbConnection, obj_id: i64) -> crate::error::Result<Option<Self>> {
async fn update_conn(self, conn: &mut editoast_models::DieselConnection, obj_id: i64) -> crate::error::Result<Option<Self>> {
use #table::table;

match diesel::update(table.find(obj_id)).set(&self).get_result(conn).await
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ impl ToTokens for CountImpl {
use diesel::QueryDsl;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
use std::ops::DerefMut;

let mut query = #table_mod::table.select(diesel::dsl::count_star()).into_boxed();

Expand All @@ -48,7 +49,7 @@ impl ToTokens for CountImpl {
}
}

Ok(query.get_result::<i64>(conn).await? as u64)
Ok(query.get_result::<i64>(conn.write().await.deref_mut()).await? as u64)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ impl ToTokens for CreateBatchImpl {
) -> crate::error::Result<C> {
use crate::modelsv2::Model;
use #table_mod::dsl;
use std::ops::DerefMut;
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
Expand All @@ -50,7 +51,7 @@ impl ToTokens for CreateBatchImpl {
chunk => {
diesel::insert_into(dsl::#table_name)
.values(chunk)
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await
.map(|s| s.map_ok(<#model as Model>::from_row).try_collect::<Vec<_>>())?
.await?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ impl ToTokens for CreateBatchWithKeyImpl {
) -> crate::error::Result<C> {
use crate::models::Identifiable;
use crate::modelsv2::Model;
use std::ops::DerefMut;
use #table_mod::dsl;
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
Expand All @@ -56,7 +57,7 @@ impl ToTokens for CreateBatchWithKeyImpl {
chunk => {
diesel::insert_into(dsl::#table_name)
.values(chunk)
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await
.map(|s| {
s.map_ok(|row| {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ impl ToTokens for CreateImpl {
conn: &mut editoast_models::DbConnection,
) -> crate::error::Result<#model> {
use diesel_async::RunQueryDsl;
use std::ops::DerefMut;
diesel::insert_into(#table_mod::table)
.values(&self)
.get_result::<#row>(conn)
.get_result::<#row>(conn.write().await.deref_mut())
.await
.map(Into::into)
.map_err(Into::into)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ impl ToTokens for DeleteBatchImpl {
use #table_mod::dsl;
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use std::ops::DerefMut;
let ids = ids.into_iter().collect::<Vec<_>>();
tracing::Span::current().record("query_ids", tracing::field::debug(&ids));
let counts = crate::chunked_for_libpq! {
Expand All @@ -49,7 +50,7 @@ impl ToTokens for DeleteBatchImpl {
for #id_ident in chunk.into_iter() {
query = query.or_filter(#filters);
}
query.execute(conn).await?
query.execute(conn.write().await.deref_mut()).await?
}
};
Ok(counts.into_iter().sum())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ impl ToTokens for DeleteImpl {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use #table_mod::dsl;
use std::ops::DerefMut;
let id = self.#primary_key;
diesel::delete(#table_mod::table.find(id))
.execute(conn)
.execute(conn.write().await.deref_mut())
.await
.map(|n| n == 1)
.map_err(Into::into)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,11 @@ impl ToTokens for DeleteStaticImpl {
) -> crate::error::Result<bool> {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use std::ops::DerefMut;
use #table_mod::dsl;
tracing::Span::current().record("query_id", tracing::field::debug(#id_ref_ident));
diesel::delete(dsl::#table_name.#(filter(#eqs)).*)
.execute(conn)
.execute(conn.write().await.deref_mut())
.await
.map(|n| n == 1)
.map_err(Into::into)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,11 @@ impl ToTokens for ExistsImpl {
) -> crate::error::Result<bool> {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use std::ops::DerefMut;
use #table_mod::dsl;
tracing::Span::current().record("query_id", tracing::field::debug(#id_ref_ident));
diesel::select(diesel::dsl::exists(dsl::#table_name.#(filter(#eqs)).*))
.get_result(conn)
.get_result(conn.write().await.deref_mut())
.await
.map_err(Into::into)
}
Expand Down
3 changes: 2 additions & 1 deletion editoast/editoast_derive/src/modelv2/codegen/list_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ impl ToTokens for ListImpl {
use diesel::QueryDsl;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
use std::ops::DerefMut;

let mut query = #table_mod::table.into_boxed();

Expand All @@ -58,7 +59,7 @@ impl ToTokens for ListImpl {
}

let results: Vec<#model> = query
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await?
.map_ok(<#model as crate::modelsv2::prelude::Model>::from_row)
.try_collect()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ impl ToTokens for RetrieveBatchImpl {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
use std::ops::DerefMut;
let ids = ids.into_iter().collect::<Vec<_>>();
tracing::Span::current().record("query_ids", tracing::field::debug(&ids));
Ok(crate::chunked_for_libpq! {
Expand All @@ -62,7 +63,7 @@ impl ToTokens for RetrieveBatchImpl {
query = query.or_filter(#filters);
}
query
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await
.map(|s| s.map_ok(<#model as Model>::from_row).try_collect::<Vec<_>>())?
.await?
Expand All @@ -84,6 +85,7 @@ impl ToTokens for RetrieveBatchImpl {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
use std::ops::DerefMut;
let ids = ids.into_iter().collect::<Vec<_>>();
tracing::Span::current().record("query_ids", tracing::field::debug(&ids));
Ok(crate::chunked_for_libpq! {
Expand All @@ -97,7 +99,7 @@ impl ToTokens for RetrieveBatchImpl {
query = query.or_filter(#filters);
}
query
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await
.map(|s| {
s.map_ok(|row| {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@ impl ToTokens for RetrieveImpl {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use #table_mod::dsl;
use std::ops::DerefMut;
tracing::Span::current().record("query_id", tracing::field::debug(#id_ref_ident));
dsl::#table_name
.#(filter(#eqs)).*
.first::<#row>(conn)
.first::<#row>(conn.write().await.deref_mut())
.await
.map(Into::into)
.optional()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ impl ToTokens for UpdateBatchImpl {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
use std::ops::DerefMut;
let ids = ids.into_iter().collect::<Vec<_>>();
tracing::Span::current().record("query_ids", tracing::field::debug(&ids));
Ok(crate::chunked_for_libpq! {
Expand All @@ -69,7 +70,7 @@ impl ToTokens for UpdateBatchImpl {
diesel::update(dsl::#table_name)
.filter(dsl::#primary_key_column.eq_any(query))
.set(&self)
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await
.map(|s| s.map_ok(<#model as Model>::from_row).try_collect::<Vec<_>>())?
.await?
Expand All @@ -89,6 +90,7 @@ impl ToTokens for UpdateBatchImpl {
use crate::models::Identifiable;
use crate::modelsv2::Model;
use #table_mod::dsl;
use std::ops::DerefMut;
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use futures_util::stream::TryStreamExt;
Expand All @@ -109,7 +111,7 @@ impl ToTokens for UpdateBatchImpl {
diesel::update(dsl::#table_name)
.filter(dsl::#primary_key_column.eq_any(query))
.set(&self)
.load_stream::<#row>(conn)
.load_stream::<#row>(conn.write().await.deref_mut())
.await
.map(|s| {
s.map_ok(|row| {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,12 @@ impl ToTokens for UpdateImpl {
) -> crate::error::Result<Option<#model>> {
use diesel::prelude::*;
use diesel_async::RunQueryDsl;
use std::ops::DerefMut;
use #table_mod::dsl;
tracing::Span::current().record("query_id", tracing::field::debug(#id_ref_ident));
diesel::update(dsl::#table_name.#(filter(#eqs)).*)
.set(&self)
.get_result::<#row>(conn)
.get_result::<#row>(conn.write().await.deref_mut())
.await
.map(Into::into)
.optional()
Expand Down
Loading
Loading