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