// #1357
impl<
    'a,
    Select,
    From,
    Distinct,
    Where,
    Order,
    Limit,
    Offset,
    Groupby,
    DB,
> InternalBoxedDsl<'a, DB>
    for SelectStatement<
        Select,
        From,
        Distinct,
        Where,
        Order,
        Limit,
        Offset,
        GroupBy,
    > where
        DB: Backend,
        Select: QueryFragment<DB> + SelectableExpression<From> + 'a,
        Distinct: QueryFragment<DB> + 'a,
        Where: Into<Option<Box<QueryFragment<DB> + 'a>>>,
        Order: QueryFragment<DB> + 'a,
        Limit: QueryFragment<DB> + 'a,
        Offset: QueryFragment<DB> + 'a,
{
    type Output = BoxedSelectStatement<'a, Select::SqlTypeForSelect, From, DB>;

    fn internal_into_boxed(self) -> Self::Output {
        BoxedSelectStatement::new(
            Box::new(self.select),
            self.from,
            Box::new(self.distinct),
            self.where_clause.into(),
            Box::new(self.order),
            Box::new(self.limit),
            Box::new(self.offset),
        )
    }
}

// #1369
impl<
    ExcessivelyLongGenericName,
      ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> Foo for Bar {
    fn foo() {}
}
impl Foo<
    ExcessivelyLongGenericName,
      ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> for Bar {
    fn foo() {}
}
impl<
    ExcessivelyLongGenericName,
    ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> Foo<
    ExcessivelyLongGenericName,
      ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> for Bar {
    fn foo() {}
}
impl<
    ExcessivelyLongGenericName,
      ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> Foo for Bar<
    ExcessivelyLongGenericName,
    ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> {
    fn foo() {}
}
impl Foo<
    ExcessivelyLongGenericName,
      ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> for Bar<
    ExcessivelyLongGenericName,
    ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> {
    fn foo() {}
}
impl<
    ExcessivelyLongGenericName,
      ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> Foo<
    ExcessivelyLongGenericName,
    ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> for Bar<
    ExcessivelyLongGenericName,
    ExcessivelyLongGenericName,
    AnotherExcessivelyLongGenericName,
> {
    fn foo() {}
}

// #1689
impl<M, S, F, X> SubSelectDirect<M, S, F, X>
    where
    M: select::Selector,
    S: event::Stream,
    F: for<'t> FnMut(transform::Api<
            't,
        Stream<ContentStream<S>>,
        >)
                     -> transform::Api<'t, X>,
    X: event::Stream,
{
}
