use cratestack_sql::{Dialect, ModelDescriptor, SqlColumnValue, SqlValue};
pub fn render_insert<M, PK>(
dialect: &dyn Dialect,
descriptor: &ModelDescriptor<M, PK>,
values: &[SqlColumnValue],
) -> (String, Vec<SqlValue>) {
let mut sql = format!("INSERT INTO {} (", descriptor.table_name);
for (idx, value) in values.iter().enumerate() {
if idx > 0 {
sql.push_str(", ");
}
sql.push_str(value.column);
}
sql.push_str(") VALUES (");
let mut binds = Vec::with_capacity(values.len());
for (idx, value) in values.iter().enumerate() {
if idx > 0 {
sql.push_str(", ");
}
dialect.write_placeholder(&mut sql, idx + 1);
binds.push(value.value.clone());
}
sql.push_str(") RETURNING ");
sql.push_str(&descriptor.select_projection());
(sql, binds)
}