From 05d0fa7a87d4ad65144ab84ac6e8358b9bfc062b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sat, 6 Mar 2021 18:23:31 +0100 Subject: [PATCH] ignore UniqueViolation errors in inserts --- src/database.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/database.rs b/src/database.rs index 792224e..2ec7508 100644 --- a/src/database.rs +++ b/src/database.rs @@ -8,6 +8,7 @@ use diesel::debug_query; use diesel::expression::operators::{And, Or}; use diesel::prelude::*; use diesel::r2d2::{self, ConnectionManager}; +use diesel::result::{DatabaseErrorKind, Error}; use diesel::sql_types::Bool; use diesel::sqlite::{Sqlite, SqliteConnection}; use lexpr::value::Value::Symbol; @@ -590,9 +591,16 @@ pub fn insert_entry>( let entry = Entry::try_from(&insert_entry)?; - diesel::insert_into(data::table) + let result = diesel::insert_into(data::table) .values(insert_entry) - .execute(connection)?; + .execute(connection); + + if let Some(error) = result.err() { + match error { + Error::DatabaseError(DatabaseErrorKind::UniqueViolation, _) => {} + _ => return Err(anyhow!(error)), + } + } Ok(Address::Hash(entry.hash()?)) }