Skip to content

Commit 6589b35

Browse files
authored
Merge pull request #4695 from weiznich/reduce_generic_code
Reduce generic code instanciation in one of the postgres connection functions
2 parents e7ccbc8 + 17b1d46 commit 6589b35

File tree

2 files changed

+45
-20
lines changed

2 files changed

+45
-20
lines changed

diesel/src/mysql/connection/mod.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -218,15 +218,30 @@ fn update_transaction_manager_status<T>(
218218
instrumentation: &mut DynInstrumentation,
219219
query: &dyn DebugQuery,
220220
) -> QueryResult<T> {
221-
if let Err(Error::DatabaseError(DatabaseErrorKind::SerializationFailure, _)) = query_result {
222-
transaction_manager
223-
.status
224-
.set_requires_rollback_maybe_up_to_top_level(true)
221+
fn non_generic_inner(
222+
query_result: Result<(), &Error>,
223+
transaction_manager: &mut AnsiTransactionManager,
224+
instrumentation: &mut DynInstrumentation,
225+
query: &dyn DebugQuery,
226+
) {
227+
if let Err(Error::DatabaseError(DatabaseErrorKind::SerializationFailure, _)) = query_result
228+
{
229+
transaction_manager
230+
.status
231+
.set_requires_rollback_maybe_up_to_top_level(true)
232+
}
233+
instrumentation.on_connection_event(InstrumentationEvent::FinishQuery {
234+
query,
235+
error: query_result.err(),
236+
});
225237
}
226-
instrumentation.on_connection_event(InstrumentationEvent::FinishQuery {
238+
239+
non_generic_inner(
240+
query_result.as_ref().map(|_| ()),
241+
transaction_manager,
242+
instrumentation,
227243
query,
228-
error: query_result.as_ref().err(),
229-
});
244+
);
230245
query_result
231246
}
232247

diesel/src/pg/connection/mod.rs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -332,20 +332,30 @@ fn update_transaction_manager_status<T>(
332332
}
333333
}
334334
}
335-
non_generic_inner(conn, query_result.is_err());
336-
if let Err(ref e) = query_result {
337-
conn.instrumentation
338-
.on_connection_event(InstrumentationEvent::FinishQuery {
339-
query: source,
340-
error: Some(e),
341-
});
342-
} else if final_call {
343-
conn.instrumentation
344-
.on_connection_event(InstrumentationEvent::FinishQuery {
345-
query: source,
346-
error: None,
347-
});
335+
336+
fn non_generic_instrumentation(
337+
query_result: Result<(), &Error>,
338+
conn: &mut ConnectionAndTransactionManager,
339+
source: &dyn DebugQuery,
340+
final_call: bool,
341+
) {
342+
if let Err(e) = query_result {
343+
conn.instrumentation
344+
.on_connection_event(InstrumentationEvent::FinishQuery {
345+
query: source,
346+
error: Some(e),
347+
});
348+
} else if final_call {
349+
conn.instrumentation
350+
.on_connection_event(InstrumentationEvent::FinishQuery {
351+
query: source,
352+
error: None,
353+
});
354+
}
348355
}
356+
357+
non_generic_inner(conn, query_result.is_err());
358+
non_generic_instrumentation(query_result.as_ref().map(|_| ()), conn, source, final_call);
349359
query_result
350360
}
351361

0 commit comments

Comments
 (0)