1 #[cfg(feature = "with-deprecated")] 2 use query_builder::locking_clause::ForUpdate; 3 use query_builder::AsQuery; 4 use query_source::Table; 5 6 /// The `for_update` method 7 /// 8 /// This trait should not be relied on directly by most apps. Its behavior is 9 /// provided by [`QueryDsl`]. However, you may need a where clause on this trait 10 /// to call `for_update` from generic code. 11 /// 12 /// [`QueryDsl`]: ../trait.QueryDsl.html 13 #[cfg(feature = "with-deprecated")] 14 #[deprecated(since = "1.3.0", note = "use `LockingDsl<ForUpdate>` instead")] 15 pub trait ForUpdateDsl { 16 /// The type returned by `for_update`. See [`dsl::ForUpdate`] for 17 /// convenient access to this type. 18 /// 19 /// [`dsl::ForUpdate`]: ../../dsl/type.ForUpdate.html 20 type Output; 21 22 /// See the trait level documentation for_update(self) -> Self::Output23 fn for_update(self) -> Self::Output; 24 } 25 26 #[cfg(feature = "with-deprecated")] 27 #[allow(deprecated)] 28 impl<T> ForUpdateDsl for T 29 where 30 T: LockingDsl<ForUpdate>, 31 { 32 type Output = <T as LockingDsl<ForUpdate>>::Output; 33 for_update(self) -> Self::Output34 fn for_update(self) -> Self::Output { 35 self.with_lock(ForUpdate) 36 } 37 } 38 39 /// Methods related to locking select statements 40 /// 41 /// This trait should not be relied on directly by most apps. Its behavior is 42 /// provided by [`QueryDsl`]. However, you may need a where clause on this trait 43 /// to call `for_update` from generic code. 44 /// 45 /// [`QueryDsl`]: ../trait.QueryDsl.html 46 pub trait LockingDsl<Lock> { 47 /// The type returned by `set_lock`. See [`dsl::ForUpdate`] and friends for 48 /// convenient access to this type. 49 /// 50 /// [`dsl::ForUpdate`]: ../../dsl/type.ForUpdate.html 51 type Output; 52 53 /// See the trait level documentation with_lock(self, lock: Lock) -> Self::Output54 fn with_lock(self, lock: Lock) -> Self::Output; 55 } 56 57 impl<T, Lock> LockingDsl<Lock> for T 58 where 59 T: Table + AsQuery, 60 T::Query: LockingDsl<Lock>, 61 { 62 type Output = <T::Query as LockingDsl<Lock>>::Output; 63 with_lock(self, lock: Lock) -> Self::Output64 fn with_lock(self, lock: Lock) -> Self::Output { 65 self.as_query().with_lock(lock) 66 } 67 } 68 69 /// Methods related to modifiers on locking select statements 70 /// 71 /// This trait should not be relied on directly by most apps. Its behavior is 72 /// provided by [`QueryDsl`]. However, you may need a where clause on this trait 73 /// to call `skip_locked` from generic code. 74 /// 75 /// [`QueryDsl`]: ../trait.QueryDsl.html 76 pub trait ModifyLockDsl<Modifier> { 77 /// The type returned by `modify_lock`. See [`dsl::SkipLocked`] and friends 78 /// for convenient access to this type. 79 /// 80 /// [`dsl::SkipLocked`]: ../../dsl/type.SkipLocked.html 81 type Output; 82 83 /// See the trait level documentation modify_lock(self, modifier: Modifier) -> Self::Output84 fn modify_lock(self, modifier: Modifier) -> Self::Output; 85 } 86