Do not compare records order with negative id

Closes #14508
This commit is contained in:
Cédric Krier committed 2026-01-16 12:11:35 +01:00
1 parent 947a63c456
commit 2219eb0915
2 files changed
+13 -4

No files matched your search

+5 -2
View File
@@ -513,11 +513,14 @@
} else {
cmp = function(a, b) { return a < b; };
}
let max_id = Math.max(0, ...this.map((r) => r.id));
for (const record of this) {
if (record.get_loaded([field]) || changed || record.id < 0) {
let prev_id = null;
if (prev) {
prev.load(field, false);
index = prev.field_get(field);
prev_id = prev.id >= 0 ? prev.id : max_id++;
} else {
index = null;
}
@@ -528,7 +531,7 @@
update = true;
} else if (prev) {
if (record.id >= 0) {
update = cmp(record.id, prev.id);
update = cmp(record.id, prev_id);
} else if (position === 0) {
update = true;
}
@@ -536,7 +539,7 @@
} else if (value === index) {
if (prev) {
if (record.id >= 0) {
update = cmp(record.id, prev.id);
update = cmp(record.id, prev_id);
} else if (position === 0) {
update = true;
}
@@ -345,12 +345,18 @@ class Group(list):
cmp = operator.gt
else:
cmp = operator.lt
max_id = max(0, *(r.id for r in self))
for record in self:
# Assume not loaded records are correctly ordered
# as far as we do not change any previous records.
if record.get_loaded([field]) or changed or record.id < 0:
if prev:
index = prev[field].get(prev)
if prev.id >= 0:
prev_id = prev.id
else:
max_id += 1
prev_id = max_id
else:
index = None
update = False
@@ -360,13 +366,13 @@ class Group(list):
update = True
elif prev:
if record.id >= 0:
update = cmp(record.id, prev.id)
update = cmp(record.id, prev_id)
elif position == 0:
update = True
elif value == index:
if prev:
if record.id >= 0:
update = cmp(record.id, prev.id)
update = cmp(record.id, prev_id)
elif position == 0:
update = True
elif value <= (index or 0):