@@ -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.
2459pub struct Appender < ' conn > {
2560 conn : & ' conn Connection ,
2661 app : ffi:: duckdb_appender ,
0 commit comments