Rollup merge of #105081 - weiznich:regression_test_for_104322, r=compiler-errors
Add a regression test for #104322 r? ``@compiler-errors``
This commit is contained in:
commit
6c4b5a2bdb
1 changed files with 80 additions and 0 deletions
80
src/test/ui/traits/issue-104322.rs
Normal file
80
src/test/ui/traits/issue-104322.rs
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
// build-pass
|
||||||
|
//
|
||||||
|
// Tests that overflows do not occur in certain situations
|
||||||
|
// related to generic diesel code
|
||||||
|
|
||||||
|
use mini_diesel::*;
|
||||||
|
|
||||||
|
pub trait HandleDelete<K> {}
|
||||||
|
|
||||||
|
pub fn handle_delete<D, R>()
|
||||||
|
where
|
||||||
|
R: HasTable,
|
||||||
|
R::Table: HandleDelete<D> + 'static,
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<K, T> HandleDelete<K> for T
|
||||||
|
where
|
||||||
|
T: Table + HasTable<Table = T> + 'static,
|
||||||
|
K: 'static,
|
||||||
|
&'static K: Identifiable<Table = T>,
|
||||||
|
T::PrimaryKey: EqAll<<&'static K as Identifiable>::Id>,
|
||||||
|
T::Query: FilterDsl<<T::PrimaryKey as EqAll<<&'static K as Identifiable>::Id>>::Output>,
|
||||||
|
Filter<T::Query, <T::PrimaryKey as EqAll<<&'static K as Identifiable>::Id>>::Output>:
|
||||||
|
IntoUpdateTarget<Table = T>,
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
mod mini_diesel {
|
||||||
|
pub trait HasTable {
|
||||||
|
type Table: Table;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait Identifiable: HasTable {
|
||||||
|
type Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait EqAll<Rhs> {
|
||||||
|
type Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait IntoUpdateTarget: HasTable {
|
||||||
|
type WhereClause;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait Query {
|
||||||
|
type SqlType;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait AsQuery {
|
||||||
|
type Query: Query;
|
||||||
|
}
|
||||||
|
impl<T: Query> AsQuery for T {
|
||||||
|
type Query = Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait FilterDsl<Predicate> {
|
||||||
|
type Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T, Predicate> FilterDsl<Predicate> for T
|
||||||
|
where
|
||||||
|
T: Table,
|
||||||
|
T::Query: FilterDsl<Predicate>,
|
||||||
|
{
|
||||||
|
type Output = Filter<T::Query, Predicate>;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait QuerySource {
|
||||||
|
type FromClause;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait Table: QuerySource + AsQuery + Sized {
|
||||||
|
type PrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type Filter<Source, Predicate> = <Source as FilterDsl<Predicate>>::Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Reference in a new issue