sqlc-gen-sqlx 0.2.4

A sqlc plugin that generates type-safe sqlx Rust code from SQL queries.
Documentation
---
source: tests/codegen.rs
expression: code
---
// Code generated by sqlc-gen-sqlx v[VERSION]. DO NOT EDIT.
// sqlc version: [VERSION]

#![allow(
    dead_code,
    reason = "generated queries may expose items a caller does not use"
)]

pub trait AsExecutor {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres>;
}
impl AsExecutor for sqlx::PgPool {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres> {
        &*self
    }
}
impl AsExecutor for &sqlx::PgPool {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres> {
        *self
    }
}
impl AsExecutor for sqlx::PgConnection {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres> {
        &mut *self
    }
}
impl AsExecutor for sqlx::Transaction<'_, sqlx::Postgres> {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres> {
        &mut **self
    }
}
impl AsExecutor for sqlx::pool::PoolConnection<sqlx::Postgres> {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres> {
        &mut **self
    }
}
impl<T: AsExecutor + ?Sized> AsExecutor for &mut T {
    fn as_executor(&mut self) -> impl sqlx::Executor<'_, Database = sqlx::Postgres> {
        (**self).as_executor()
    }
}
#[derive(Debug, Clone)]
pub struct CopyAuthorsParams {
    pub name: String,
    pub bio: Option<String>,
}
pub const COPY_AUTHORS: &str = "INSERT INTO authors (name, bio) ";
const COPY_AUTHORS_BATCH_SIZE: usize = 32767usize;
pub async fn copy_authors<E: AsExecutor, I>(
    mut db: E,
    items: I,
) -> Result<u64, sqlx::Error>
where
    I: IntoIterator<Item = CopyAuthorsParams>,
{
    let mut rows_affected = 0u64;
    let mut items = items.into_iter();
    loop {
        let chunk = items.by_ref().take(COPY_AUTHORS_BATCH_SIZE).collect::<Vec<_>>();
        if chunk.is_empty() {
            break;
        }
        let mut query_builder = sqlx::QueryBuilder::<sqlx::Postgres>::new(COPY_AUTHORS);
        query_builder
            .push_values(
                chunk,
                |mut b, item| {
                    b.push_bind(item.name);
                    b.push_bind(item.bio);
                },
            );
        rows_affected
            += query_builder.build().execute(db.as_executor()).await?.rows_affected();
    }
    Ok(rows_affected)
}