Skip to content

Commit 3856e44

Browse files
committed
Document appender alternatives for wide tables
1 parent 559c167 commit 3856e44

File tree

1 file changed

+35
-0
lines changed
  • crates/duckdb/src/appender

1 file changed

+35
-0
lines changed

crates/duckdb/src/appender/mod.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,41 @@ use crate::{
2121
/// If you need to share an `Appender` across threads, wrap it in a `Mutex`.
2222
///
2323
/// See [DuckDB concurrency documentation](https://duckdb.org/docs/stable/connect/concurrency.html) for more details.
24+
///
25+
/// # Wide Tables (Many Columns)
26+
///
27+
/// Array literals `[value; N]` are supported for tables with up to 32 columns.
28+
///
29+
/// ```rust,ignore
30+
/// appender.append_row([0; 32])?;
31+
/// appender.append_row([1, 2, 3, 4, 5])?;
32+
/// ```
33+
///
34+
/// For tables with more than 32 columns, use one of these alternatives:
35+
///
36+
/// ## 1. Slice approach - convert values to `&dyn ToSql`
37+
///
38+
/// ```rust,ignore
39+
/// let values: Vec<i32> = vec![0; 100];
40+
/// let params: Vec<&dyn ToSql> = values.iter().map(|v| v as &dyn ToSql).collect();
41+
/// appender.append_row(params.as_slice())?;
42+
/// ```
43+
///
44+
/// ## 2. `params!` macro - write values explicitly
45+
///
46+
/// ```rust,ignore
47+
/// appender.append_row(params![v1, v2, v3, ..., v50])?;
48+
/// ```
49+
///
50+
/// ## 3. `appender_params_from_iter` - pass an iterator directly
51+
///
52+
/// ```rust,ignore
53+
/// use duckdb::appender_params_from_iter;
54+
/// let values: Vec<i32> = vec![0; 100];
55+
/// appender.append_row(appender_params_from_iter(values))?;
56+
/// ```
57+
///
58+
/// All three methods can be used interchangeably and mixed in the same appender.
2459
pub struct Appender<'conn> {
2560
conn: &'conn Connection,
2661
app: ffi::duckdb_appender,

0 commit comments

Comments
 (0)