Skip to content

Commit 210343c

Browse files
committed
implement update_row to complete the generic CRUD operations for the DB. The proc_macros can now be removed
1 parent 2eb9dda commit 210343c

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

backend/db/src/calls/mod.rs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,14 @@ use diesel::query_source::QuerySource;
4949
use diesel::query_dsl::filter_dsl::FilterDsl;
5050
use std::fmt::Debug;
5151
use crate::calls::user::NewUser;
52+
use diesel::query_builder::UpdateStatement;
53+
use diesel::helper_types::Update;
54+
use crate::calls::article::ArticleChangeset;
55+
use crate::Article;
5256

57+
58+
/// Generic function for getting a whole row from a given table.
59+
#[inline(always)]
5360
pub fn get_row<'a, Model, Table>(table: Table, uuid: Uuid, conn: &PgConnection) -> Result<Model, Error>
5461
where
5562
Table: FindDsl<Uuid>,
@@ -65,17 +72,13 @@ fn get_user(uuid: UserUuid,conn: &PgConnection) -> Result<User, Error> {
6572
}
6673

6774

75+
/// Generic function for deleting a row from a given table.
76+
#[inline(always)]
6877
pub fn delete_row<'a, Model, Tab>(table: Tab, uuid: Uuid, conn: &PgConnection) -> Result<Model, Error>
6978
where
7079

7180
Tab: FindDsl<Uuid> + Table ,
7281
<Tab as FindDsl<Uuid>>::Output: IntoUpdateTarget,
73-
// For execute
74-
// <<<Tab as diesel::query_dsl::filter_dsl::FindDsl<uuid::Uuid>>::Output as diesel::associations::HasTable>::Table as diesel::QuerySource>::FromClause: QueryFragment<Pg>,
75-
// <<Tab as diesel::query_dsl::filter_dsl::FindDsl<uuid::Uuid>>::Output as diesel::query_builder::IntoUpdateTarget>::WhereClause: QueryId,
76-
// <<Tab as diesel::query_dsl::filter_dsl::FindDsl<uuid::Uuid>>::Output as diesel::associations::HasTable>::Table: QueryId,
77-
// <<Tab as diesel::query_dsl::filter_dsl::FindDsl<uuid::Uuid>>::Output as diesel::query_builder::IntoUpdateTarget>::WhereClause: QueryFragment<Pg>,
78-
// for get result
7982
Pg: HasSqlType<<<<<Tab as FindDsl<Uuid>>::Output as HasTable>::Table as Table>::AllColumns as Expression>::SqlType>,
8083
<<<Tab as FindDsl<Uuid>>::Output as HasTable>::Table as Table>::AllColumns: QueryId,
8184
<<<Tab as FindDsl<Uuid>>::Output as HasTable>::Table as Table>::AllColumns: QueryFragment<Pg>,
@@ -90,21 +93,26 @@ fn delete_user(uuid: UserUuid, conn: &PgConnection) -> Result<User, Error> {
9093
}
9194

9295

93-
//fn update_row<'a, Chg: 'a, Tab>(table: Tab, changeset: &Chg, conn: &PgConnection) -> ()
94-
//where
95-
// &'a Chg: AsChangeset<Target = Tab>,
96-
// Tab: QuerySource + Table + HasTable,
97-
//// Tab: FilterDsl,
98-
// &'a Chg: IntoUpdateTarget,
99-
// <<<Tab as HasTable>::Table as AsQuery>::Query as FilterDsl<Chg>>::Output: IntoUpdateTarget
100-
//// Tab as FilterDsl
101-
//// UpdateStatement<_>: LoadQuery<PgConnection, Model>
102-
//{
103-
// diesel::update(table)
104-
// .set(changeset);
105-
//}
96+
/// Generic function for updating a row for a given table with a given changeset.
97+
#[inline(always)]
98+
fn update_row<'a, Model, Chg, Tab>(table: Tab, changeset: Chg, conn: &PgConnection) -> Result<Model, Error>
99+
where
100+
Chg: AsChangeset<Target=<Tab as HasTable>::Table>,
101+
Tab: QuerySource + IntoUpdateTarget,
102+
Update<Tab, Chg>: LoadQuery<PgConnection, Model>
103+
{
104+
diesel::update(table)
105+
.set(changeset)
106+
.get_result::<Model>(conn)
107+
}
108+
109+
fn update_article(changeset: ArticleChangeset, conn: &PgConnection) -> Result<Article, Error> {
110+
update_row::<Article, ArticleChangeset,_>(schema::articles::table, changeset, conn)
111+
}
106112

107113

114+
/// Generic function for creating a row for a given table with a given "new" struct for that row type.
115+
#[inline(always)]
108116
fn create_row<Model, NewModel, Tab>(table: Tab, insert: NewModel, conn: &PgConnection) -> Result<Model, Error>
109117
where
110118
NewModel: Insertable<Tab>,
@@ -121,7 +129,6 @@ where
121129
}
122130

123131

124-
125132
fn create_user(new_user: NewUser, conn: &PgConnection) -> Result<User, Error> {
126133
create_row::<User, NewUser,_>(schema::users::table, new_user, conn)
127134
}

0 commit comments

Comments
 (0)