changeset 86165:5873fe7ba498 smart-merge-jan22

Implement early exit in merge_segments.
author Aris Koning <aris.koning@monetdbsolutions.com>
date Tue, 26 Jul 2022 14:57:12 +0200
parents 52cba3e788de
children dc4752cf3f4b
files sql/storage/bat/bat_storage.c
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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) {