diff --git a/crates/lib/mysql_queries/src/errors/database_query_error.rs b/crates/lib/mysql_queries/src/errors/database_query_error.rs index af27d42d79..a825339252 100644 --- a/crates/lib/mysql_queries/src/errors/database_query_error.rs +++ b/crates/lib/mysql_queries/src/errors/database_query_error.rs @@ -22,7 +22,19 @@ impl From for DatabaseQueryError { impl From for DatabaseQueryError { fn from(err: sqlx::Error) -> Self { - DatabaseQueryError::SqlxError(err) + if let Some(db_err) = err.as_database_error() { + // NB: SQLSTATE[23000]: Integrity constraint violation + // NB: MySQL Error Code 1062: Duplicate key insertion (this is harder to access) + let is_integrity_violation = db_err.code().as_deref() == Some("23000"); + let is_duplicate_key = db_err.message().contains("Duplicate entry"); + let is_idempotency_error = db_err.message().contains("uuid_idempotency_token"); + + if is_integrity_violation && is_duplicate_key && is_idempotency_error { + return Self::IdempotencyDuplicateKeyError; + } + } + + Self::SqlxError(err) } } diff --git a/crates/lib/mysql_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs b/crates/lib/mysql_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs index aef8a7cbbd..94e24f4d8e 100644 --- a/crates/lib/mysql_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs +++ b/crates/lib/mysql_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs @@ -156,24 +156,8 @@ SET .await; let record_id = match query_result { - Ok(res) => { - res.last_insert_id() - }, - Err(err) => { - if let Some(db_err) = err.as_database_error() { - // NB: SQLSTATE[23000]: Integrity constraint violation - // NB: MySQL Error Code 1062: Duplicate key insertion (this is harder to access) - let is_integrity_violation = db_err.code().as_deref() == Some("23000"); - let is_duplicate_key = db_err.message().contains("Duplicate entry"); - let is_idempotency_error = db_err.message().contains("uuid_idempotency_token"); - - if is_integrity_violation && is_duplicate_key && is_idempotency_error { - return Err(DatabaseQueryError::IdempotencyDuplicateKeyError); - } - } - - return Err(DatabaseQueryError::SqlxError(err)); - } + Err(err) => return Err(DatabaseQueryError::from(err)), + Ok(res) => res.last_insert_id(), }; Ok((job_token, record_id))