1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
use super::on_conflict_actions::*; use super::on_conflict_target::*; use insertable::*; use pg::Pg; use query_builder::*; use result::QueryResult; #[doc(hidden)] #[derive(Debug, Clone, Copy)] pub struct OnConflictValues<Values, Target, Action> { values: Values, target: Target, action: Action, } impl<Values> OnConflictValues<Values, NoConflictTarget, DoNothing> { pub(crate) fn do_nothing(values: Values) -> Self { Self::new(values, NoConflictTarget, DoNothing) } } impl<Values, Target, Action> OnConflictValues<Values, Target, Action> { pub(crate) fn new(values: Values, target: Target, action: Action) -> Self { OnConflictValues { values, target, action, } } } impl<Values, Target, Action> CanInsertInSingleQuery<Pg> for OnConflictValues<Values, Target, Action> where Values: CanInsertInSingleQuery<Pg>, { fn rows_to_insert(&self) -> Option<usize> { self.values.rows_to_insert() } } impl<Values, Target, Action> QueryFragment<Pg> for OnConflictValues<Values, Target, Action> where Values: QueryFragment<Pg>, Target: QueryFragment<Pg>, Action: QueryFragment<Pg>, { fn walk_ast(&self, mut out: AstPass<Pg>) -> QueryResult<()> { self.values.walk_ast(out.reborrow())?; out.push_sql(" ON CONFLICT"); self.target.walk_ast(out.reborrow())?; self.action.walk_ast(out.reborrow())?; Ok(()) } }