Skip to main content

diesel/type_impls/
tuples.rs

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