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