Skip to main content

diesel/pg/query_builder/copy/
mod.rs

1use crate::Expression;
2use crate::pg::Pg;
3use crate::query_builder::ColumnList;
4use crate::query_builder::QueryFragment;
5use crate::query_builder::nodes::StaticQueryFragment;
6use crate::sql_types::SqlType;
7use crate::{Column, Table};
8
9pub(crate) mod copy_from;
10pub(crate) mod copy_to;
11
12#[cfg(feature = "postgres")]
13pub(crate) use self::copy_from::{CopyFromExpression, InternalCopyFromQuery};
14#[cfg(feature = "postgres")]
15pub(crate) use self::copy_to::CopyToCommand;
16
17pub use self::copy_from::{CopyFromQuery, CopyHeader, ExecuteCopyFromDsl};
18pub use self::copy_to::CopyToQuery;
19
20const COPY_MAGIC_HEADER: [u8; 11] = *b"PGCOPY\n\xff\r\n\0";
21
22/// Describes the format used by `COPY FROM` or `COPY TO`
23/// statements
24///
25/// See [the postgresql documentation](https://www.postgresql.org/docs/current/sql-copy.html)
26/// for details about the different formats
27#[derive(#[automatically_derived]impl ::core::default::Default for CopyFormat {
    #[inline]
    fn default() -> Self { Self::Text }
}Default, #[automatically_derived]impl ::core::fmt::Debug for CopyFormat {
    #[inline]
    #[rustc_trivial_field_reads]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                CopyFormat::Text => "Text",
                CopyFormat::Csv => "Csv",
                CopyFormat::Binary => "Binary",
            })
    }
}Debug, #[automatically_derived]impl ::core::marker::Copy for CopyFormat { }Copy, #[automatically_derived]#[doc(hidden)]unsafe impl ::core::clone::TrivialClone
    for CopyFormat {
}
#[automatically_derived]impl ::core::clone::Clone for CopyFormat {
    #[inline]
    #[rustc_trivial_field_reads]
    fn clone(&self) -> Self { *self }
}Clone)]
28pub enum CopyFormat {
29    /// The postgresql text format
30    ///
31    /// This format is the default if no format is explicitly set
32    #[default]
33    Text,
34    /// Represents the data as comma separated values (CSV)
35    Csv,
36    /// The postgresql binary format
37    Binary,
38}
39
40impl CopyFormat {
41    fn to_sql_format(self) -> &'static str {
42        match self {
43            CopyFormat::Text => "text",
44            CopyFormat::Csv => "csv",
45            CopyFormat::Binary => "binary",
46        }
47    }
48}
49
50#[derive(#[automatically_derived]impl ::core::default::Default for CommonOptions {
    #[inline]
    fn default() -> Self {
        CommonOptions {
            format: ::core::default::Default::default(),
            freeze: ::core::default::Default::default(),
            delimiter: ::core::default::Default::default(),
            null: ::core::default::Default::default(),
            quote: ::core::default::Default::default(),
            escape: ::core::default::Default::default(),
        }
    }
}Default, #[automatically_derived]impl ::core::fmt::Debug for CommonOptions {
    #[inline]
    #[rustc_trivial_field_reads]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            "CommonOptions format freeze delimiter null quote escape";
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.format, &self.freeze, &self.delimiter, &self.null,
                        &self.quote, &&self.escape];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, names, values)
    }
}Debug)]
51struct CommonOptions {
52    format: Option<CopyFormat>,
53    freeze: Option<bool>,
54    delimiter: Option<char>,
55    null: Option<String>,
56    quote: Option<char>,
57    escape: Option<char>,
58}
59
60impl CommonOptions {
61    fn any_set(&self) -> bool {
62        self.format.is_some()
63            || self.freeze.is_some()
64            || self.delimiter.is_some()
65            || self.null.is_some()
66            || self.quote.is_some()
67            || self.escape.is_some()
68    }
69
70    fn walk_ast<'b>(
71        &'b self,
72        mut pass: crate::query_builder::AstPass<'_, 'b, Pg>,
73        comma: &mut &'static str,
74    ) {
75        if let Some(format) = self.format {
76            pass.push_sql(comma);
77            *comma = ", ";
78            pass.push_sql("FORMAT ");
79            pass.push_sql(format.to_sql_format());
80        }
81        if let Some(freeze) = self.freeze {
82            pass.push_sql(&::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{1}FREEZE {0}", freeze as u8,
                comma))
    })format!("{comma}FREEZE {}", freeze as u8));
