@@ -12,57 +12,58 @@ use query_dsl::methods::{ExecuteDsl, FindDsl};
1212use query_dsl:: { LoadQuery , RunQueryDsl } ;
1313use result:: QueryResult ;
1414
15- pub trait InternalSaveChangesDsl < Conn , T > : Sized {
16- fn internal_save_changes ( self , connection : & Conn ) -> QueryResult < T > ;
15+ #[ doc( hidden) ]
16+ pub trait InternalSaveChangesDsl < T , U > {
17+ fn internal_save_changes ( & self , changeset : T ) -> QueryResult < U > ;
1718}
1819
1920#[ cfg( feature = "postgres" ) ]
2021use pg:: PgConnection ;
2122
2223#[ cfg( feature = "postgres" ) ]
23- impl < T , U > InternalSaveChangesDsl < PgConnection , U > for T
24+ impl < T , U > InternalSaveChangesDsl < T , U > for PgConnection
2425where
2526 T : Copy + AsChangeset < Target = <T as HasTable >:: Table > + IntoUpdateTarget ,
2627 Update < T , T > : LoadQuery < PgConnection , U > ,
2728{
28- fn internal_save_changes ( self , conn : & PgConnection ) -> QueryResult < U > {
29- :: update ( self ) . set ( self ) . get_result ( conn )
29+ fn internal_save_changes ( & self , changeset : T ) -> QueryResult < U > {
30+ :: update ( changeset ) . set ( changeset ) . get_result ( self )
3031 }
3132}
3233
3334#[ cfg( feature = "sqlite" ) ]
3435use sqlite:: SqliteConnection ;
3536
3637#[ cfg( feature = "sqlite" ) ]
37- impl < T , U > InternalSaveChangesDsl < SqliteConnection , U > for T
38+ impl < T , U > InternalSaveChangesDsl < T , U > for SqliteConnection
3839where
3940 T : Copy + Identifiable ,
4041 T : AsChangeset < Target = <T as HasTable >:: Table > + IntoUpdateTarget ,
4142 T :: Table : FindDsl < T :: Id > ,
4243 Update < T , T > : ExecuteDsl < SqliteConnection > ,
4344 Find < T :: Table , T :: Id > : LoadQuery < SqliteConnection , U > ,
4445{
45- fn internal_save_changes ( self , conn : & SqliteConnection ) -> QueryResult < U > {
46- try!( :: update ( self ) . set ( self ) . execute ( conn ) ) ;
47- T :: table ( ) . find ( self . id ( ) ) . get_result ( conn )
46+ fn internal_save_changes ( & self , changeset : T ) -> QueryResult < U > {
47+ try!( :: update ( changeset ) . set ( changeset ) . execute ( self ) ) ;
48+ T :: table ( ) . find ( changeset . id ( ) ) . get_result ( self )
4849 }
4950}
5051
5152#[ cfg( feature = "mysql" ) ]
5253use mysql:: MysqlConnection ;
5354
5455#[ cfg( feature = "mysql" ) ]
55- impl < T , U > InternalSaveChangesDsl < MysqlConnection , U > for T
56+ impl < T , U > InternalSaveChangesDsl < T , U > for MysqlConnection
5657where
5758 T : Copy + Identifiable ,
5859 T : AsChangeset < Target = <T as HasTable >:: Table > + IntoUpdateTarget ,
5960 T :: Table : FindDsl < T :: Id > ,
6061 Update < T , T > : ExecuteDsl < MysqlConnection > ,
6162 Find < T :: Table , T :: Id > : LoadQuery < MysqlConnection , U > ,
6263{
63- fn internal_save_changes ( self , conn : & MysqlConnection ) -> QueryResult < U > {
64- try!( :: update ( self ) . set ( self ) . execute ( conn ) ) ;
65- T :: table ( ) . find ( self . id ( ) ) . get_result ( conn )
64+ fn internal_save_changes ( & self , changeset : T ) -> QueryResult < U > {
65+ try!( :: update ( changeset ) . set ( changeset ) . execute ( self ) ) ;
66+ T :: table ( ) . find ( changeset . id ( ) ) . get_result ( self )
6667 }
6768}
6869
@@ -114,13 +115,13 @@ where
114115/// # Ok(())
115116/// # }
116117/// ```
117- pub trait SaveChangesDsl < Conn > {
118+ pub trait SaveChangesDsl < Conn > : Sized {
118119 /// See the trait documentation.
119120 fn save_changes < T > ( self , connection : & Conn ) -> QueryResult < T >
120121 where
121- Self : InternalSaveChangesDsl < Conn , T > ,
122+ Conn : InternalSaveChangesDsl < Self , T > ,
122123 {
123- self . internal_save_changes ( connection )
124+ connection . internal_save_changes ( self )
124125 }
125126}
126127
0 commit comments