Skip to main content

reifydb_sqlite/
batch.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026 ReifyDB
3
4use std::fmt::Write;
5
6pub fn values_placeholders(rows: usize, cols: usize) -> String {
7	let mut sql = String::with_capacity(rows * (cols * 2 + 2));
8	let mut n = 1usize;
9	for r in 0..rows {
10		if r > 0 {
11			sql.push(',');
12		}
13		sql.push('(');
14		for c in 0..cols {
15			if c > 0 {
16				sql.push(',');
17			}
18			write!(sql, "?{n}").unwrap();
19			n += 1;
20		}
21		sql.push(')');
22	}
23	sql
24}
25
26#[cfg(test)]
27mod tests {
28	use super::values_placeholders;
29
30	#[test]
31	fn one_row_one_column_is_a_single_placeholder() {
32		assert_eq!(values_placeholders(1, 1), "(?1)");
33	}
34
35	#[test]
36	fn one_row_three_columns_numbers_left_to_right() {
37		assert_eq!(values_placeholders(1, 3), "(?1,?2,?3)");
38	}
39
40	#[test]
41	fn three_rows_two_columns_numbers_contiguously_across_rows() {
42		// callers rely on contiguous numbering to bind a single flat parameter list per chunk
43		assert_eq!(values_placeholders(3, 2), "(?1,?2),(?3,?4),(?5,?6)");
44	}
45
46	#[test]
47	fn zero_rows_is_empty() {
48		assert_eq!(values_placeholders(0, 3), "");
49	}
50}