83            *comma = ", ";
84        }
85        if let Some(delimiter) = self.delimiter {
86            // we need to take care for the quoting character here
87            let delimiter = if delimiter == '\'' {
88                "''".into()
89            } else {
90                String::from(delimiter)
91            };
92            pass.push_sql(&::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}DELIMITER \'{1}\'", comma,
                delimiter))
    })format!("{comma}DELIMITER '{delimiter}'"));
93            *comma = ", ";
94        }
95        if let Some(ref null) = self.null {
96            pass.push_sql(comma);
97            *comma = ", ";
98            // we cannot use binds here
99            // so we need to make sure quotes in
100            // the input are handled correctly
101            let null = null.replace('\'', "''");
102            pass.push_sql("NULL '");
103            pass.push_sql(&null);
104            pass.push_sql("'");
105        }
106        if let Some(quote) = self.quote {
107            // we need to take care for the quoting character here
108            let quote = if quote == '\'' {
109                "''".into()
110            } else {
111                String::from(quote)
112            };
113            pass.push_sql(&::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}QUOTE \'{1}\'", comma, quote))
    })format!("{comma}QUOTE '{quote}'"));
114            *comma = ", ";
115        }
116        if let Some(escape) = self.escape {
117            // we need to take care for the quoting character here
118            let escape = if escape == '\'' {
119                "''".into()
120            } else {
121                String::from(escape)
122            };
123            pass.push_sql(&::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}ESCAPE \'{1}\'", comma, escape))
    })format!("{comma}ESCAPE '{escape}'"));
124            *comma = ", ";
125        }
126    }
127}
128
129/// A expression that could be used as target/source for `COPY FROM` and `COPY TO` commands
130///
131/// This trait is implemented for any table type and for tuples of columns from the same table
132pub trait CopyTarget {
133    /// The table targeted by the command
134    type Table: Table;
135    /// The sql side type of the target expression
136    type SqlType: SqlType;
137
138    #[doc(hidden)]
139    fn walk_target(pass: crate::query_builder::AstPass<'_, '_, Pg>) -> crate::QueryResult<()>;
140}
141
142impl<T> CopyTarget for T
143where
144    T: Table + StaticQueryFragment,
145    T::SqlType: SqlType,
146    T::AllColumns: ColumnList,
147    T::Component: QueryFragment<Pg>,
148{
149    type Table = Self;
150    type SqlType = T::SqlType;
151
152    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>) -> crate::QueryResult<()> {
153        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
154        pass.push_sql("(");
155        T::all_columns().walk_ast(pass.reborrow())?;
156        pass.push_sql(")");
157        Ok(())
158    }
159}
160
161macro_rules! copy_target_for_columns {
162    ($(
163        $Tuple:tt {
164            $(($idx:tt) -> $T:ident, $ST:ident, $TT:ident,)+
165        }
166    )+) => {
167        $(
168            impl<T, $($ST,)*> CopyTarget for ($($ST,)*)
169            where
170                $($ST: Column<Table = T> + Default,)*
171                ($(<$ST as Expression>::SqlType,)*): SqlType,
172                T: Table + StaticQueryFragment,
173                T::Component: QueryFragment<Pg>,
174                Self: ColumnList,
175            {
176                type Table = T;
177                type SqlType = crate::dsl::SqlTypeOf<Self>;
178
179                fn walk_target(
180                    mut pass: crate::query_builder::AstPass<'_, '_, Pg>,
181                ) -> crate::QueryResult<()> {
182                    T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
183                    pass.push_sql("(");
184                    <Self as ColumnList>::walk_ast(&($($ST::default(),)*), pass.reborrow())?;
185                    pass.push_sql(")");
186                    Ok(())
187                }
188            }
189        )*
190    }
191}
192
193impl<T, ST> CopyTarget for (ST,) where ST: Column<Table = T> + Default,
    (<ST as Expression>::SqlType,): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as ColumnList>::walk_ast(&(ST::default(),), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1> CopyTarget for (ST, ST1) where ST: Column<Table = T> +
    Default, ST1: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2> CopyTarget for (ST, ST1, ST2) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3> CopyTarget for (ST, ST1, ST2, ST3) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4> CopyTarget for (ST, ST1, ST2, ST3, ST4) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7) where ST: Column<Table = T> +
    Default, ST1: Column<Table = T> + Default, ST2: Column<Table = T> +
    Default, ST3: Column<Table = T> + Default, ST4: Column<Table = T> +
    Default, ST5: Column<Table = T> + Default, ST6: Column<Table = T> +
    Default, ST7: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8) where ST: Column<Table = T> +
    Default, ST1: Column<Table = T> + Default, ST2: Column<Table = T> +
    Default, ST3: Column<Table = T> + Default, ST4: Column<Table = T> +
    Default, ST5: Column<Table = T> + Default, ST6: Column<Table = T> +
    Default, ST7: Column<Table = T> + Default, ST8: Column<Table = T> +
    Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11>
    CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12>
    CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13)
    where ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default, ST13: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14) where ST: Column<Table = T> + Default, ST1: Column<Table = T> +
    Default, ST2: Column<Table = T> + Default, ST3: Column<Table = T> +
    Default, ST4: Column<Table = T> + Default, ST5: Column<Table = T> +
    Default, ST6: Column<Table = T> + Default, ST7: Column<Table = T> +
    Default, ST8: Column<Table = T> + Default, ST9: Column<Table = T> +
    Default, ST10: Column<Table = T> + Default, ST11: Column<Table = T> +
    Default, ST12: Column<Table = T> + Default, ST13: Column<Table = T> +
    Default, ST14: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default()), pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    ST19: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}
