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