bulk_sql_rs/
lib.rs

1/// Generate a sql for bulk insert.
2///
3/// # Examples
4///
5/// ```
6/// use bulk_sql_rs::bulk_insert_sql;
7///
8/// let res = bulk_insert_sql("todos", vec!["id", "name"], vec!["?", "?"], 3);
9/// assert_eq!(res, "INSERT INTO todos (id, name) VALUES (?, ?), (?, ?), (?, ?)");
10/// ```
11pub fn bulk_insert_sql(
12    table: impl Into<String>,
13    columns: Vec<impl Into<String>>,
14    values: Vec<impl Into<String>>,
15    item_count: usize,
16) -> String {
17    let table = table.into();
18    let columns = columns
19        .into_iter()
20        .map(|a| a.into())
21        .collect::<Vec<String>>();
22    let values = values
23        .into_iter()
24        .map(|s| s.into())
25        .collect::<Vec<String>>();
26    let column_sql: String = columns.join(", ");
27
28    let mut sql = format!("INSERT INTO {} ({}) VALUES ", table, column_sql);
29    for i in 0..item_count {
30        let value_sql: String = values.clone().join(", ");
31        sql.push_str(format!("({})", value_sql).as_str());
32        if i < item_count - 1 {
33            sql.push_str(", ");
34        }
35    }
36    sql
37}