impl<T, ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12,
    ST13, ST14, ST15, ST16, ST17, ST18, ST19, ST20> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20) where ST: Column<Table = T> +
    Default, ST1: Column<Table = T> + Default, ST2: Column<Table = T> +
    Default, ST3: Column<Table = T> + Default, ST4: Column<Table = T> +
    Default, ST5: Column<Table = T> + Default, ST6: Column<Table = T> +
    Default, ST7: Column<Table = T> + Default, ST8: Column<Table = T> +
    Default, ST9: Column<Table = T> + Default, ST10: Column<Table = T> +
    Default, ST11: Column<Table = T> + Default, ST12: Column<Table = T> +
    Default, ST13: Column<Table = T> + Default, ST14: Column<Table = T> +
    Default, ST15: Column<Table = T> + Default, ST16: Column<Table = T> +
    Default, ST17: Column<Table = T> + Default, ST18: Column<Table = T> +
    Default, ST19: Column<Table = T> + Default, ST20: Column<Table = T> +
    Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default, ST13: Column<Table = T> + Default,
    ST14: Column<Table = T> + Default, ST15: Column<Table = T> + Default,
    ST16: Column<Table = T> + Default, ST17: Column<Table = T> + Default,
    ST18: Column<Table = T> + Default, ST19: Column<Table = T> + Default,
    ST20: Column<Table = T> + Default, ST21: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget for
    (ST, ST1, ST2, ST3, ST4, ST5, ST6, ST7, ST8, ST9, ST10, ST11, ST12, ST13,
    ST14, ST15, ST16, ST17, ST18, ST19, ST20, ST21, ST22) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default, ST13: Column<Table = T> + Default,
    ST14: Column<Table = T> + Default, ST15: Column<Table = T> + Default,
    ST16: Column<Table = T> + Default, ST17: Column<Table = T> + Default,
    ST18: Column<Table = T> + Default, ST19: Column<Table = T> + Default,
    ST20: Column<Table = T> + Default, ST21: Column<Table = T> + Default,
    ST22: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        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>
    CopyTarget 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) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default, ST13: Column<Table = T> + Default,
    ST14: Column<Table = T> + Default, ST15: Column<Table = T> + Default,
    ST16: Column<Table = T> + Default, ST17: Column<Table = T> + Default,
    ST18: Column<Table = T> + Default, ST19: Column<Table = T> + Default,
    ST20: Column<Table = T> + Default, ST21: Column<Table = T> + Default,
    ST22: Column<Table = T> + Default, ST23: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default()), pass.reborrow())?;
        pass.push_sql(")");
        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>
    CopyTarget 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) where
    ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default, ST13: Column<Table = T> + Default,
    ST14: Column<Table = T> + Default, ST15: Column<Table = T> + Default,
    ST16: Column<Table = T> + Default, ST17: Column<Table = T> + Default,
    ST18: Column<Table = T> + Default, ST19: Column<Table = T> + Default,
    ST20: Column<Table = T> + Default, ST21: Column<Table = T> + Default,
    ST22: Column<Table = T> + Default, ST23: Column<Table = T> + Default,
    ST24: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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)
    where ST: Column<Table = T> + Default, ST1: Column<Table = T> + Default,
    ST2: Column<Table = T> + Default, ST3: Column<Table = T> + Default,
    ST4: Column<Table = T> + Default, ST5: Column<Table = T> + Default,
    ST6: Column<Table = T> + Default, ST7: Column<Table = T> + Default,
    ST8: Column<Table = T> + Default, ST9: Column<Table = T> + Default,
    ST10: Column<Table = T> + Default, ST11: Column<Table = T> + Default,
    ST12: Column<Table = T> + Default, ST13: Column<Table = T> + Default,
    ST14: Column<Table = T> + Default, ST15: Column<Table = T> + Default,
    ST16: Column<Table = T> + Default, ST17: Column<Table = T> + Default,
    ST18: Column<Table = T> + Default, ST19: Column<Table = T> + Default,
    ST20: Column<Table = T> + Default, ST21: Column<Table = T> + Default,
    ST22: Column<Table = T> + Default, ST23: Column<Table = T> + Default,
    ST24: Column<Table = T> + Default, ST25: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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) where ST: Column<Table = T> + Default, ST1: Column<Table = T> +
    Default, ST2: Column<Table = T> + Default, ST3: Column<Table = T> +
    Default, ST4: Column<Table = T> + Default, ST5: Column<Table = T> +
    Default, ST6: Column<Table = T> + Default, ST7: Column<Table = T> +
    Default, ST8: Column<Table = T> + Default, ST9: Column<Table = T> +
    Default, ST10: Column<Table = T> + Default, ST11: Column<Table = T> +
    Default, ST12: Column<Table = T> + Default, ST13: Column<Table = T> +
    Default, ST14: Column<Table = T> + Default, ST15: Column<Table = T> +
    Default, ST16: Column<Table = T> + Default, ST17: Column<Table = T> +
    Default, ST18: Column<Table = T> + Default, ST19: Column<Table = T> +
    Default, ST20: Column<Table = T> + Default, ST21: Column<Table = T> +
    Default, ST22: Column<Table = T> + Default, ST23: Column<Table = T> +
    Default, ST24: Column<Table = T> + Default, ST25: Column<Table = T> +
    Default, ST26: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType,
    <ST26 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default(),
                        ST26::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    ST19: Column<Table = T> + Default, ST20: Column<Table = T> + Default,
    ST21: Column<Table = T> + Default, ST22: Column<Table = T> + Default,
    ST23: Column<Table = T> + Default, ST24: Column<Table = T> + Default,
    ST25: Column<Table = T> + Default, ST26: Column<Table = T> + Default,
    ST27: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType,
    <ST26 as Expression>::SqlType, <ST27 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default(),
                        ST26::default(), ST27::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    ST19: Column<Table = T> + Default, ST20: Column<Table = T> + Default,
    ST21: Column<Table = T> + Default, ST22: Column<Table = T> + Default,
    ST23: Column<Table = T> + Default, ST24: Column<Table = T> + Default,
    ST25: Column<Table = T> + Default, ST26: Column<Table = T> + Default,
    ST27: Column<Table = T> + Default, ST28: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType,
    <ST26 as Expression>::SqlType, <ST27 as Expression>::SqlType,
    <ST28 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default(),
                        ST26::default(), ST27::default(), ST28::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    ST19: Column<Table = T> + Default, ST20: Column<Table = T> + Default,
    ST21: Column<Table = T> + Default, ST22: Column<Table = T> + Default,
    ST23: Column<Table = T> + Default, ST24: Column<Table = T> + Default,
    ST25: Column<Table = T> + Default, ST26: Column<Table = T> + Default,
    ST27: Column<Table = T> + Default, ST28: Column<Table = T> + Default,
    ST29: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType,
    <ST26 as Expression>::SqlType, <ST27 as Expression>::SqlType,
    <ST28 as Expression>::SqlType, <ST29 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default(),
                        ST26::default(), ST27::default(), ST28::default(),
                        ST29::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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) where ST: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    ST19: Column<Table = T> + Default, ST20: Column<Table = T> + Default,
    ST21: Column<Table = T> + Default, ST22: Column<Table = T> + Default,
    ST23: Column<Table = T> + Default, ST24: Column<Table = T> + Default,
    ST25: Column<Table = T> + Default, ST26: Column<Table = T> + Default,
    ST27: Column<Table = T> + Default, ST28: Column<Table = T> + Default,
    ST29: Column<Table = T> + Default, ST30: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType,
    <ST26 as Expression>::SqlType, <ST27 as Expression>::SqlType,
    <ST28 as Expression>::SqlType, <ST29 as Expression>::SqlType,
    <ST30 as Expression>::SqlType): SqlType, T: Table + StaticQueryFragment,
    T::Component: QueryFragment<Pg>, Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default(),
                        ST26::default(), ST27::default(), ST28::default(),
                        ST29::default(), ST30::default()), pass.reborrow())?;
        pass.push_sql(")");
        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> CopyTarget 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: Column<Table = T> + Default,
    ST1: Column<Table = T> + Default, ST2: Column<Table = T> + Default,
    ST3: Column<Table = T> + Default, ST4: Column<Table = T> + Default,
    ST5: Column<Table = T> + Default, ST6: Column<Table = T> + Default,
    ST7: Column<Table = T> + Default, ST8: Column<Table = T> + Default,
    ST9: Column<Table = T> + Default, ST10: Column<Table = T> + Default,
    ST11: Column<Table = T> + Default, ST12: Column<Table = T> + Default,
    ST13: Column<Table = T> + Default, ST14: Column<Table = T> + Default,
    ST15: Column<Table = T> + Default, ST16: Column<Table = T> + Default,
    ST17: Column<Table = T> + Default, ST18: Column<Table = T> + Default,
    ST19: Column<Table = T> + Default, ST20: Column<Table = T> + Default,
    ST21: Column<Table = T> + Default, ST22: Column<Table = T> + Default,
    ST23: Column<Table = T> + Default, ST24: Column<Table = T> + Default,
    ST25: Column<Table = T> + Default, ST26: Column<Table = T> + Default,
    ST27: Column<Table = T> + Default, ST28: Column<Table = T> + Default,
    ST29: Column<Table = T> + Default, ST30: Column<Table = T> + Default,
    ST31: Column<Table = T> + Default,
    (<ST as Expression>::SqlType, <ST1 as Expression>::SqlType,
    <ST2 as Expression>::SqlType, <ST3 as Expression>::SqlType,
    <ST4 as Expression>::SqlType, <ST5 as Expression>::SqlType,
    <ST6 as Expression>::SqlType, <ST7 as Expression>::SqlType,
    <ST8 as Expression>::SqlType, <ST9 as Expression>::SqlType,
    <ST10 as Expression>::SqlType, <ST11 as Expression>::SqlType,
    <ST12 as Expression>::SqlType, <ST13 as Expression>::SqlType,
    <ST14 as Expression>::SqlType, <ST15 as Expression>::SqlType,
    <ST16 as Expression>::SqlType, <ST17 as Expression>::SqlType,
    <ST18 as Expression>::SqlType, <ST19 as Expression>::SqlType,
    <ST20 as Expression>::SqlType, <ST21 as Expression>::SqlType,
    <ST22 as Expression>::SqlType, <ST23 as Expression>::SqlType,
    <ST24 as Expression>::SqlType, <ST25 as Expression>::SqlType,
    <ST26 as Expression>::SqlType, <ST27 as Expression>::SqlType,
    <ST28 as Expression>::SqlType, <ST29 as Expression>::SqlType,
    <ST30 as Expression>::SqlType, <ST31 as Expression>::SqlType): SqlType,
    T: Table + StaticQueryFragment, T::Component: QueryFragment<Pg>,
    Self: ColumnList {
    type Table = T;
    type SqlType = crate::dsl::SqlTypeOf<Self>;
    fn walk_target(mut pass: crate::query_builder::AstPass<'_, '_, Pg>)
        -> crate::QueryResult<()> {
        T::STATIC_COMPONENT.walk_ast(pass.reborrow())?;
        pass.push_sql("(");
        <Self as
                    ColumnList>::walk_ast(&(ST::default(), ST1::default(),
                        ST2::default(), ST3::default(), ST4::default(),
                        ST5::default(), ST6::default(), ST7::default(),
                        ST8::default(), ST9::default(), ST10::default(),
                        ST11::default(), ST12::default(), ST13::default(),
                        ST14::default(), ST15::default(), ST16::default(),
                        ST17::default(), ST18::default(), ST19::default(),
                        ST20::default(), ST21::default(), ST22::default(),
                        ST23::default(), ST24::default(), ST25::default(),
                        ST26::default(), ST27::default(), ST28::default(),
                        ST29::default(), ST30::default(), ST31::default()),
                pass.reborrow())?;
        pass.push_sql(")");
        Ok(())
    }
}crate::for_each_tuple!(copy_target_for_columns);