use super::separator_optional;
use crate::WriteSql;
pub fn insert<Sql, Arg>(sql: &mut Sql)
where
Sql: WriteSql<Arg>,
{
separator_optional(sql);
sql.push_cmd("INSERT INTO");
}
pub fn insert_into<Sql, Arg>(sql: &mut Sql, table: &str)
where
Sql: WriteSql<Arg>,
{
separator_optional(sql);
sql.push_cmd("INSERT INTO ");
sql.push_cmd(table);
}
#[derive(Clone, Copy, PartialEq, Eq)]
pub enum ConflictTarget<'expr> {
Constraint(&'expr str),
IndexColumn(&'expr str),
}
#[derive(Clone, Copy, PartialEq, Eq)]
pub enum ConflictAction {
Nothing,
Update,
}
pub fn on_conflict<'expr, Sql, Arg>(
sql: &mut Sql,
target: Option<ConflictTarget<'expr>>,
action: ConflictAction,
) where
Sql: WriteSql<Arg>,
{
separator_optional(sql);
sql.push_cmd("ON CONFLICT");
if let Some(target) = target {
match target {
ConflictTarget::Constraint(constr_name) => {
sql.push_cmd(" ON CONSTRAINT ");
sql.push_cmd(constr_name);
}
ConflictTarget::IndexColumn(indx_expr) => {
sql.push_cmd(" ");
sql.push_cmd(indx_expr);
}
}
}
match action {
ConflictAction::Nothing => {
sql.push_cmd(" DO NOTHING");
}
ConflictAction::Update => {
sql.push_cmd(" DO UPDATE");
}
}
}