Skip to main content

diesel/type_impls/
tuples.rs

1use crate::associations::BelongsTo;
2use crate::backend::Backend;
3use crate::deserialize::{
4    self, FromSqlRow, FromStaticSqlRow, Queryable, SqlTypeOrSelectable, StaticallySizedRow,
5};
6use crate::expression::{
7    AppearsOnTable, Expression, IsContainedInGroupBy, MixedAggregates, QueryMetadata, Selectable,
8    SelectableExpression, TypedExpressionType, ValidGrouping, is_contained_in_group_by,
9};
10use crate::insertable::{CanInsertInSingleQuery, InsertValues, Insertable, InsertableOptionHelper};
11use crate::query_builder::*;
12use crate::query_dsl::load_dsl::CompatibleType;
13use crate::query_source::*;
14use crate::result::QueryResult;
15use crate::row::*;
16use crate::sql_types::{HasSqlType, IntoNullable, Nullable, OneIsNullable, SqlType};
17use crate::util::{TupleAppend, TupleSize};
18use alloc::vec::Vec;
19
20impl<T> TupleSize for T
21where
22    T: crate::sql_types::SingleValue,
23{
24    const SIZE: usize = 1;
25}
26
27macro_rules! fake_variadic {
28    (1i32 -> $($tt: tt)*) => {
29        #[cfg_attr(diesel_docsrs, doc(fake_variadic))]
30        $($tt)*
31    };
32    ($idx:tt -> $($tt: tt)*) => {
33        #[cfg_attr(diesel_docsrs, doc(hidden))]
34        $($tt)*
35    };
36}
37
38macro_rules! tuple_impls {
39    ($(
40        $Tuple:tt {
41            $(($idx:tt) -> $T:ident, $ST:ident, $TT:ident,)+
42        }
43    )+) => {
44        $(
45            fake_variadic!{
46                $Tuple ->
47                impl<$($T),+, __DB> HasSqlType<($($T,)+)> for __DB where
48                    $(__DB: HasSqlType<$T>),+,
49                    __DB: Backend,
50                {
51                    fn metadata(_: &mut __DB::MetadataLookup) -> __DB::TypeMetadata {
52                        unreachable!("Tuples should never implement `ToSql` directly");
53                    }
54                }
55            }
56
57            impl_from_sql_row!(($($T,)+), ($($ST,)+));
58
59
60            fake_variadic! {
61                $Tuple ->
62                #[diagnostic::do_not_recommend]
63                impl<$($T: Expression),+> Expression for ($($T,)+)
64                where ($($T::SqlType, )*): TypedExpressionType
65                {
66                    type SqlType = ($(<$T as Expression>::SqlType,)+);
67                }
68            }
69            fake_variadic! {
70                $Tuple -> impl<$($T: TypedExpressionType,)*> TypedExpressionType for ($($T,)*) {}
71            }
72            fake_variadic! {
73                $Tuple ->
74                impl<$($T: SqlType + TypedExpressionType,)*> TypedExpressionType for Nullable<($($T,)*)>
75                where ($($T,)*): SqlType
76                {
77                }
78            }
79            fake_variadic! {
80                $Tuple ->
81                impl<$($T: SqlType,)*> IntoNullable for ($($T,)*)
82                where Self: SqlType,
83                {
84                    type Nullable = Nullable<($($T,)*)>;
85                }
86            }
87
88            fake_variadic! {
89                $Tuple ->
90                impl<$($T,)+ __DB> Selectable<__DB> for ($($T,)+)
91                where
92                    __DB: Backend,
93                $($T: Selectable<__DB>),+,
94                {
95                    type SelectExpression = ($($T::SelectExpression,)+);
96
97                    fn construct_selection() -> Self::SelectExpression {
98                        ($($T::construct_selection(),)+)
99                    }
100                }
101            }
102
103            fake_variadic! {
104                $Tuple ->
105                impl<$($T: QueryFragment<__DB>),+, __DB: Backend> QueryFragment<__DB> for ($($T,)+) {
106                    #[allow(unused_assignments)]
107                    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, __DB>) -> QueryResult<()>
108                    {
109                        let mut needs_comma = false;
110                        $(
111                            if !self.$idx.is_noop(out.backend())? {
112                                if needs_comma {
113                                    out.push_sql(", ");
114                                }
115                                self.$idx.walk_ast(out.reborrow())?;
116                                needs_comma = true;
117                            }
118                        )+
119                            Ok(())
120                    }
121                }
122            }
123
124            // cannot use `#[diagnostic::do_not_recommend]` here yet to hide tuple impls
125            // as this makes the error message worse (not saying which column is problematic)
126            impl<$($T,)+ Tab> ColumnList for ($($T,)+)
127            where
128                $($T: ColumnList<Table = Tab>,)+
129            {
130                type Table = Tab;
131
132                fn walk_ast<__DB: Backend>(&self, mut out: AstPass<'_, '_, __DB>) -> QueryResult<()> {
133                    $(
134                        if $idx != 0 {
135                            out.push_sql(", ");
136                        }
137                        self.$idx.walk_ast(out.reborrow())?;
138                    )+
139                    Ok(())
140                }
141            }
142
143            fake_variadic! {
144                $Tuple ->
145                impl<$($T: QueryId),+> QueryId for ($($T,)+) {
146                    type QueryId = ($($T::QueryId,)+);
147
148                    const HAS_STATIC_QUERY_ID: bool = $($T::HAS_STATIC_QUERY_ID &&)+ true;
149                }
150            }
151
152            impl_valid_grouping_for_tuple_of_columns!($($T,)*);
153
154            impl<$($T,)+ Tab> UndecoratedInsertRecord<Tab> for ($($T,)+)
155            where
156                $($T: UndecoratedInsertRecord<Tab>,)+
157            {
158            }
159
160            impl<$($T,)+ __DB> CanInsertInSingleQuery<__DB> for ($($T,)+)
161            where
162                __DB: Backend,
163                $($T: CanInsertInSingleQuery<__DB>,)+
164            {
165                fn rows_to_insert(&self) -> Option<usize> {
166                    $(debug_assert_eq!(self.$idx.rows_to_insert(), Some(1));)+
167                    Some(1)
168                }
169            }
170
171            fake_variadic! {
172                $Tuple ->
173                impl<$($T,)+ $($ST,)+ Tab> Insertable<Tab> for ($($T,)+)
174                where
175                    $($T: Insertable<Tab, Values = ValuesClause<$ST, Tab>>,)+
176                {
177                    type Values = ValuesClause<($($ST,)+), Tab>;
178
179                    fn values(self) -> Self::Values {
180                        ValuesClause::new(($(self.$idx.values().values,)+))
181                    }
182                }
183            }
184
185            // that isn't supported by the derive yet?
186            // fake_variadic! {
187            //     $Tuple ->
188                impl<'a, $($T,)+ Tab> Insertable<Tab> for &'a ($($T,)+)
189                where
190                    ($(&'a $T,)+): Insertable<Tab>,
191                {
192                    type Values = <($(&'a $T,)+) as Insertable<Tab>>::Values;
193
194                    fn values(self) -> Self::Values {
195                        ($(&self.$idx,)+).values()
196                    }
197                }
198//            }
199
200            #[allow(unused_assignments)]
201            impl<$($T,)+ Tab, __DB> InsertValues<__DB, Tab> for ($($T,)+)
202            where
203                Tab: Table,
204                __DB: Backend,
205                $($T: InsertValues<__DB, Tab>,)+
206            {
207                fn column_names(&self, mut out: AstPass<'_, '_, __DB>) -> QueryResult<()> {
208                    let mut needs_comma = false;
209                    $(
210                        let noop_element = self.$idx.is_noop(out.backend())?;
211                        if !noop_element {
212                            if needs_comma {
213                                out.push_sql(", ");
214                            }
215                            self.$idx.column_names(out.reborrow())?;
216                            needs_comma = true;
217                        }
218                    )+
219                    Ok(())
220                }
221            }
222
223            impl<__T, $($ST,)* Tab> Insertable<Tab> for InsertableOptionHelper<__T, ($($ST,)*)>
224            where
225                __T: Insertable<Tab>,
226                __T::Values: Default,
227            {
228                type Values = __T::Values;
229
230                fn values(self) -> Self::Values {
231                    self.0.map(|v| v.values()).unwrap_or_default()
232                }
233            }
234
235            // not possible to use diagnostic::do_not_recommend to hide the tuple impls
236            // yet as it gives worse error messages
237            // (doesn't show anymore which tuple element doesn't implement the trait)
238            impl<$($T,)+ QS> SelectableExpression<QS> for ($($T,)+) where
239                $($T: SelectableExpression<QS>,)+
240                ($($T,)+): AppearsOnTable<QS>,
241            {
242            }
243
244            fake_variadic! {
245                $Tuple ->
246                impl<$($T,)+ QS> AppearsOnTable<QS> for ($($T,)+) where
247                    $($T: AppearsOnTable<QS>,)+
248                    ($($T,)+): Expression,
249                {
250                }
251            }
252
253            fake_variadic! {
254                $Tuple ->
255                impl<Target, $($T,)+> AsChangeset for ($($T,)+) where
256                    $($T: AsChangeset<Target=Target>,)+
257                    Target: QuerySource,
258                {
259                    type Target = Target;
260                    type Changeset = ($($T::Changeset,)+);
261
262                    fn as_changeset(self) -> Self::Changeset {
263                        ($(self.$idx.as_changeset(),)+)
264                    }
265                }
266            }
267
268            fake_variadic! {
269                $Tuple ->
270                impl<$($T,)+ Parent> BelongsTo<Parent> for ($($T,)+) where
271                    T: BelongsTo<Parent>,
272                {
273                    type ForeignKey = T::ForeignKey;
274                    type ForeignKeyColumn = T::ForeignKeyColumn;
275
276                    fn foreign_key(&self) -> Option<&Self::ForeignKey> {
277                        self.0.foreign_key()
278                    }
279
280                    fn foreign_key_column() -> Self::ForeignKeyColumn {
281                        T::foreign_key_column()
282                    }
283                }
284            }
285
286            impl<$($T,)+ Next> TupleAppend<Next> for ($($T,)+) {
287                type Output = ($($T,)+ Next);
288
289                #[allow(non_snake_case)]
290                fn tuple_append(self, next: Next) -> Self::Output {
291                    let ($($T,)+) = self;
292                    ($($T,)+ next)
293                }
294            }
295
296            impl_sql_type!($($T,)*);
297
298            fake_variadic! {
299                $Tuple ->
300                impl<$($T,)* __DB, $($ST,)*> Queryable<($($ST,)*), __DB> for ($($T,)*)
301                where __DB: Backend,
302                      Self: FromStaticSqlRow<($($ST,)*), __DB>,
303                {
304                    type Row = Self;
305
306                    fn build(row: Self::Row) -> deserialize::Result<Self> {
307                        Ok(row)
308                    }
309                }
310            }
311
312            // That's unfortunally not supported yet
313            // fake_variadic! {
314            //     $Tuple ->
315                impl<__T, $($ST,)*  __DB> FromStaticSqlRow<Nullable<($($ST,)*)>, __DB> for Option<__T> where
316                    __DB: Backend,
317                ($($ST,)*): SqlType,
318                    __T: FromSqlRow<($($ST,)*), __DB>,
319                {
320
321                    #[allow(non_snake_case, unused_variables, unused_mut)]
322                    fn build_from_row<'a>(row: &impl Row<'a, __DB>)
323                                          -> deserialize::Result<Self>
324                    {
325                        match <__T as FromSqlRow<($($ST,)*), __DB>>::build_from_row(row) {
326                            Ok(v) => Ok(Some(v)),
327                            Err(e) if e.is::<crate::result::UnexpectedNullError>() => Ok(None),
328                            Err(e) => Err(e)
329                        }
330                    }
331                }
332            //}
333
334            // That's unfortunally not supported yet
335            // fake_variadic! {
336            //     $Tuple ->
337                impl<__T,  __DB, $($ST,)*> Queryable<Nullable<($($ST,)*)>, __DB> for Option<__T>
338                where __DB: Backend,
339                      Self: FromStaticSqlRow<Nullable<($($ST,)*)>, __DB>,
340                ($($ST,)*): SqlType,
341                {
342                    type Row = Self;
343
344                    fn build(row: Self::Row) -> deserialize::Result<Self> {
345                        Ok(row)
346                    }
347                }
348            //}
349
350            impl<$($T,)*> TupleSize for ($($T,)*)
351                where $($T: TupleSize,)*
352            {
353                const SIZE: usize = $($T::SIZE +)* 0;
354            }
355
356            impl<$($T,)*> TupleSize for Nullable<($($T,)*)>
357            where $($T: TupleSize,)*
358                  ($($T,)*): SqlType,
359            {
360                const SIZE: usize = $($T::SIZE +)* 0;
361            }
362
363            fake_variadic! {
364                $Tuple ->
365                impl<$($T,)* __DB> QueryMetadata<($($T,)*)> for __DB
366                where __DB: Backend,
367                $(__DB: QueryMetadata<$T>,)*
368                {
369                    fn row_metadata(lookup: &mut Self::MetadataLookup, row: &mut Vec<Option<__DB::TypeMetadata>>) {
370                        $(
371                            <__DB as QueryMetadata<$T>>::row_metadata(lookup, row);
372                        )*
373                    }
374                }
375            }
376
377            // That's unfortunally not supported yet
378            // fake_variadic! {
379            //     $Tuple ->
380                impl<$($T,)* __DB> QueryMetadata<Nullable<($($T,)*)>> for __DB
381                where __DB: Backend,
382                $(__DB: QueryMetadata<$T>,)*
383                {
384                    fn row_metadata(lookup: &mut Self::MetadataLookup, row: &mut Vec<Option<__DB::TypeMetadata>>) {
385                        $(
386                            <__DB as QueryMetadata<$T>>::row_metadata(lookup, row);
387                        )*
388                    }
389                }
390            //}
391
392            fake_variadic! {
393                $Tuple ->
394                impl<$($T,)* __DB> deserialize::QueryableByName< __DB> for ($($T,)*)
395                where __DB: Backend,
396                $($T: deserialize::QueryableByName<__DB>,)*
397                {
398                    fn build<'a>(row: &impl NamedRow<'a, __DB>) -> deserialize::Result<Self> {
399                        Ok(($(
400                            <$T as deserialize::QueryableByName<__DB>>::build(row)?,
401                        )*))
402                    }
403                }
404            }
405
406            #[diagnostic::do_not_recommend]
407            impl<__T, $($ST,)* __DB> CompatibleType<__T, __DB> for ($($ST,)*)
408            where
409                __DB: Backend,
410                __T: FromSqlRow<($($ST,)*), __DB>,
411            {
412                type SqlType = Self;
413            }
414
415            impl<__T, $($ST,)* __DB> CompatibleType<Option<__T>, __DB> for Nullable<($($ST,)*)>
416            where
417                __DB: Backend,
418                ($($ST,)*): CompatibleType<__T, __DB>
419            {
420                type SqlType = Nullable<<($($ST,)*) as CompatibleType<__T, __DB>>::SqlType>;
421            }
422
423            impl<$($ST,)*> SqlTypeOrSelectable for ($($ST,)*)
424            where $($ST: SqlTypeOrSelectable,)*
425            {}
426
427            impl<$($ST,)*> SqlTypeOrSelectable for Nullable<($($ST,)*)>
428            where ($($ST,)*): SqlTypeOrSelectable
429            {}
430        )+
431    }
432}
433
434macro_rules! impl_from_sql_row {
435    (($T1: ident,), ($ST1: ident,)) => {
436        #[cfg_attr(diesel_docsrs, doc(fake_variadic))]
437        impl<$T1, $ST1, __DB> crate::deserialize::FromStaticSqlRow<($ST1,), __DB> for ($T1,) where
438            __DB: Backend,
439            $ST1: CompatibleType<$T1, __DB>,
440            $T1: FromSqlRow<<$ST1 as CompatibleType<$T1, __DB>>::SqlType, __DB>,
441        {
442
443            #[allow(non_snake_case, unused_variables, unused_mut)]
444            fn build_from_row<'a>(row: &impl Row<'a, __DB>)
445                                                       -> deserialize::Result<Self>
446            {
447                Ok(($T1::build_from_row(row)?,))
448            }
449        }
450    };
451    (($T1: ident, $($T: ident,)*), ($ST1: ident, $($ST: ident,)*)) => {
452        #[cfg_attr(diesel_docsrs, doc(hidden))]
453        #[diagnostic::do_not_recommend]
454        impl<$T1, $($T,)* $($ST,)* __DB> FromSqlRow<($($ST,)* crate::sql_types::Untyped), __DB> for ($($T,)* $T1)
455        where __DB: Backend,
456              $T1: FromSqlRow<crate::sql_types::Untyped, __DB>,
457            $(
458                $T: FromSqlRow<$ST, __DB> + StaticallySizedRow<$ST, __DB>,
459        )*
460        {
461            #[allow(non_snake_case, unused_variables, unused_mut)]
462            fn build_from_row<'a>(full_row: &impl Row<'a, __DB>)
463                -> deserialize::Result<Self>
464            {
465                let field_count = full_row.field_count();
466
467                let mut static_field_count = 0;
468                $(
469                    let row = full_row.partial_row(static_field_count..static_field_count + $T::FIELD_COUNT);
470                    static_field_count += $T::FIELD_COUNT;
471                    let $T = $T::build_from_row(&row)?;
472                )*
473
474                let row = full_row.partial_row(static_field_count..field_count);
475
476                Ok(($($T,)* $T1::build_from_row(&row)?,))
477            }
478        }
479
480        #[cfg_attr(diesel_docsrs, doc(hidden))]
481        impl<$T1, $ST1, $($T,)* $($ST,)* __DB> FromStaticSqlRow<($($ST,)* $ST1,), __DB> for ($($T,)* $T1,) where
482            __DB: Backend,
483            $ST1: CompatibleType<$T1, __DB>,
484            $T1: FromSqlRow<<$ST1 as CompatibleType<$T1, __DB>>::SqlType, __DB>,
485            $(
486                $ST: CompatibleType<$T, __DB>,
487                $T: FromSqlRow<<$ST as CompatibleType<$T, __DB>>::SqlType, __DB> + StaticallySizedRow<<$ST as CompatibleType<$T, __DB>>::SqlType, __DB>,
488            )*
489
490        {
491
492            #[allow(non_snake_case, unused_variables, unused_mut)]
493            fn build_from_row<'a>(full_row: &impl Row<'a, __DB>)
494                -> deserialize::Result<Self>
495            {
496                let field_count = full_row.field_count();
497
498                let mut static_field_count = 0;
499                $(
500                    let row = full_row.partial_row(static_field_count..static_field_count + $T::FIELD_COUNT);
501                    static_field_count += $T::FIELD_COUNT;
502                    let $T = <$T as FromSqlRow<<$ST as CompatibleType<$T, __DB>>::SqlType, __DB>>::build_from_row(&row)?;
503                )*
504
505                let row = full_row.partial_row(static_field_count..field_count);
506
507                Ok(($($T,)* $T1::build_from_row(&row)?,))
508            }
509        }
510    }
511}
512
513macro_rules! impl_valid_grouping_for_tuple_of_columns {
514    ($T1: ident, $($T: ident,)+) => {
515        #[cfg_attr(diesel_docsrs, doc(hidden))]
516        impl<$T1, $($T,)* __GroupByClause> ValidGrouping<__GroupByClause> for ($T1, $($T,)*)
517        where
518            $T1: ValidGrouping<__GroupByClause>,
519            ($($T,)*): ValidGrouping<__GroupByClause>,
520            $T1::IsAggregate: MixedAggregates<<($($T,)*) as ValidGrouping<__GroupByClause>>::IsAggregate>,
521        {
522            type IsAggregate = <$T1::IsAggregate as MixedAggregates<<($($T,)*) as ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
523        }
524
525        impl<$T1, $($T,)* Col> IsContainedInGroupBy<Col> for ($T1, $($T,)*)
526        where Col: QueryRelationField,
527              ($($T,)*): IsContainedInGroupBy<Col>,
528              $T1: IsContainedInGroupBy<Col>,
529              $T1::Output: is_contained_in_group_by::IsAny<<($($T,)*) as IsContainedInGroupBy<Col>>::Output>
530        {
531            type Output = <$T1::Output as is_contained_in_group_by::IsAny<<($($T,)*) as IsContainedInGroupBy<Col>>::Output>>::Output;
532        }
533    };
534    ($T1: ident,) => {
535        impl<$T1, Col> IsContainedInGroupBy<Col> for ($T1,)
536        where Col: QueryRelationField,
537              $T1: IsContainedInGroupBy<Col>
538        {
539            type Output = <$T1 as IsContainedInGroupBy<Col>>::Output;
540        }
541
542        #[cfg_attr(diesel_docsrs, doc(fake_variadic))]
543        impl<$T1, __GroupByClause> ValidGrouping<__GroupByClause> for ($T1,)
544            where $T1: ValidGrouping<__GroupByClause>
545        {
546            type IsAggregate = $T1::IsAggregate;
547        }
548    };
549}
550
551macro_rules! impl_sql_type {
552    (
553        @build
554        start_ts = [$($ST: ident,)*],
555        ts = [$T1: ident,],
556        bounds = [$($bounds: tt)*],
557        is_null = [$($is_null: tt)*],
558    )=> {
559        #[cfg_attr(diesel_docsrs, doc(hidden))]
560        impl<$($ST,)*> SqlType for ($($ST,)*)
561        where
562            $($ST: SqlType,)*
563            $($bounds)*
564            $T1::IsNull: OneIsNullable<$($is_null)*>,
565        {
566            type IsNull = <$T1::IsNull as OneIsNullable<$($is_null)*>>::Out;
567        }
568
569    };
570    (
571        @build
572        start_ts = [$($ST: ident,)*],
573        ts = [$T1: ident, $($T: ident,)+],
574        bounds = [$($bounds: tt)*],
575        is_null = [$($is_null: tt)*],
576    )=> {
577        impl_sql_type!{
578            @build
579            start_ts = [$($ST,)*],
580            ts = [$($T,)*],
581            bounds = [$($bounds)* $T1::IsNull: OneIsNullable<$($is_null)*>,],
582            is_null = [<$T1::IsNull as OneIsNullable<$($is_null)*>>::Out],
583        }
584    };
585    ($T1: ident, $($T: ident,)+) => {
586        impl_sql_type!{
587            @build
588            start_ts = [$T1, $($T,)*],
589            ts = [$($T,)*],
590            bounds = [],
591            is_null = [$T1::IsNull],
592        }
593    };
594    ($T1: ident,) => {
595        #[cfg_attr(diesel_docsrs, doc(fake_variadic))]
596        impl<$T1> SqlType for ($T1,)
597        where $T1: SqlType,
598        {
599            type IsNull = $T1::IsNull;
600        }
601    }
602}
603
604#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB>
    HasSqlType<(T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
    T29, T30, T31)> for __DB where __DB: HasSqlType<T>, __DB: HasSqlType<T1>,
    __DB: HasSqlType<T2>, __DB: HasSqlType<T3>, __DB: HasSqlType<T4>,
    __DB: HasSqlType<T5>, __DB: HasSqlType<T6>, __DB: HasSqlType<T7>,
    __DB: HasSqlType<T8>, __DB: HasSqlType<T9>, __DB: HasSqlType<T10>,
    __DB: HasSqlType<T11>, __DB: HasSqlType<T12>, __DB: HasSqlType<T13>,
    __DB: HasSqlType<T14>, __DB: HasSqlType<T15>, __DB: HasSqlType<T16>,
    __DB: HasSqlType<T17>, __DB: HasSqlType<T18>, __DB: HasSqlType<T19>,
    __DB: HasSqlType<T20>, __DB: HasSqlType<T21>, __DB: HasSqlType<T22>,
    __DB: HasSqlType<T23>, __DB: HasSqlType<T24>, __DB: HasSqlType<T25>,
    __DB: HasSqlType<T26>, __DB: HasSqlType<T27>, __DB: HasSqlType<T28>,
    __DB: HasSqlType<T29>, __DB: HasSqlType<T30>, __DB: HasSqlType<T31>,
    __DB: Backend {
    fn metadata(_: &mut __DB::MetadataLookup) -> __DB::TypeMetadata {
        {
            ::core::panicking::panic_fmt(format_args!("internal error: entered unreachable code: {0}",
                    format_args!("Tuples should never implement `ToSql` directly")));
        };
    }
}
#[doc(hidden)]
#[diagnostic::do_not_recommend]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13, ST14,
    ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25, ST26,
    ST27, ST28, ST29, ST30, ST31, __DB>
    FromSqlRow<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31, crate::sql_types::Untyped),
    __DB> for
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    T) where __DB: Backend, T: FromSqlRow<crate::sql_types::Untyped, __DB>,
    T1: FromSqlRow<ST1, __DB> + StaticallySizedRow<ST1, __DB>,
    T2: FromSqlRow<ST2, __DB> + StaticallySizedRow<ST2, __DB>,
    T3: FromSqlRow<ST3, __DB> + StaticallySizedRow<ST3, __DB>,
    T4: FromSqlRow<ST4, __DB> + StaticallySizedRow<ST4, __DB>,
    T5: FromSqlRow<ST5, __DB> + StaticallySizedRow<ST5, __DB>,
    T6: FromSqlRow<ST6, __DB> + StaticallySizedRow<ST6, __DB>,
    T7: FromSqlRow<ST7, __DB> + StaticallySizedRow<ST7, __DB>,
    T8: FromSqlRow<ST8, __DB> + StaticallySizedRow<ST8, __DB>,
    T9: FromSqlRow<ST9, __DB> + StaticallySizedRow<ST9, __DB>,
    T10: FromSqlRow<ST10, __DB> + StaticallySizedRow<ST10, __DB>,
    T11: FromSqlRow<ST11, __DB> + StaticallySizedRow<ST11, __DB>,
    T12: FromSqlRow<ST12, __DB> + StaticallySizedRow<ST12, __DB>,
    T13: FromSqlRow<ST13, __DB> + StaticallySizedRow<ST13, __DB>,
    T14: FromSqlRow<ST14, __DB> + StaticallySizedRow<ST14, __DB>,
    T15: FromSqlRow<ST15, __DB> + StaticallySizedRow<ST15, __DB>,
    T16: FromSqlRow<ST16, __DB> + StaticallySizedRow<ST16, __DB>,
    T17: FromSqlRow<ST17, __DB> + StaticallySizedRow<ST17, __DB>,
    T18: FromSqlRow<ST18, __DB> + StaticallySizedRow<ST18, __DB>,
    T19: FromSqlRow<ST19, __DB> + StaticallySizedRow<ST19, __DB>,
    T20: FromSqlRow<ST20, __DB> + StaticallySizedRow<ST20, __DB>,
    T21: FromSqlRow<ST21, __DB> + StaticallySizedRow<ST21, __DB>,
    T22: FromSqlRow<ST22, __DB> + StaticallySizedRow<ST22, __DB>,
    T23: FromSqlRow<ST23, __DB> + StaticallySizedRow<ST23, __DB>,
    T24: FromSqlRow<ST24, __DB> + StaticallySizedRow<ST24, __DB>,
    T25: FromSqlRow<ST25, __DB> + StaticallySizedRow<ST25, __DB>,
    T26: FromSqlRow<ST26, __DB> + StaticallySizedRow<ST26, __DB>,
    T27: FromSqlRow<ST27, __DB> + StaticallySizedRow<ST27, __DB>,
    T28: FromSqlRow<ST28, __DB> + StaticallySizedRow<ST28, __DB>,
    T29: FromSqlRow<ST29, __DB> + StaticallySizedRow<ST29, __DB>,
    T30: FromSqlRow<ST30, __DB> + StaticallySizedRow<ST30, __DB>,
    T31: FromSqlRow<ST31, __DB> + StaticallySizedRow<ST31, __DB> {
    #[allow(non_snake_case, unused_variables, unused_mut)]
    fn build_from_row<'a>(full_row: &impl Row<'a, __DB>)
        -> deserialize::Result<Self> {
        let field_count = full_row.field_count();
        let mut static_field_count = 0;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T1::FIELD_COUNT);
        static_field_count += T1::FIELD_COUNT;
        let T1 = T1::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T2::FIELD_COUNT);
        static_field_count += T2::FIELD_COUNT;
        let T2 = T2::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T3::FIELD_COUNT);
        static_field_count += T3::FIELD_COUNT;
        let T3 = T3::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T4::FIELD_COUNT);
        static_field_count += T4::FIELD_COUNT;
        let T4 = T4::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T5::FIELD_COUNT);
        static_field_count += T5::FIELD_COUNT;
        let T5 = T5::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T6::FIELD_COUNT);
        static_field_count += T6::FIELD_COUNT;
        let T6 = T6::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T7::FIELD_COUNT);
        static_field_count += T7::FIELD_COUNT;
        let T7 = T7::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T8::FIELD_COUNT);
        static_field_count += T8::FIELD_COUNT;
        let T8 = T8::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T9::FIELD_COUNT);
        static_field_count += T9::FIELD_COUNT;
        let T9 = T9::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T10::FIELD_COUNT);
        static_field_count += T10::FIELD_COUNT;
        let T10 = T10::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T11::FIELD_COUNT);
        static_field_count += T11::FIELD_COUNT;
        let T11 = T11::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T12::FIELD_COUNT);
        static_field_count += T12::FIELD_COUNT;
        let T12 = T12::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T13::FIELD_COUNT);
        static_field_count += T13::FIELD_COUNT;
        let T13 = T13::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T14::FIELD_COUNT);
        static_field_count += T14::FIELD_COUNT;
        let T14 = T14::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T15::FIELD_COUNT);
        static_field_count += T15::FIELD_COUNT;
        let T15 = T15::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T16::FIELD_COUNT);
        static_field_count += T16::FIELD_COUNT;
        let T16 = T16::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T17::FIELD_COUNT);
        static_field_count += T17::FIELD_COUNT;
        let T17 = T17::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T18::FIELD_COUNT);
        static_field_count += T18::FIELD_COUNT;
        let T18 = T18::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T19::FIELD_COUNT);
        static_field_count += T19::FIELD_COUNT;
        let T19 = T19::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T20::FIELD_COUNT);
        static_field_count += T20::FIELD_COUNT;
        let T20 = T20::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T21::FIELD_COUNT);
        static_field_count += T21::FIELD_COUNT;
        let T21 = T21::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T22::FIELD_COUNT);
        static_field_count += T22::FIELD_COUNT;
        let T22 = T22::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T23::FIELD_COUNT);
        static_field_count += T23::FIELD_COUNT;
        let T23 = T23::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T24::FIELD_COUNT);
        static_field_count += T24::FIELD_COUNT;
        let T24 = T24::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T25::FIELD_COUNT);
        static_field_count += T25::FIELD_COUNT;
        let T25 = T25::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T26::FIELD_COUNT);
        static_field_count += T26::FIELD_COUNT;
        let T26 = T26::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T27::FIELD_COUNT);
        static_field_count += T27::FIELD_COUNT;
        let T27 = T27::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T28::FIELD_COUNT);
        static_field_count += T28::FIELD_COUNT;
        let T28 = T28::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T29::FIELD_COUNT);
        static_field_count += T29::FIELD_COUNT;
        let T29 = T29::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T30::FIELD_COUNT);
        static_field_count += T30::FIELD_COUNT;
        let T30 = T30::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T31::FIELD_COUNT);
        static_field_count += T31::FIELD_COUNT;
        let T31 = T31::build_from_row(&row)?;
        let row = full_row.partial_row(static_field_count..field_count);
        Ok((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
                T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
                T28, T29, T30, T31, T::build_from_row(&row)?))
    }
}
#[doc(hidden)]
impl<T, ST, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31, __DB>
    FromStaticSqlRow<(ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31, ST), __DB> for
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    T) where __DB: Backend, ST: CompatibleType<T, __DB>,
    T: FromSqlRow<<ST as CompatibleType<T, __DB>>::SqlType, __DB>,
    ST1: CompatibleType<T1, __DB>,
    T1: FromSqlRow<<ST1 as CompatibleType<T1, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST1 as CompatibleType<T1, __DB>>::SqlType, __DB>,
    ST2: CompatibleType<T2, __DB>,
    T2: FromSqlRow<<ST2 as CompatibleType<T2, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST2 as CompatibleType<T2, __DB>>::SqlType, __DB>,
    ST3: CompatibleType<T3, __DB>,
    T3: FromSqlRow<<ST3 as CompatibleType<T3, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST3 as CompatibleType<T3, __DB>>::SqlType, __DB>,
    ST4: CompatibleType<T4, __DB>,
    T4: FromSqlRow<<ST4 as CompatibleType<T4, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST4 as CompatibleType<T4, __DB>>::SqlType, __DB>,
    ST5: CompatibleType<T5, __DB>,
    T5: FromSqlRow<<ST5 as CompatibleType<T5, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST5 as CompatibleType<T5, __DB>>::SqlType, __DB>,
    ST6: CompatibleType<T6, __DB>,
    T6: FromSqlRow<<ST6 as CompatibleType<T6, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST6 as CompatibleType<T6, __DB>>::SqlType, __DB>,
    ST7: CompatibleType<T7, __DB>,
    T7: FromSqlRow<<ST7 as CompatibleType<T7, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST7 as CompatibleType<T7, __DB>>::SqlType, __DB>,
    ST8: CompatibleType<T8, __DB>,
    T8: FromSqlRow<<ST8 as CompatibleType<T8, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST8 as CompatibleType<T8, __DB>>::SqlType, __DB>,
    ST9: CompatibleType<T9, __DB>,
    T9: FromSqlRow<<ST9 as CompatibleType<T9, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST9 as CompatibleType<T9, __DB>>::SqlType, __DB>,
    ST10: CompatibleType<T10, __DB>,
    T10: FromSqlRow<<ST10 as CompatibleType<T10, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST10 as CompatibleType<T10, __DB>>::SqlType, __DB>,
    ST11: CompatibleType<T11, __DB>,
    T11: FromSqlRow<<ST11 as CompatibleType<T11, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST11 as CompatibleType<T11, __DB>>::SqlType, __DB>,
    ST12: CompatibleType<T12, __DB>,
    T12: FromSqlRow<<ST12 as CompatibleType<T12, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST12 as CompatibleType<T12, __DB>>::SqlType, __DB>,
    ST13: CompatibleType<T13, __DB>,
    T13: FromSqlRow<<ST13 as CompatibleType<T13, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST13 as CompatibleType<T13, __DB>>::SqlType, __DB>,
    ST14: CompatibleType<T14, __DB>,
    T14: FromSqlRow<<ST14 as CompatibleType<T14, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST14 as CompatibleType<T14, __DB>>::SqlType, __DB>,
    ST15: CompatibleType<T15, __DB>,
    T15: FromSqlRow<<ST15 as CompatibleType<T15, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST15 as CompatibleType<T15, __DB>>::SqlType, __DB>,
    ST16: CompatibleType<T16, __DB>,
    T16: FromSqlRow<<ST16 as CompatibleType<T16, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST16 as CompatibleType<T16, __DB>>::SqlType, __DB>,
    ST17: CompatibleType<T17, __DB>,
    T17: FromSqlRow<<ST17 as CompatibleType<T17, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST17 as CompatibleType<T17, __DB>>::SqlType, __DB>,
    ST18: CompatibleType<T18, __DB>,
    T18: FromSqlRow<<ST18 as CompatibleType<T18, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST18 as CompatibleType<T18, __DB>>::SqlType, __DB>,
    ST19: CompatibleType<T19, __DB>,
    T19: FromSqlRow<<ST19 as CompatibleType<T19, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST19 as CompatibleType<T19, __DB>>::SqlType, __DB>,
    ST20: CompatibleType<T20, __DB>,
    T20: FromSqlRow<<ST20 as CompatibleType<T20, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST20 as CompatibleType<T20, __DB>>::SqlType, __DB>,
    ST21: CompatibleType<T21, __DB>,
    T21: FromSqlRow<<ST21 as CompatibleType<T21, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST21 as CompatibleType<T21, __DB>>::SqlType, __DB>,
    ST22: CompatibleType<T22, __DB>,
    T22: FromSqlRow<<ST22 as CompatibleType<T22, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST22 as CompatibleType<T22, __DB>>::SqlType, __DB>,
    ST23: CompatibleType<T23, __DB>,
    T23: FromSqlRow<<ST23 as CompatibleType<T23, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST23 as CompatibleType<T23, __DB>>::SqlType, __DB>,
    ST24: CompatibleType<T24, __DB>,
    T24: FromSqlRow<<ST24 as CompatibleType<T24, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST24 as CompatibleType<T24, __DB>>::SqlType, __DB>,
    ST25: CompatibleType<T25, __DB>,
    T25: FromSqlRow<<ST25 as CompatibleType<T25, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST25 as CompatibleType<T25, __DB>>::SqlType, __DB>,
    ST26: CompatibleType<T26, __DB>,
    T26: FromSqlRow<<ST26 as CompatibleType<T26, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST26 as CompatibleType<T26, __DB>>::SqlType, __DB>,
    ST27: CompatibleType<T27, __DB>,
    T27: FromSqlRow<<ST27 as CompatibleType<T27, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST27 as CompatibleType<T27, __DB>>::SqlType, __DB>,
    ST28: CompatibleType<T28, __DB>,
    T28: FromSqlRow<<ST28 as CompatibleType<T28, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST28 as CompatibleType<T28, __DB>>::SqlType, __DB>,
    ST29: CompatibleType<T29, __DB>,
    T29: FromSqlRow<<ST29 as CompatibleType<T29, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST29 as CompatibleType<T29, __DB>>::SqlType, __DB>,
    ST30: CompatibleType<T30, __DB>,
    T30: FromSqlRow<<ST30 as CompatibleType<T30, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST30 as CompatibleType<T30, __DB>>::SqlType, __DB>,
    ST31: CompatibleType<T31, __DB>,
    T31: FromSqlRow<<ST31 as CompatibleType<T31, __DB>>::SqlType, __DB> +
    StaticallySizedRow<<ST31 as CompatibleType<T31, __DB>>::SqlType, __DB> {
    #[allow(non_snake_case, unused_variables, unused_mut)]
    fn build_from_row<'a>(full_row: &impl Row<'a, __DB>)
        -> deserialize::Result<Self> {
        let field_count = full_row.field_count();
        let mut static_field_count = 0;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T1::FIELD_COUNT);
        static_field_count += T1::FIELD_COUNT;
        let T1 =
            <T1 as
                        FromSqlRow<<ST1 as CompatibleType<T1, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T2::FIELD_COUNT);
        static_field_count += T2::FIELD_COUNT;
        let T2 =
            <T2 as
                        FromSqlRow<<ST2 as CompatibleType<T2, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T3::FIELD_COUNT);
        static_field_count += T3::FIELD_COUNT;
        let T3 =
            <T3 as
                        FromSqlRow<<ST3 as CompatibleType<T3, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T4::FIELD_COUNT);
        static_field_count += T4::FIELD_COUNT;
        let T4 =
            <T4 as
                        FromSqlRow<<ST4 as CompatibleType<T4, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T5::FIELD_COUNT);
        static_field_count += T5::FIELD_COUNT;
        let T5 =
            <T5 as
                        FromSqlRow<<ST5 as CompatibleType<T5, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T6::FIELD_COUNT);
        static_field_count += T6::FIELD_COUNT;
        let T6 =
            <T6 as
                        FromSqlRow<<ST6 as CompatibleType<T6, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T7::FIELD_COUNT);
        static_field_count += T7::FIELD_COUNT;
        let T7 =
            <T7 as
                        FromSqlRow<<ST7 as CompatibleType<T7, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T8::FIELD_COUNT);
        static_field_count += T8::FIELD_COUNT;
        let T8 =
            <T8 as
                        FromSqlRow<<ST8 as CompatibleType<T8, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T9::FIELD_COUNT);
        static_field_count += T9::FIELD_COUNT;
        let T9 =
            <T9 as
                        FromSqlRow<<ST9 as CompatibleType<T9, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T10::FIELD_COUNT);
        static_field_count += T10::FIELD_COUNT;
        let T10 =
            <T10 as
                        FromSqlRow<<ST10 as CompatibleType<T10, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T11::FIELD_COUNT);
        static_field_count += T11::FIELD_COUNT;
        let T11 =
            <T11 as
                        FromSqlRow<<ST11 as CompatibleType<T11, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T12::FIELD_COUNT);
        static_field_count += T12::FIELD_COUNT;
        let T12 =
            <T12 as
                        FromSqlRow<<ST12 as CompatibleType<T12, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T13::FIELD_COUNT);
        static_field_count += T13::FIELD_COUNT;
        let T13 =
            <T13 as
                        FromSqlRow<<ST13 as CompatibleType<T13, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T14::FIELD_COUNT);
        static_field_count += T14::FIELD_COUNT;
        let T14 =
            <T14 as
                        FromSqlRow<<ST14 as CompatibleType<T14, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T15::FIELD_COUNT);
        static_field_count += T15::FIELD_COUNT;
        let T15 =
            <T15 as
                        FromSqlRow<<ST15 as CompatibleType<T15, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T16::FIELD_COUNT);
        static_field_count += T16::FIELD_COUNT;
        let T16 =
            <T16 as
                        FromSqlRow<<ST16 as CompatibleType<T16, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T17::FIELD_COUNT);
        static_field_count += T17::FIELD_COUNT;
        let T17 =
            <T17 as
                        FromSqlRow<<ST17 as CompatibleType<T17, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T18::FIELD_COUNT);
        static_field_count += T18::FIELD_COUNT;
        let T18 =
            <T18 as
                        FromSqlRow<<ST18 as CompatibleType<T18, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T19::FIELD_COUNT);
        static_field_count += T19::FIELD_COUNT;
        let T19 =
            <T19 as
                        FromSqlRow<<ST19 as CompatibleType<T19, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T20::FIELD_COUNT);
        static_field_count += T20::FIELD_COUNT;
        let T20 =
            <T20 as
                        FromSqlRow<<ST20 as CompatibleType<T20, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T21::FIELD_COUNT);
        static_field_count += T21::FIELD_COUNT;
        let T21 =
            <T21 as
                        FromSqlRow<<ST21 as CompatibleType<T21, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T22::FIELD_COUNT);
        static_field_count += T22::FIELD_COUNT;
        let T22 =
            <T22 as
                        FromSqlRow<<ST22 as CompatibleType<T22, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T23::FIELD_COUNT);
        static_field_count += T23::FIELD_COUNT;
        let T23 =
            <T23 as
                        FromSqlRow<<ST23 as CompatibleType<T23, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T24::FIELD_COUNT);
        static_field_count += T24::FIELD_COUNT;
        let T24 =
            <T24 as
                        FromSqlRow<<ST24 as CompatibleType<T24, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T25::FIELD_COUNT);
        static_field_count += T25::FIELD_COUNT;
        let T25 =
            <T25 as
                        FromSqlRow<<ST25 as CompatibleType<T25, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T26::FIELD_COUNT);
        static_field_count += T26::FIELD_COUNT;
        let T26 =
            <T26 as
                        FromSqlRow<<ST26 as CompatibleType<T26, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T27::FIELD_COUNT);
        static_field_count += T27::FIELD_COUNT;
        let T27 =
            <T27 as
                        FromSqlRow<<ST27 as CompatibleType<T27, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T28::FIELD_COUNT);
        static_field_count += T28::FIELD_COUNT;
        let T28 =
            <T28 as
                        FromSqlRow<<ST28 as CompatibleType<T28, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T29::FIELD_COUNT);
        static_field_count += T29::FIELD_COUNT;
        let T29 =
            <T29 as
                        FromSqlRow<<ST29 as CompatibleType<T29, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T30::FIELD_COUNT);
        static_field_count += T30::FIELD_COUNT;
        let T30 =
            <T30 as
                        FromSqlRow<<ST30 as CompatibleType<T30, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row =
            full_row.partial_row(static_field_count..static_field_count +
                        T31::FIELD_COUNT);
        static_field_count += T31::FIELD_COUNT;
        let T31 =
            <T31 as
                        FromSqlRow<<ST31 as CompatibleType<T31, __DB>>::SqlType,
                        __DB>>::build_from_row(&row)?;
        let row = full_row.partial_row(static_field_count..field_count);
        Ok((T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
                T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
                T28, T29, T30, T31, T::build_from_row(&row)?))
    }
}
#[doc(hidden)]
#[diagnostic::do_not_recommend]
impl<T: Expression, T1: Expression, T2: Expression, T3: Expression,
    T4: Expression, T5: Expression, T6: Expression, T7: Expression,
    T8: Expression, T9: Expression, T10: Expression, T11: Expression,
    T12: Expression, T13: Expression, T14: Expression, T15: Expression,
    T16: Expression, T17: Expression, T18: Expression, T19: Expression,
    T20: Expression, T21: Expression, T22: Expression, T23: Expression,
    T24: Expression, T25: Expression, T26: Expression, T27: Expression,
    T28: Expression, T29: Expression, T30: Expression, T31: Expression>
    Expression for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where
    (T::SqlType, T1::SqlType, T2::SqlType, T3::SqlType, T4::SqlType,
    T5::SqlType, T6::SqlType, T7::SqlType, T8::SqlType, T9::SqlType,
    T10::SqlType, T11::SqlType, T12::SqlType, T13::SqlType, T14::SqlType,
    T15::SqlType, T16::SqlType, T17::SqlType, T18::SqlType, T19::SqlType,
    T20::SqlType, T21::SqlType, T22::SqlType, T23::SqlType, T24::SqlType,
    T25::SqlType, T26::SqlType, T27::SqlType, T28::SqlType, T29::SqlType,
    T30::SqlType, T31::SqlType): TypedExpressionType {
    type SqlType =
        (<T as Expression>::SqlType, <T1 as Expression>::SqlType,
        <T2 as Expression>::SqlType, <T3 as Expression>::SqlType,
        <T4 as Expression>::SqlType, <T5 as Expression>::SqlType,
        <T6 as Expression>::SqlType, <T7 as Expression>::SqlType,
        <T8 as Expression>::SqlType, <T9 as Expression>::SqlType,
        <T10 as Expression>::SqlType, <T11 as Expression>::SqlType,
        <T12 as Expression>::SqlType, <T13 as Expression>::SqlType,
        <T14 as Expression>::SqlType, <T15 as Expression>::SqlType,
        <T16 as Expression>::SqlType, <T17 as Expression>::SqlType,
        <T18 as Expression>::SqlType, <T19 as Expression>::SqlType,
        <T20 as Expression>::SqlType, <T21 as Expression>::SqlType,
        <T22 as Expression>::SqlType, <T23 as Expression>::SqlType,
        <T24 as Expression>::SqlType, <T25 as Expression>::SqlType,
        <T26 as Expression>::SqlType, <T27 as Expression>::SqlType,
        <T28 as Expression>::SqlType, <T29 as Expression>::SqlType,
        <T30 as Expression>::SqlType, <T31 as Expression>::SqlType);
}
#[doc(hidden)]
impl<T: TypedExpressionType, T1: TypedExpressionType, T2: TypedExpressionType,
    T3: TypedExpressionType, T4: TypedExpressionType, T5: TypedExpressionType,
    T6: TypedExpressionType, T7: TypedExpressionType, T8: TypedExpressionType,
    T9: TypedExpressionType, T10: TypedExpressionType,
    T11: TypedExpressionType, T12: TypedExpressionType,
    T13: TypedExpressionType, T14: TypedExpressionType,
    T15: TypedExpressionType, T16: TypedExpressionType,
    T17: TypedExpressionType, T18: TypedExpressionType,
    T19: TypedExpressionType, T20: TypedExpressionType,
    T21: TypedExpressionType, T22: TypedExpressionType,
    T23: TypedExpressionType, T24: TypedExpressionType,
    T25: TypedExpressionType, T26: TypedExpressionType,
    T27: TypedExpressionType, T28: TypedExpressionType,
    T29: TypedExpressionType, T30: TypedExpressionType,
    T31: TypedExpressionType> TypedExpressionType for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    {
}
#[doc(hidden)]
impl<T: SqlType + TypedExpressionType, T1: SqlType + TypedExpressionType,
    T2: SqlType + TypedExpressionType, T3: SqlType + TypedExpressionType,
    T4: SqlType + TypedExpressionType, T5: SqlType + TypedExpressionType,
    T6: SqlType + TypedExpressionType, T7: SqlType + TypedExpressionType,
    T8: SqlType + TypedExpressionType, T9: SqlType + TypedExpressionType,
    T10: SqlType + TypedExpressionType, T11: SqlType + TypedExpressionType,
    T12: SqlType + TypedExpressionType, T13: SqlType + TypedExpressionType,
    T14: SqlType + TypedExpressionType, T15: SqlType + TypedExpressionType,
    T16: SqlType + TypedExpressionType, T17: SqlType + TypedExpressionType,
    T18: SqlType + TypedExpressionType, T19: SqlType + TypedExpressionType,
    T20: SqlType + TypedExpressionType, T21: SqlType + TypedExpressionType,
    T22: SqlType + TypedExpressionType, T23: SqlType + TypedExpressionType,
    T24: SqlType + TypedExpressionType, T25: SqlType + TypedExpressionType,
    T26: SqlType + TypedExpressionType, T27: SqlType + TypedExpressionType,
    T28: SqlType + TypedExpressionType, T29: SqlType + TypedExpressionType,
    T30: SqlType + TypedExpressionType, T31: SqlType + TypedExpressionType>
    TypedExpressionType for
    Nullable<(T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
    T30, T31)> where
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): SqlType {
}
#[doc(hidden)]
impl<T: SqlType, T1: SqlType, T2: SqlType, T3: SqlType, T4: SqlType,
    T5: SqlType, T6: SqlType, T7: SqlType, T8: SqlType, T9: SqlType,
    T10: SqlType, T11: SqlType, T12: SqlType, T13: SqlType, T14: SqlType,
    T15: SqlType, T16: SqlType, T17: SqlType, T18: SqlType, T19: SqlType,
    T20: SqlType, T21: SqlType, T22: SqlType, T23: SqlType, T24: SqlType,
    T25: SqlType, T26: SqlType, T27: SqlType, T28: SqlType, T29: SqlType,
    T30: SqlType, T31: SqlType> IntoNullable for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where Self: SqlType {
    type Nullable =
        Nullable<(T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
        T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
        T28, T29, T30, T31)>;
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB> Selectable<__DB> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where __DB: Backend, T: Selectable<__DB>, T1: Selectable<__DB>,
    T2: Selectable<__DB>, T3: Selectable<__DB>, T4: Selectable<__DB>,
    T5: Selectable<__DB>, T6: Selectable<__DB>, T7: Selectable<__DB>,
    T8: Selectable<__DB>, T9: Selectable<__DB>, T10: Selectable<__DB>,
    T11: Selectable<__DB>, T12: Selectable<__DB>, T13: Selectable<__DB>,
    T14: Selectable<__DB>, T15: Selectable<__DB>, T16: Selectable<__DB>,
    T17: Selectable<__DB>, T18: Selectable<__DB>, T19: Selectable<__DB>,
    T20: Selectable<__DB>, T21: Selectable<__DB>, T22: Selectable<__DB>,
    T23: Selectable<__DB>, T24: Selectable<__DB>, T25: Selectable<__DB>,
    T26: Selectable<__DB>, T27: Selectable<__DB>, T28: Selectable<__DB>,
    T29: Selectable<__DB>, T30: Selectable<__DB>, T31: Selectable<__DB> {
    type SelectExpression =
        (T::SelectExpression, T1::SelectExpression, T2::SelectExpression,
        T3::SelectExpression, T4::SelectExpression, T5::SelectExpression,
        T6::SelectExpression, T7::SelectExpression, T8::SelectExpression,
        T9::SelectExpression, T10::SelectExpression, T11::SelectExpression,
        T12::SelectExpression, T13::SelectExpression, T14::SelectExpression,
        T15::SelectExpression, T16::SelectExpression, T17::SelectExpression,
        T18::SelectExpression, T19::SelectExpression, T20::SelectExpression,
        T21::SelectExpression, T22::SelectExpression, T23::SelectExpression,
        T24::SelectExpression, T25::SelectExpression, T26::SelectExpression,
        T27::SelectExpression, T28::SelectExpression, T29::SelectExpression,
        T30::SelectExpression, T31::SelectExpression);
    fn construct_selection() -> Self::SelectExpression {
        (T::construct_selection(), T1::construct_selection(),
            T2::construct_selection(), T3::construct_selection(),
            T4::construct_selection(), T5::construct_selection(),
            T6::construct_selection(), T7::construct_selection(),
            T8::construct_selection(), T9::construct_selection(),
            T10::construct_selection(), T11::construct_selection(),
            T12::construct_selection(), T13::construct_selection(),
            T14::construct_selection(), T15::construct_selection(),
            T16::construct_selection(), T17::construct_selection(),
            T18::construct_selection(), T19::construct_selection(),
            T20::construct_selection(), T21::construct_selection(),
            T22::construct_selection(), T23::construct_selection(),
            T24::construct_selection(), T25::construct_selection(),
            T26::construct_selection(), T27::construct_selection(),
            T28::construct_selection(), T29::construct_selection(),
            T30::construct_selection(), T31::construct_selection())
    }
}
#[doc(hidden)]
impl<T: QueryFragment<__DB>, T1: QueryFragment<__DB>, T2: QueryFragment<__DB>,
    T3: QueryFragment<__DB>, T4: QueryFragment<__DB>, T5: QueryFragment<__DB>,
    T6: QueryFragment<__DB>, T7: QueryFragment<__DB>, T8: QueryFragment<__DB>,
    T9: QueryFragment<__DB>, T10: QueryFragment<__DB>,
    T11: QueryFragment<__DB>, T12: QueryFragment<__DB>,
    T13: QueryFragment<__DB>, T14: QueryFragment<__DB>,
    T15: QueryFragment<__DB>, T16: QueryFragment<__DB>,
    T17: QueryFragment<__DB>, T18: QueryFragment<__DB>,
    T19: QueryFragment<__DB>, T20: QueryFragment<__DB>,
    T21: QueryFragment<__DB>, T22: QueryFragment<__DB>,
    T23: QueryFragment<__DB>, T24: QueryFragment<__DB>,
    T25: QueryFragment<__DB>, T26: QueryFragment<__DB>,
    T27: QueryFragment<__DB>, T28: QueryFragment<__DB>,
    T29: QueryFragment<__DB>, T30: QueryFragment<__DB>,
    T31: QueryFragment<__DB>, __DB: Backend> QueryFragment<__DB> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    {
    #[allow(unused_assignments)]
    fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, __DB>)
        -> QueryResult<()> {
        let mut needs_comma = false;
        if !self.0.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.0.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.1.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.1.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.2.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.2.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.3.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.3.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.4.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.4.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.5.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.5.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.6.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.6.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.7.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.7.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.8.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.8.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.9.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.9.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.10.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.10.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.11.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.11.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.12.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.12.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.13.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.13.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.14.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.14.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.15.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.15.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.16.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.16.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.17.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.17.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.18.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.18.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.19.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.19.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.20.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.20.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.21.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.21.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.22.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.22.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.23.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.23.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.24.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.24.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.25.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.25.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.26.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.26.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.27.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.27.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.28.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.28.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.29.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.29.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.30.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.30.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        if !self.31.is_noop(out.backend())? {
            if needs_comma { out.push_sql(", "); }
            self.31.walk_ast(out.reborrow())?;
            needs_comma = true;
        }
        Ok(())
    }
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    Tab> ColumnList for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: ColumnList<Table = Tab>, T1: ColumnList<Table = Tab>,
    T2: ColumnList<Table = Tab>, T3: ColumnList<Table = Tab>,
    T4: ColumnList<Table = Tab>, T5: ColumnList<Table = Tab>,
    T6: ColumnList<Table = Tab>, T7: ColumnList<Table = Tab>,
    T8: ColumnList<Table = Tab>, T9: ColumnList<Table = Tab>,
    T10: ColumnList<Table = Tab>, T11: ColumnList<Table = Tab>,
    T12: ColumnList<Table = Tab>, T13: ColumnList<Table = Tab>,
    T14: ColumnList<Table = Tab>, T15: ColumnList<Table = Tab>,
    T16: ColumnList<Table = Tab>, T17: ColumnList<Table = Tab>,
    T18: ColumnList<Table = Tab>, T19: ColumnList<Table = Tab>,
    T20: ColumnList<Table = Tab>, T21: ColumnList<Table = Tab>,
    T22: ColumnList<Table = Tab>, T23: ColumnList<Table = Tab>,
    T24: ColumnList<Table = Tab>, T25: ColumnList<Table = Tab>,
    T26: ColumnList<Table = Tab>, T27: ColumnList<Table = Tab>,
    T28: ColumnList<Table = Tab>, T29: ColumnList<Table = Tab>,
    T30: ColumnList<Table = Tab>, T31: ColumnList<Table = Tab> {
    type Table = Tab;
    fn walk_ast<__DB: Backend>(&self, mut out: AstPass<'_, '_, __DB>)
        -> QueryResult<()> {
        if 0 != 0 { out.push_sql(", "); }
        self.0.walk_ast(out.reborrow())?;
        if 1 != 0 { out.push_sql(", "); }
        self.1.walk_ast(out.reborrow())?;
        if 2 != 0 { out.push_sql(", "); }
        self.2.walk_ast(out.reborrow())?;
        if 3 != 0 { out.push_sql(", "); }
        self.3.walk_ast(out.reborrow())?;
        if 4 != 0 { out.push_sql(", "); }
        self.4.walk_ast(out.reborrow())?;
        if 5 != 0 { out.push_sql(", "); }
        self.5.walk_ast(out.reborrow())?;
        if 6 != 0 { out.push_sql(", "); }
        self.6.walk_ast(out.reborrow())?;
        if 7 != 0 { out.push_sql(", "); }
        self.7.walk_ast(out.reborrow())?;
        if 8 != 0 { out.push_sql(", "); }
        self.8.walk_ast(out.reborrow())?;
        if 9 != 0 { out.push_sql(", "); }
        self.9.walk_ast(out.reborrow())?;
        if 10 != 0 { out.push_sql(", "); }
        self.10.walk_ast(out.reborrow())?;
        if 11 != 0 { out.push_sql(", "); }
        self.11.walk_ast(out.reborrow())?;
        if 12 != 0 { out.push_sql(", "); }
        self.12.walk_ast(out.reborrow())?;
        if 13 != 0 { out.push_sql(", "); }
        self.13.walk_ast(out.reborrow())?;
        if 14 != 0 { out.push_sql(", "); }
        self.14.walk_ast(out.reborrow())?;
        if 15 != 0 { out.push_sql(", "); }
        self.15.walk_ast(out.reborrow())?;
        if 16 != 0 { out.push_sql(", "); }
        self.16.walk_ast(out.reborrow())?;
        if 17 != 0 { out.push_sql(", "); }
        self.17.walk_ast(out.reborrow())?;
        if 18 != 0 { out.push_sql(", "); }
        self.18.walk_ast(out.reborrow())?;
        if 19 != 0 { out.push_sql(", "); }
        self.19.walk_ast(out.reborrow())?;
        if 20 != 0 { out.push_sql(", "); }
        self.20.walk_ast(out.reborrow())?;
        if 21 != 0 { out.push_sql(", "); }
        self.21.walk_ast(out.reborrow())?;
        if 22 != 0 { out.push_sql(", "); }
        self.22.walk_ast(out.reborrow())?;
        if 23 != 0 { out.push_sql(", "); }
        self.23.walk_ast(out.reborrow())?;
        if 24 != 0 { out.push_sql(", "); }
        self.24.walk_ast(out.reborrow())?;
        if 25 != 0 { out.push_sql(", "); }
        self.25.walk_ast(out.reborrow())?;
        if 26 != 0 { out.push_sql(", "); }
        self.26.walk_ast(out.reborrow())?;
        if 27 != 0 { out.push_sql(", "); }
        self.27.walk_ast(out.reborrow())?;
        if 28 != 0 { out.push_sql(", "); }
        self.28.walk_ast(out.reborrow())?;
        if 29 != 0 { out.push_sql(", "); }
        self.29.walk_ast(out.reborrow())?;
        if 30 != 0 { out.push_sql(", "); }
        self.30.walk_ast(out.reborrow())?;
        if 31 != 0 { out.push_sql(", "); }
        self.31.walk_ast(out.reborrow())?;
        Ok(())
    }
}
#[doc(hidden)]
impl<T: QueryId, T1: QueryId, T2: QueryId, T3: QueryId, T4: QueryId,
    T5: QueryId, T6: QueryId, T7: QueryId, T8: QueryId, T9: QueryId,
    T10: QueryId, T11: QueryId, T12: QueryId, T13: QueryId, T14: QueryId,
    T15: QueryId, T16: QueryId, T17: QueryId, T18: QueryId, T19: QueryId,
    T20: QueryId, T21: QueryId, T22: QueryId, T23: QueryId, T24: QueryId,
    T25: QueryId, T26: QueryId, T27: QueryId, T28: QueryId, T29: QueryId,
    T30: QueryId, T31: QueryId> QueryId for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    {
    type QueryId =
        (T::QueryId, T1::QueryId, T2::QueryId, T3::QueryId, T4::QueryId,
        T5::QueryId, T6::QueryId, T7::QueryId, T8::QueryId, T9::QueryId,
        T10::QueryId, T11::QueryId, T12::QueryId, T13::QueryId, T14::QueryId,
        T15::QueryId, T16::QueryId, T17::QueryId, T18::QueryId, T19::QueryId,
        T20::QueryId, T21::QueryId, T22::QueryId, T23::QueryId, T24::QueryId,
        T25::QueryId, T26::QueryId, T27::QueryId, T28::QueryId, T29::QueryId,
        T30::QueryId, T31::QueryId);
    const HAS_STATIC_QUERY_ID: bool =
        T::HAS_STATIC_QUERY_ID && T1::HAS_STATIC_QUERY_ID &&
                                                                                                                                    T2::HAS_STATIC_QUERY_ID && T3::HAS_STATIC_QUERY_ID &&
                                                                                                                            T4::HAS_STATIC_QUERY_ID && T5::HAS_STATIC_QUERY_ID &&
                                                                                                                    T6::HAS_STATIC_QUERY_ID && T7::HAS_STATIC_QUERY_ID &&
                                                                                                            T8::HAS_STATIC_QUERY_ID && T9::HAS_STATIC_QUERY_ID &&
                                                                                                    T10::HAS_STATIC_QUERY_ID && T11::HAS_STATIC_QUERY_ID &&
                                                                                            T12::HAS_STATIC_QUERY_ID && T13::HAS_STATIC_QUERY_ID &&
                                                                                    T14::HAS_STATIC_QUERY_ID && T15::HAS_STATIC_QUERY_ID &&
                                                                            T16::HAS_STATIC_QUERY_ID && T17::HAS_STATIC_QUERY_ID &&
                                                                    T18::HAS_STATIC_QUERY_ID && T19::HAS_STATIC_QUERY_ID &&
                                                            T20::HAS_STATIC_QUERY_ID && T21::HAS_STATIC_QUERY_ID &&
                                                    T22::HAS_STATIC_QUERY_ID && T23::HAS_STATIC_QUERY_ID &&
                                            T24::HAS_STATIC_QUERY_ID && T25::HAS_STATIC_QUERY_ID &&
                                    T26::HAS_STATIC_QUERY_ID && T27::HAS_STATIC_QUERY_ID &&
                            T28::HAS_STATIC_QUERY_ID && T29::HAS_STATIC_QUERY_ID &&
                    T30::HAS_STATIC_QUERY_ID && T31::HAS_STATIC_QUERY_ID &&
            true;
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __GroupByClause> ValidGrouping<__GroupByClause> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: ValidGrouping<__GroupByClause>,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): ValidGrouping<__GroupByClause>,
    T::IsAggregate: MixedAggregates<<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
    T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
    T26, T27, T28, T29, T30, T31) as
    ValidGrouping<__GroupByClause>>::IsAggregate> {
    type IsAggregate =
        <T::IsAggregate as
        MixedAggregates<<(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
        T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
        T27, T28, T29, T30, T31) as
        ValidGrouping<__GroupByClause>>::IsAggregate>>::Output;
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    Col> IsContainedInGroupBy<Col> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where Col: QueryRelationField,
    (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): IsContainedInGroupBy<Col>, T: IsContainedInGroupBy<Col>,
    T::Output: is_contained_in_group_by::IsAny<<(T1, T2, T3, T4, T5, T6, T7,
    T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22,
    T23, T24, T25, T26, T27, T28, T29, T30, T31) as
    IsContainedInGroupBy<Col>>::Output> {
    type Output =
        <T::Output as
        is_contained_in_group_by::IsAny<<(T1, T2, T3, T4, T5, T6, T7, T8, T9,
        T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23,
        T24, T25, T26, T27, T28, T29, T30, T31) as
        IsContainedInGroupBy<Col>>::Output>>::Output;
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    Tab> UndecoratedInsertRecord<Tab> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: UndecoratedInsertRecord<Tab>, T1: UndecoratedInsertRecord<Tab>,
    T2: UndecoratedInsertRecord<Tab>, T3: UndecoratedInsertRecord<Tab>,
    T4: UndecoratedInsertRecord<Tab>, T5: UndecoratedInsertRecord<Tab>,
    T6: UndecoratedInsertRecord<Tab>, T7: UndecoratedInsertRecord<Tab>,
    T8: UndecoratedInsertRecord<Tab>, T9: UndecoratedInsertRecord<Tab>,
    T10: UndecoratedInsertRecord<Tab>, T11: UndecoratedInsertRecord<Tab>,
    T12: UndecoratedInsertRecord<Tab>, T13: UndecoratedInsertRecord<Tab>,
    T14: UndecoratedInsertRecord<Tab>, T15: UndecoratedInsertRecord<Tab>,
    T16: UndecoratedInsertRecord<Tab>, T17: UndecoratedInsertRecord<Tab>,
    T18: UndecoratedInsertRecord<Tab>, T19: UndecoratedInsertRecord<Tab>,
    T20: UndecoratedInsertRecord<Tab>, T21: UndecoratedInsertRecord<Tab>,
    T22: UndecoratedInsertRecord<Tab>, T23: UndecoratedInsertRecord<Tab>,
    T24: UndecoratedInsertRecord<Tab>, T25: UndecoratedInsertRecord<Tab>,
    T26: UndecoratedInsertRecord<Tab>, T27: UndecoratedInsertRecord<Tab>,
    T28: UndecoratedInsertRecord<Tab>, T29: UndecoratedInsertRecord<Tab>,
    T30: UndecoratedInsertRecord<Tab>, T31: UndecoratedInsertRecord<Tab> {}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB> CanInsertInSingleQuery<__DB> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where __DB: Backend, T: CanInsertInSingleQuery<__DB>,
    T1: CanInsertInSingleQuery<__DB>, T2: CanInsertInSingleQuery<__DB>,
    T3: CanInsertInSingleQuery<__DB>, T4: CanInsertInSingleQuery<__DB>,
    T5: CanInsertInSingleQuery<__DB>, T6: CanInsertInSingleQuery<__DB>,
    T7: CanInsertInSingleQuery<__DB>, T8: CanInsertInSingleQuery<__DB>,
    T9: CanInsertInSingleQuery<__DB>, T10: CanInsertInSingleQuery<__DB>,
    T11: CanInsertInSingleQuery<__DB>, T12: CanInsertInSingleQuery<__DB>,
    T13: CanInsertInSingleQuery<__DB>, T14: CanInsertInSingleQuery<__DB>,
    T15: CanInsertInSingleQuery<__DB>, T16: CanInsertInSingleQuery<__DB>,
    T17: CanInsertInSingleQuery<__DB>, T18: CanInsertInSingleQuery<__DB>,
    T19: CanInsertInSingleQuery<__DB>, T20: CanInsertInSingleQuery<__DB>,
    T21: CanInsertInSingleQuery<__DB>, T22: CanInsertInSingleQuery<__DB>,
    T23: CanInsertInSingleQuery<__DB>, T24: CanInsertInSingleQuery<__DB>,
    T25: CanInsertInSingleQuery<__DB>, T26: CanInsertInSingleQuery<__DB>,
    T27: CanInsertInSingleQuery<__DB>, T28: CanInsertInSingleQuery<__DB>,
    T29: CanInsertInSingleQuery<__DB>, T30: CanInsertInSingleQuery<__DB>,
    T31: CanInsertInSingleQuery<__DB> {
    fn rows_to_insert(&self) -> Option<usize> {
        if true {
            match (&self.0.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.1.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.2.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.3.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.4.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.5.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.6.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.7.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.8.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.9.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.10.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.11.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.12.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.13.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.14.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.15.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.16.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.17.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.18.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.19.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.20.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.21.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.22.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.23.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.24.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.25.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.26.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.27.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.28.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.29.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.30.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        if true {
            match (&self.31.rows_to_insert(), &Some(1)) {
                (left_val, right_val) => {
                    if !(*left_val == *right_val) {
                        let kind = ::core::panicking::AssertKind::Eq;
                        ::core::panicking::assert_failed(kind, &*left_val,
                            &*right_val, ::core::option::Option::None);
                    }
                }
            };
        };
        Some(1)
    }
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31, Tab> Insertable<Tab> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: Insertable<Tab, Values = ValuesClause<ST, Tab>>,
    T1: Insertable<Tab, Values = ValuesClause<ST1, Tab>>,
    T2: Insertable<Tab, Values = ValuesClause<ST2, Tab>>,
    T3: Insertable<Tab, Values = ValuesClause<ST3, Tab>>,
    T4: Insertable<Tab, Values = ValuesClause<ST4, Tab>>,
    T5: Insertable<Tab, Values = ValuesClause<ST5, Tab>>,
    T6: Insertable<Tab, Values = ValuesClause<ST6, Tab>>,
    T7: Insertable<Tab, Values = ValuesClause<ST7, Tab>>,
    T8: Insertable<Tab, Values = ValuesClause<ST8, Tab>>,
    T9: Insertable<Tab, Values = ValuesClause<ST9, Tab>>,
    T10: Insertable<Tab, Values = ValuesClause<ST10, Tab>>,
    T11: Insertable<Tab, Values = ValuesClause<ST11, Tab>>,
    T12: Insertable<Tab, Values = ValuesClause<ST12, Tab>>,
    T13: Insertable<Tab, Values = ValuesClause<ST13, Tab>>,
    T14: Insertable<Tab, Values = ValuesClause<ST14, Tab>>,
    T15: Insertable<Tab, Values = ValuesClause<ST15, Tab>>,
    T16: Insertable<Tab, Values = ValuesClause<ST16, Tab>>,
    T17: Insertable<Tab, Values = ValuesClause<ST17, Tab>>,
    T18: Insertable<Tab, Values = ValuesClause<ST18, Tab>>,
    T19: Insertable<Tab, Values = ValuesClause<ST19, Tab>>,
    T20: Insertable<Tab, Values = ValuesClause<ST20, Tab>>,
    T21: Insertable<Tab, Values = ValuesClause<ST21, Tab>>,
    T22: Insertable<Tab, Values = ValuesClause<ST22, Tab>>,
    T23: Insertable<Tab, Values = ValuesClause<ST23, Tab>>,
    T24: Insertable<Tab, Values = ValuesClause<ST24, Tab>>,
    T25: Insertable<Tab, Values = ValuesClause<ST25, Tab>>,
    T26: Insertable<Tab, Values = ValuesClause<ST26, Tab>>,
    T27: Insertable<Tab, Values = ValuesClause<ST27, Tab>>,
    T28: Insertable<Tab, Values = ValuesClause<ST28, Tab>>,
    T29: Insertable<Tab, Values = ValuesClause<ST29, Tab>>,
    T30: Insertable<Tab, Values = ValuesClause<ST30, Tab>>,
    T31: Insertable<Tab, Values = ValuesClause<ST31, Tab>> {
    type Values =
        ValuesClause<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
        ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
        ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31), Tab>;
    fn values(self) -> Self::Values {
        ValuesClause::new((self.0.values().values, self.1.values().values,
                self.2.values().values, self.3.values().values,
                self.4.values().values, self.5.values().values,
                self.6.values().values, self.7.values().values,
                self.8.values().values, self.9.values().values,
                self.10.values().values, self.11.values().values,
                self.12.values().values, self.13.values().values,
                self.14.values().values, self.15.values().values,
                self.16.values().values, self.17.values().values,
                self.18.values().values, self.19.values().values,
                self.20.values().values, self.21.values().values,
                self.22.values().values, self.23.values().values,
                self.24.values().values, self.25.values().values,
                self.26.values().values, self.27.values().values,
                self.28.values().values, self.29.values().values,
                self.30.values().values, self.31.values().values))
    }
}
impl<'a, T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31, Tab> Insertable<Tab> for
    &'a (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31) where
    (&'a T, &'a T1, &'a T2, &'a T3, &'a T4, &'a T5, &'a T6, &'a T7, &'a T8,
    &'a T9, &'a T10, &'a T11, &'a T12, &'a T13, &'a T14, &'a T15, &'a T16,
    &'a T17, &'a T18, &'a T19, &'a T20, &'a T21, &'a T22, &'a T23, &'a T24,
    &'a T25, &'a T26, &'a T27, &'a T28, &'a T29, &'a T30,
    &'a T31): Insertable<Tab> {
    type Values =
        <(&'a T, &'a T1, &'a T2, &'a T3, &'a T4, &'a T5, &'a T6, &'a T7,
        &'a T8, &'a T9, &'a T10, &'a T11, &'a T12, &'a T13, &'a T14, &'a T15,
        &'a T16, &'a T17, &'a T18, &'a T19, &'a T20, &'a T21, &'a T22,
        &'a T23, &'a T24, &'a T25, &'a T26, &'a T27, &'a T28, &'a T29,
        &'a T30, &'a T31) as Insertable<Tab>>::Values;
    fn values(self) -> Self::Values {
        (&self.0, &self.1, &self.2, &self.3, &self.4, &self.5, &self.6,
                &self.7, &self.8, &self.9, &self.10, &self.11, &self.12,
                &self.13, &self.14, &self.15, &self.16, &self.17, &self.18,
                &self.19, &self.20, &self.21, &self.22, &self.23, &self.24,
                &self.25, &self.26, &self.27, &self.28, &self.29, &self.30,
                &self.31).values()
    }
}
#[allow(unused_assignments)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    Tab, __DB> InsertValues<__DB, Tab> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where Tab: Table, __DB: Backend, T: InsertValues<__DB, Tab>,
    T1: InsertValues<__DB, Tab>, T2: InsertValues<__DB, Tab>,
    T3: InsertValues<__DB, Tab>, T4: InsertValues<__DB, Tab>,
    T5: InsertValues<__DB, Tab>, T6: InsertValues<__DB, Tab>,
    T7: InsertValues<__DB, Tab>, T8: InsertValues<__DB, Tab>,
    T9: InsertValues<__DB, Tab>, T10: InsertValues<__DB, Tab>,
    T11: InsertValues<__DB, Tab>, T12: InsertValues<__DB, Tab>,
    T13: InsertValues<__DB, Tab>, T14: InsertValues<__DB, Tab>,
    T15: InsertValues<__DB, Tab>, T16: InsertValues<__DB, Tab>,
    T17: InsertValues<__DB, Tab>, T18: InsertValues<__DB, Tab>,
    T19: InsertValues<__DB, Tab>, T20: InsertValues<__DB, Tab>,
    T21: InsertValues<__DB, Tab>, T22: InsertValues<__DB, Tab>,
    T23: InsertValues<__DB, Tab>, T24: InsertValues<__DB, Tab>,
    T25: InsertValues<__DB, Tab>, T26: InsertValues<__DB, Tab>,
    T27: InsertValues<__DB, Tab>, T28: InsertValues<__DB, Tab>,
    T29: InsertValues<__DB, Tab>, T30: InsertValues<__DB, Tab>,
    T31: InsertValues<__DB, Tab> {
    fn column_names(&self, mut out: AstPass<'_, '_, __DB>)
        -> QueryResult<()> {
        let mut needs_comma = false;
        let noop_element = self.0.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.0.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.1.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.1.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.2.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.2.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.3.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.3.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.4.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.4.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.5.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.5.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.6.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.6.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.7.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.7.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.8.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.8.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.9.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.9.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.10.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.10.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.11.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.11.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.12.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.12.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.13.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.13.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.14.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.14.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.15.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.15.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.16.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.16.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.17.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.17.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.18.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.18.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.19.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.19.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.20.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.20.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.21.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.21.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.22.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.22.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.23.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.23.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.24.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.24.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.25.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.25.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.26.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.26.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.27.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.27.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.28.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.28.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.29.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.29.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.30.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.30.column_names(out.reborrow())?;
            needs_comma = true;
        }
        let noop_element = self.31.is_noop(out.backend())?;
        if !noop_element {
            if needs_comma { out.push_sql(", "); }
            self.31.column_names(out.reborrow())?;
            needs_comma = true;
        }
        Ok(())
    }
}
impl<__T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31, Tab> Insertable<Tab> for
    InsertableOptionHelper<__T,
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31)> where __T: Insertable<Tab>,
    __T::Values: Default {
    type Values = __T::Values;
    fn values(self) -> Self::Values {
        self.0.map(|v| v.values()).unwrap_or_default()
    }
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    QS> SelectableExpression<QS> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: SelectableExpression<QS>, T1: SelectableExpression<QS>,
    T2: SelectableExpression<QS>, T3: SelectableExpression<QS>,
    T4: SelectableExpression<QS>, T5: SelectableExpression<QS>,
    T6: SelectableExpression<QS>, T7: SelectableExpression<QS>,
    T8: SelectableExpression<QS>, T9: SelectableExpression<QS>,
    T10: SelectableExpression<QS>, T11: SelectableExpression<QS>,
    T12: SelectableExpression<QS>, T13: SelectableExpression<QS>,
    T14: SelectableExpression<QS>, T15: SelectableExpression<QS>,
    T16: SelectableExpression<QS>, T17: SelectableExpression<QS>,
    T18: SelectableExpression<QS>, T19: SelectableExpression<QS>,
    T20: SelectableExpression<QS>, T21: SelectableExpression<QS>,
    T22: SelectableExpression<QS>, T23: SelectableExpression<QS>,
    T24: SelectableExpression<QS>, T25: SelectableExpression<QS>,
    T26: SelectableExpression<QS>, T27: SelectableExpression<QS>,
    T28: SelectableExpression<QS>, T29: SelectableExpression<QS>,
    T30: SelectableExpression<QS>, T31: SelectableExpression<QS>,
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): AppearsOnTable<QS> {}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    QS> AppearsOnTable<QS> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: AppearsOnTable<QS>, T1: AppearsOnTable<QS>,
    T2: AppearsOnTable<QS>, T3: AppearsOnTable<QS>, T4: AppearsOnTable<QS>,
    T5: AppearsOnTable<QS>, T6: AppearsOnTable<QS>, T7: AppearsOnTable<QS>,
    T8: AppearsOnTable<QS>, T9: AppearsOnTable<QS>, T10: AppearsOnTable<QS>,
    T11: AppearsOnTable<QS>, T12: AppearsOnTable<QS>, T13: AppearsOnTable<QS>,
    T14: AppearsOnTable<QS>, T15: AppearsOnTable<QS>, T16: AppearsOnTable<QS>,
    T17: AppearsOnTable<QS>, T18: AppearsOnTable<QS>, T19: AppearsOnTable<QS>,
    T20: AppearsOnTable<QS>, T21: AppearsOnTable<QS>, T22: AppearsOnTable<QS>,
    T23: AppearsOnTable<QS>, T24: AppearsOnTable<QS>, T25: AppearsOnTable<QS>,
    T26: AppearsOnTable<QS>, T27: AppearsOnTable<QS>, T28: AppearsOnTable<QS>,
    T29: AppearsOnTable<QS>, T30: AppearsOnTable<QS>, T31: AppearsOnTable<QS>,
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): Expression {
}
#[doc(hidden)]
impl<Target, T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
    T30, T31> AsChangeset for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: AsChangeset<Target = Target>, T1: AsChangeset<Target = Target>,
    T2: AsChangeset<Target = Target>, T3: AsChangeset<Target = Target>,
    T4: AsChangeset<Target = Target>, T5: AsChangeset<Target = Target>,
    T6: AsChangeset<Target = Target>, T7: AsChangeset<Target = Target>,
    T8: AsChangeset<Target = Target>, T9: AsChangeset<Target = Target>,
    T10: AsChangeset<Target = Target>, T11: AsChangeset<Target = Target>,
    T12: AsChangeset<Target = Target>, T13: AsChangeset<Target = Target>,
    T14: AsChangeset<Target = Target>, T15: AsChangeset<Target = Target>,
    T16: AsChangeset<Target = Target>, T17: AsChangeset<Target = Target>,
    T18: AsChangeset<Target = Target>, T19: AsChangeset<Target = Target>,
    T20: AsChangeset<Target = Target>, T21: AsChangeset<Target = Target>,
    T22: AsChangeset<Target = Target>, T23: AsChangeset<Target = Target>,
    T24: AsChangeset<Target = Target>, T25: AsChangeset<Target = Target>,
    T26: AsChangeset<Target = Target>, T27: AsChangeset<Target = Target>,
    T28: AsChangeset<Target = Target>, T29: AsChangeset<Target = Target>,
    T30: AsChangeset<Target = Target>, T31: AsChangeset<Target = Target>,
    Target: QuerySource {
    type Target = Target;
    type Changeset =
        (T::Changeset, T1::Changeset, T2::Changeset, T3::Changeset,
        T4::Changeset, T5::Changeset, T6::Changeset, T7::Changeset,
        T8::Changeset, T9::Changeset, T10::Changeset, T11::Changeset,
        T12::Changeset, T13::Changeset, T14::Changeset, T15::Changeset,
        T16::Changeset, T17::Changeset, T18::Changeset, T19::Changeset,
        T20::Changeset, T21::Changeset, T22::Changeset, T23::Changeset,
        T24::Changeset, T25::Changeset, T26::Changeset, T27::Changeset,
        T28::Changeset, T29::Changeset, T30::Changeset, T31::Changeset);
    fn as_changeset(self) -> Self::Changeset {
        (self.0.as_changeset(), self.1.as_changeset(), self.2.as_changeset(),
            self.3.as_changeset(), self.4.as_changeset(),
            self.5.as_changeset(), self.6.as_changeset(),
            self.7.as_changeset(), self.8.as_changeset(),
            self.9.as_changeset(), self.10.as_changeset(),
            self.11.as_changeset(), self.12.as_changeset(),
            self.13.as_changeset(), self.14.as_changeset(),
            self.15.as_changeset(), self.16.as_changeset(),
            self.17.as_changeset(), self.18.as_changeset(),
            self.19.as_changeset(), self.20.as_changeset(),
            self.21.as_changeset(), self.22.as_changeset(),
            self.23.as_changeset(), self.24.as_changeset(),
            self.25.as_changeset(), self.26.as_changeset(),
            self.27.as_changeset(), self.28.as_changeset(),
            self.29.as_changeset(), self.30.as_changeset(),
            self.31.as_changeset())
    }
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    Parent> BelongsTo<Parent> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: BelongsTo<Parent> {
    type ForeignKey = T::ForeignKey;
    type ForeignKeyColumn = T::ForeignKeyColumn;
    fn foreign_key(&self) -> Option<&Self::ForeignKey> {
        self.0.foreign_key()
    }
    fn foreign_key_column() -> Self::ForeignKeyColumn {
        T::foreign_key_column()
    }
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    Next> TupleAppend<Next> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    {
    type Output =
        (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
        T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
        T30, T31, Next);
    #[allow(non_snake_case)]
    fn tuple_append(self, next: Next) -> Self::Output {
        let (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
                T27, T28, T29, T30, T31) = self;
        (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
            T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
            T29, T30, T31, next)
    }
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31>
    SqlType for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: SqlType, T1: SqlType, T2: SqlType, T3: SqlType, T4: SqlType,
    T5: SqlType, T6: SqlType, T7: SqlType, T8: SqlType, T9: SqlType,
    T10: SqlType, T11: SqlType, T12: SqlType, T13: SqlType, T14: SqlType,
    T15: SqlType, T16: SqlType, T17: SqlType, T18: SqlType, T19: SqlType,
    T20: SqlType, T21: SqlType, T22: SqlType, T23: SqlType, T24: SqlType,
    T25: SqlType, T26: SqlType, T27: SqlType, T28: SqlType, T29: SqlType,
    T30: SqlType, T31: SqlType, T1::IsNull: OneIsNullable<T::IsNull>,
    T2::IsNull: OneIsNullable<<T1::IsNull as OneIsNullable<T::IsNull>>::Out>,
    T3::IsNull: OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as OneIsNullable<T::IsNull>>::Out>>::Out>,
    T4::IsNull: OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>,
    T5::IsNull: OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>,
    T6::IsNull: OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T7::IsNull: OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T8::IsNull: OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T9::IsNull: OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T10::IsNull: OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T11::IsNull: OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T12::IsNull: OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T13::IsNull: OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T14::IsNull: OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T15::IsNull: OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T16::IsNull: OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T17::IsNull: OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T18::IsNull: OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T19::IsNull: OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T20::IsNull: OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T21::IsNull: OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T22::IsNull: OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T23::IsNull: OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T24::IsNull: OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T25::IsNull: OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T26::IsNull: OneIsNullable<<T25::IsNull as
    OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T27::IsNull: OneIsNullable<<T26::IsNull as
    OneIsNullable<<T25::IsNull as
    OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T28::IsNull: OneIsNullable<<T27::IsNull as
    OneIsNullable<<T26::IsNull as
    OneIsNullable<<T25::IsNull as
    OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T29::IsNull: OneIsNullable<<T28::IsNull as
    OneIsNullable<<T27::IsNull as
    OneIsNullable<<T26::IsNull as
    OneIsNullable<<T25::IsNull as
    OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T30::IsNull: OneIsNullable<<T29::IsNull as
    OneIsNullable<<T28::IsNull as
    OneIsNullable<<T27::IsNull as
    OneIsNullable<<T26::IsNull as
    OneIsNullable<<T25::IsNull as
    OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>,
    T31::IsNull: OneIsNullable<<T30::IsNull as
    OneIsNullable<<T29::IsNull as
    OneIsNullable<<T28::IsNull as
    OneIsNullable<<T27::IsNull as
    OneIsNullable<<T26::IsNull as
    OneIsNullable<<T25::IsNull as
    OneIsNullable<<T24::IsNull as
    OneIsNullable<<T23::IsNull as
    OneIsNullable<<T22::IsNull as
    OneIsNullable<<T21::IsNull as
    OneIsNullable<<T20::IsNull as
    OneIsNullable<<T19::IsNull as
    OneIsNullable<<T18::IsNull as
    OneIsNullable<<T17::IsNull as
    OneIsNullable<<T16::IsNull as
    OneIsNullable<<T15::IsNull as
    OneIsNullable<<T14::IsNull as
    OneIsNullable<<T13::IsNull as
    OneIsNullable<<T12::IsNull as
    OneIsNullable<<T11::IsNull as
    OneIsNullable<<T10::IsNull as
    OneIsNullable<<T9::IsNull as
    OneIsNullable<<T8::IsNull as
    OneIsNullable<<T7::IsNull as
    OneIsNullable<<T6::IsNull as
    OneIsNullable<<T5::IsNull as
    OneIsNullable<<T4::IsNull as
    OneIsNullable<<T3::IsNull as
    OneIsNullable<<T2::IsNull as
    OneIsNullable<<T1::IsNull as
    OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>
    {
    type IsNull =
        <T31::IsNull as
        OneIsNullable<<T30::IsNull as
        OneIsNullable<<T29::IsNull as
        OneIsNullable<<T28::IsNull as
        OneIsNullable<<T27::IsNull as
        OneIsNullable<<T26::IsNull as
        OneIsNullable<<T25::IsNull as
        OneIsNullable<<T24::IsNull as
        OneIsNullable<<T23::IsNull as
        OneIsNullable<<T22::IsNull as
        OneIsNullable<<T21::IsNull as
        OneIsNullable<<T20::IsNull as
        OneIsNullable<<T19::IsNull as
        OneIsNullable<<T18::IsNull as
        OneIsNullable<<T17::IsNull as
        OneIsNullable<<T16::IsNull as
        OneIsNullable<<T15::IsNull as
        OneIsNullable<<T14::IsNull as
        OneIsNullable<<T13::IsNull as
        OneIsNullable<<T12::IsNull as
        OneIsNullable<<T11::IsNull as
        OneIsNullable<<T10::IsNull as
        OneIsNullable<<T9::IsNull as
        OneIsNullable<<T8::IsNull as
        OneIsNullable<<T7::IsNull as
        OneIsNullable<<T6::IsNull as
        OneIsNullable<<T5::IsNull as
        OneIsNullable<<T4::IsNull as
        OneIsNullable<<T3::IsNull as
        OneIsNullable<<T2::IsNull as
        OneIsNullable<<T1::IsNull as
        OneIsNullable<T::IsNull>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out>>::Out;
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31>
    Queryable<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31), __DB> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where __DB: Backend,
    Self: FromStaticSqlRow<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
    ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31), __DB> {
    type Row = Self;
    fn build(row: Self::Row) -> deserialize::Result<Self> { Ok(row) }
}
impl<__T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31, __DB>
    FromStaticSqlRow<Nullable<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8,
    ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20,
    ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)>, __DB>
    for Option<__T> where __DB: Backend,
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31): SqlType,
    __T: FromSqlRow<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
    ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
    ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31), __DB> {
    #[allow(non_snake_case, unused_variables, unused_mut)]
    fn build_from_row<'a>(row: &impl Row<'a, __DB>)
        -> deserialize::Result<Self> {
        match <__T as
                    FromSqlRow<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9,
                    ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
                    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29,
                    ST30, ST31), __DB>>::build_from_row(row) {
            Ok(v) => Ok(Some(v)),
            Err(e) if e.is::<crate::result::UnexpectedNullError>() =>
                Ok(None),
            Err(e) => Err(e),
        }
    }
}
impl<__T, __DB, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31>
    Queryable<Nullable<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
    ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
    ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)>, __DB> for
    Option<__T> where __DB: Backend,
    Self: FromStaticSqlRow<Nullable<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7,
    ST8, ST9, ST10, ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19,
    ST20, ST21, ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)>,
    __DB>,
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31): SqlType {
    type Row = Self;
    fn build(row: Self::Row) -> deserialize::Result<Self> { Ok(row) }
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31>
    TupleSize for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where T: TupleSize, T1: TupleSize, T2: TupleSize, T3: TupleSize,
    T4: TupleSize, T5: TupleSize, T6: TupleSize, T7: TupleSize, T8: TupleSize,
    T9: TupleSize, T10: TupleSize, T11: TupleSize, T12: TupleSize,
    T13: TupleSize, T14: TupleSize, T15: TupleSize, T16: TupleSize,
    T17: TupleSize, T18: TupleSize, T19: TupleSize, T20: TupleSize,
    T21: TupleSize, T22: TupleSize, T23: TupleSize, T24: TupleSize,
    T25: TupleSize, T26: TupleSize, T27: TupleSize, T28: TupleSize,
    T29: TupleSize, T30: TupleSize, T31: TupleSize {
    const SIZE: usize =
        T::SIZE + T1::SIZE + T2::SIZE + T3::SIZE + T4::SIZE + T5::SIZE +
                                                                                                                    T6::SIZE + T7::SIZE + T8::SIZE + T9::SIZE + T10::SIZE +
                                                                                                T11::SIZE + T12::SIZE + T13::SIZE + T14::SIZE + T15::SIZE +
                                                                            T16::SIZE + T17::SIZE + T18::SIZE + T19::SIZE + T20::SIZE +
                                                        T21::SIZE + T22::SIZE + T23::SIZE + T24::SIZE + T25::SIZE +
                                    T26::SIZE + T27::SIZE + T28::SIZE + T29::SIZE + T30::SIZE +
                T31::SIZE + 0;
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31>
    TupleSize for
    Nullable<(T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
    T30, T31)> where T: TupleSize, T1: TupleSize, T2: TupleSize,
    T3: TupleSize, T4: TupleSize, T5: TupleSize, T6: TupleSize, T7: TupleSize,
    T8: TupleSize, T9: TupleSize, T10: TupleSize, T11: TupleSize,
    T12: TupleSize, T13: TupleSize, T14: TupleSize, T15: TupleSize,
    T16: TupleSize, T17: TupleSize, T18: TupleSize, T19: TupleSize,
    T20: TupleSize, T21: TupleSize, T22: TupleSize, T23: TupleSize,
    T24: TupleSize, T25: TupleSize, T26: TupleSize, T27: TupleSize,
    T28: TupleSize, T29: TupleSize, T30: TupleSize, T31: TupleSize,
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
    T31): SqlType {
    const SIZE: usize =
        T::SIZE + T1::SIZE + T2::SIZE + T3::SIZE + T4::SIZE + T5::SIZE +
                                                                                                                    T6::SIZE + T7::SIZE + T8::SIZE + T9::SIZE + T10::SIZE +
                                                                                                T11::SIZE + T12::SIZE + T13::SIZE + T14::SIZE + T15::SIZE +
                                                                            T16::SIZE + T17::SIZE + T18::SIZE + T19::SIZE + T20::SIZE +
                                                        T21::SIZE + T22::SIZE + T23::SIZE + T24::SIZE + T25::SIZE +
                                    T26::SIZE + T27::SIZE + T28::SIZE + T29::SIZE + T30::SIZE +
                T31::SIZE + 0;
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB>
    QueryMetadata<(T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
    T29, T30, T31)> for __DB where __DB: Backend, __DB: QueryMetadata<T>,
    __DB: QueryMetadata<T1>, __DB: QueryMetadata<T2>, __DB: QueryMetadata<T3>,
    __DB: QueryMetadata<T4>, __DB: QueryMetadata<T5>, __DB: QueryMetadata<T6>,
    __DB: QueryMetadata<T7>, __DB: QueryMetadata<T8>, __DB: QueryMetadata<T9>,
    __DB: QueryMetadata<T10>, __DB: QueryMetadata<T11>,
    __DB: QueryMetadata<T12>, __DB: QueryMetadata<T13>,
    __DB: QueryMetadata<T14>, __DB: QueryMetadata<T15>,
    __DB: QueryMetadata<T16>, __DB: QueryMetadata<T17>,
    __DB: QueryMetadata<T18>, __DB: QueryMetadata<T19>,
    __DB: QueryMetadata<T20>, __DB: QueryMetadata<T21>,
    __DB: QueryMetadata<T22>, __DB: QueryMetadata<T23>,
    __DB: QueryMetadata<T24>, __DB: QueryMetadata<T25>,
    __DB: QueryMetadata<T26>, __DB: QueryMetadata<T27>,
    __DB: QueryMetadata<T28>, __DB: QueryMetadata<T29>,
    __DB: QueryMetadata<T30>, __DB: QueryMetadata<T31> {
    fn row_metadata(lookup: &mut Self::MetadataLookup,
        row: &mut Vec<Option<__DB::TypeMetadata>>) {
        <__DB as QueryMetadata<T>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T1>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T2>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T3>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T4>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T5>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T6>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T7>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T8>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T9>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T10>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T11>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T12>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T13>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T14>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T15>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T16>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T17>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T18>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T19>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T20>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T21>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T22>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T23>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T24>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T25>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T26>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T27>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T28>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T29>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T30>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T31>>::row_metadata(lookup, row);
    }
}
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB>
    QueryMetadata<Nullable<(T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
    T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
    T27, T28, T29, T30, T31)>> for __DB where __DB: Backend,
    __DB: QueryMetadata<T>, __DB: QueryMetadata<T1>, __DB: QueryMetadata<T2>,
    __DB: QueryMetadata<T3>, __DB: QueryMetadata<T4>, __DB: QueryMetadata<T5>,
    __DB: QueryMetadata<T6>, __DB: QueryMetadata<T7>, __DB: QueryMetadata<T8>,
    __DB: QueryMetadata<T9>, __DB: QueryMetadata<T10>,
    __DB: QueryMetadata<T11>, __DB: QueryMetadata<T12>,
    __DB: QueryMetadata<T13>, __DB: QueryMetadata<T14>,
    __DB: QueryMetadata<T15>, __DB: QueryMetadata<T16>,
    __DB: QueryMetadata<T17>, __DB: QueryMetadata<T18>,
    __DB: QueryMetadata<T19>, __DB: QueryMetadata<T20>,
    __DB: QueryMetadata<T21>, __DB: QueryMetadata<T22>,
    __DB: QueryMetadata<T23>, __DB: QueryMetadata<T24>,
    __DB: QueryMetadata<T25>, __DB: QueryMetadata<T26>,
    __DB: QueryMetadata<T27>, __DB: QueryMetadata<T28>,
    __DB: QueryMetadata<T29>, __DB: QueryMetadata<T30>,
    __DB: QueryMetadata<T31> {
    fn row_metadata(lookup: &mut Self::MetadataLookup,
        row: &mut Vec<Option<__DB::TypeMetadata>>) {
        <__DB as QueryMetadata<T>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T1>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T2>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T3>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T4>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T5>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T6>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T7>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T8>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T9>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T10>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T11>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T12>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T13>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T14>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T15>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T16>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T17>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T18>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T19>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T20>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T21>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T22>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T23>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T24>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T25>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T26>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T27>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T28>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T29>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T30>>::row_metadata(lookup, row);
        <__DB as QueryMetadata<T31>>::row_metadata(lookup, row);
    }
}
#[doc(hidden)]
impl<T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31,
    __DB> deserialize::QueryableByName<__DB> for
    (T, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,
    T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31)
    where __DB: Backend, T: deserialize::QueryableByName<__DB>,
    T1: deserialize::QueryableByName<__DB>,
    T2: deserialize::QueryableByName<__DB>,
    T3: deserialize::QueryableByName<__DB>,
    T4: deserialize::QueryableByName<__DB>,
    T5: deserialize::QueryableByName<__DB>,
    T6: deserialize::QueryableByName<__DB>,
    T7: deserialize::QueryableByName<__DB>,
    T8: deserialize::QueryableByName<__DB>,
    T9: deserialize::QueryableByName<__DB>,
    T10: deserialize::QueryableByName<__DB>,
    T11: deserialize::QueryableByName<__DB>,
    T12: deserialize::QueryableByName<__DB>,
    T13: deserialize::QueryableByName<__DB>,
    T14: deserialize::QueryableByName<__DB>,
    T15: deserialize::QueryableByName<__DB>,
    T16: deserialize::QueryableByName<__DB>,
    T17: deserialize::QueryableByName<__DB>,
    T18: deserialize::QueryableByName<__DB>,
    T19: deserialize::QueryableByName<__DB>,
    T20: deserialize::QueryableByName<__DB>,
    T21: deserialize::QueryableByName<__DB>,
    T22: deserialize::QueryableByName<__DB>,
    T23: deserialize::QueryableByName<__DB>,
    T24: deserialize::QueryableByName<__DB>,
    T25: deserialize::QueryableByName<__DB>,
    T26: deserialize::QueryableByName<__DB>,
    T27: deserialize::QueryableByName<__DB>,
    T28: deserialize::QueryableByName<__DB>,
    T29: deserialize::QueryableByName<__DB>,
    T30: deserialize::QueryableByName<__DB>,
    T31: deserialize::QueryableByName<__DB> {
    fn build<'a>(row: &impl NamedRow<'a, __DB>) -> deserialize::Result<Self> {
        Ok((<T as deserialize::QueryableByName<__DB>>::build(row)?,
                <T1 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T2 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T3 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T4 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T5 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T6 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T7 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T8 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T9 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T10 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T11 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T12 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T13 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T14 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T15 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T16 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T17 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T18 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T19 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T20 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T21 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T22 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T23 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T24 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T25 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T26 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T27 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T28 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T29 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T30 as deserialize::QueryableByName<__DB>>::build(row)?,
                <T31 as deserialize::QueryableByName<__DB>>::build(row)?))
    }
}
#[diagnostic::do_not_recommend]
impl<__T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31, __DB> CompatibleType<__T, __DB>
    for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31) where __DB: Backend,
    __T: FromSqlRow<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
    ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22,
    ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31), __DB> {
    type SqlType = Self;
}
impl<__T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24,
    ST25, ST26, ST27, ST28, ST29, ST30, ST31, __DB>
    CompatibleType<Option<__T>, __DB> for
    Nullable<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)> where __DB: Backend,
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31): CompatibleType<__T, __DB> {
    type SqlType =
        Nullable<<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10,
        ST11, ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21,
        ST22, ST23, ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31) as
        CompatibleType<__T, __DB>>::SqlType>;
}
impl<ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31> SqlTypeOrSelectable for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31) where ST: SqlTypeOrSelectable,
    ST1: SqlTypeOrSelectable, ST2: SqlTypeOrSelectable,
    ST3: SqlTypeOrSelectable, ST4: SqlTypeOrSelectable,
    ST5: SqlTypeOrSelectable, ST6: SqlTypeOrSelectable,
    ST7: SqlTypeOrSelectable, ST8: SqlTypeOrSelectable,
    ST9: SqlTypeOrSelectable, ST10: SqlTypeOrSelectable,
    ST11: SqlTypeOrSelectable, ST12: SqlTypeOrSelectable,
    ST13: SqlTypeOrSelectable, ST14: SqlTypeOrSelectable,
    ST15: SqlTypeOrSelectable, ST16: SqlTypeOrSelectable,
    ST17: SqlTypeOrSelectable, ST18: SqlTypeOrSelectable,
    ST19: SqlTypeOrSelectable, ST20: SqlTypeOrSelectable,
    ST21: SqlTypeOrSelectable, ST22: SqlTypeOrSelectable,
    ST23: SqlTypeOrSelectable, ST24: SqlTypeOrSelectable,
    ST25: SqlTypeOrSelectable, ST26: SqlTypeOrSelectable,
    ST27: SqlTypeOrSelectable, ST28: SqlTypeOrSelectable,
    ST29: SqlTypeOrSelectable, ST30: SqlTypeOrSelectable,
    ST31: SqlTypeOrSelectable {}
impl<ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31> SqlTypeOrSelectable for
    Nullable<(ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11,
    ST12, ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23,
    ST24, ST25, ST26, ST27, ST28, ST29, ST30, ST31)> where
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22, ST23, ST24, ST25,
    ST26, ST27, ST28, ST29, ST30, ST31): SqlTypeOrSelectable {}diesel_derives::__diesel_for_each_tuple!(tuple_impls);