Skip to content

Commit 6f573ed

Browse files
committed
Restructure InternalSaveChangesDsl
This allows this trait to be implemented outside of diesel. Also reexport this trait as hidden api. (It is only usfull if someone tries to implement a additional backend) Fix diesel-rs#1736
1 parent 3ee24d3 commit 6f573ed

2 files changed

Lines changed: 19 additions & 16 deletions

File tree

diesel/src/query_dsl/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ pub use self::join_dsl::{InternalJoinDsl, JoinOnDsl, JoinWithImplicitOnClause};
4949
#[doc(hidden)]
5050
pub use self::load_dsl::LoadQuery;
5151
pub use self::save_changes_dsl::SaveChangesDsl;
52+
#[doc(hidden)]
53+
pub use self::save_changes_dsl::InternalSaveChangesDsl;
5254

5355
/// The traits used by `QueryDsl`.
5456
///

diesel/src/query_dsl/save_changes_dsl.rs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,57 +12,58 @@ use query_dsl::methods::{ExecuteDsl, FindDsl};
1212
use query_dsl::{LoadQuery, RunQueryDsl};
1313
use 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")]
2021
use 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
2425
where
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")]
3435
use 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
3839
where
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")]
5253
use 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
5657
where
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

Comments
 (0)