@@ -49,7 +49,14 @@ use diesel::query_source::QuerySource;
4949use diesel:: query_dsl:: filter_dsl:: FilterDsl ;
5050use std:: fmt:: Debug ;
5151use 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) ]
5360pub 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) ]
6877pub 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) ]
108116fn create_row < Model , NewModel , Tab > ( table : Tab , insert : NewModel , conn : & PgConnection ) -> Result < Model , Error >
109117where
110118 NewModel : Insertable < Tab > ,
@@ -121,7 +129,6 @@ where
121129}
122130
123131
124-
125132fn 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