# HG changeset patch # User Aris Koning # Date 1658840232 -7200 # Node ID 5873fe7ba4980bc6c5b8c1220290ed98816d59b0 # Parent 52cba3e788dec5b016c28acc136cc13b7d03d5cf Implement early exit in merge_segments. diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -408,12 +408,15 @@ merge_segments(storage *s, sql_trans *tr int merge = 1; for (int i = 0; active[i] != 0; i++) { assert(active[i] != seg->ts && active[i] != cur->ts); - if ((active[i] > seg->ts && active[i] < cur->ts) || - (active[i] < seg->ts && active[i] > cur->ts)) { - /* cannot safely merge since there is an active transaction between the segments */ - merge = 0; + if (seg->ts < active[i] && cur->ts < active[i]) break; - } + if (seg->ts > active[i] && cur->ts > active[i]) + continue; + + assert((active[i] > seg->ts && active[i] < cur->ts) || (active[i] < seg->ts && active[i] > cur->ts)); + /* cannot safely merge since there is an active transaction between the segments */ + merge = false; + break; } /* merge segments */ if (merge) {