diff --git a/sqlx-core/src/any/arguments.rs b/sqlx-core/src/any/arguments.rs index 59a0c0f765..4fb1a67b3a 100644 --- a/sqlx-core/src/any/arguments.rs +++ b/sqlx-core/src/any/arguments.rs @@ -28,6 +28,10 @@ impl<'q> Arguments<'q> for AnyArguments<'q> { fn len(&self) -> usize { self.values.0.len() } + + fn merge(&mut self, other: Self) { + self.values.0.extend(other.values.0); + } } pub struct AnyArgumentBuffer<'q>(#[doc(hidden)] pub Vec>); diff --git a/sqlx-core/src/arguments.rs b/sqlx-core/src/arguments.rs index 4bf826ed31..b224010334 100644 --- a/sqlx-core/src/arguments.rs +++ b/sqlx-core/src/arguments.rs @@ -27,6 +27,8 @@ pub trait Arguments<'q>: Send + Sized + Default { fn format_placeholder(&self, writer: &mut W) -> fmt::Result { writer.write_str("?") } + + fn merge(&mut self, other: Self); } pub trait IntoArguments<'q, DB: Database>: Sized + Send { diff --git a/sqlx-mysql/src/arguments.rs b/sqlx-mysql/src/arguments.rs index 464529cba2..8c81256a7a 100644 --- a/sqlx-mysql/src/arguments.rs +++ b/sqlx-mysql/src/arguments.rs @@ -55,6 +55,13 @@ impl<'q> Arguments<'q> for MySqlArguments { fn len(&self) -> usize { self.types.len() } + + fn merge(&mut self, other: Self) { + self.types.extend(other.types); + self.values.extend(other.values); + self.null_bitmap.bytes.extend(other.null_bitmap.bytes); + self.null_bitmap.length += other.null_bitmap.length; + } } #[derive(Debug, Default, Clone)] diff --git a/sqlx-postgres/src/arguments.rs b/sqlx-postgres/src/arguments.rs index bc7e861c52..ce56ce41e1 100644 --- a/sqlx-postgres/src/arguments.rs +++ b/sqlx-postgres/src/arguments.rs @@ -145,6 +145,14 @@ impl<'q> Arguments<'q> for PgArguments { write!(writer, "${}", self.buffer.count) } + fn merge(&mut self, other: Self) { + self.types.extend(other.types); + self.buffer.extend_from_slice(&other.buffer); + self.buffer.count += other.buffer.count; + self.buffer.patches.extend(other.buffer.patches); + self.buffer.type_holes.extend(other.buffer.type_holes); + } + #[inline(always)] fn len(&self) -> usize { self.buffer.count diff --git a/sqlx-sqlite/src/arguments.rs b/sqlx-sqlite/src/arguments.rs index 410b4caa99..b8177f78cf 100644 --- a/sqlx-sqlite/src/arguments.rs +++ b/sqlx-sqlite/src/arguments.rs @@ -72,6 +72,10 @@ impl<'q> Arguments<'q> for SqliteArguments<'q> { fn len(&self) -> usize { self.values.len() } + + fn merge(&mut self, other: Self) { + self.values.extend(other.values); + } } impl SqliteArguments<'_> {