java-topology/defects/seaorm/patch/seaorm-0001-establish-links-leftover.patch

24 lines
1 KiB
Diff

# UNDF: UNDF-2026-000000274
--- a/src/entity/active_model.rs
+++ b/src/entity/active_model.rs
@@ -1256,12 +1256,17 @@ async fn establish_links<EM, J, RM, C>(
let leftover = leftover; // un-mut
let mut via_models = Vec::new();
let mut all_keys = std::collections::HashSet::new();
+ // Pre-build a set of leftover keys so the existence check inside the loop
+ // is O(1) instead of O(|leftover|), avoiding an O(N²) scan.
+ let leftover_key_set: std::collections::HashSet<ValueTuple> =
+ leftover.iter().map(|(_, k)| k.clone()).collect();
+
for related_model in related_models {
let mut via: J::ActiveModel = ActiveModelBehavior::new();
via.set_parent_key_for_def(model, &left)?;
via.set_parent_key_for_def(related_model, &right)?;
let via_key = get_key_from_active_model(&right.from_col, &via)?;
- if !leftover.iter().any(|t| t.1 == via_key) {
+ if !leftover_key_set.contains(&via_key) {
// if not already exist, save for insert
via_models.push(via);
}