Changeset: 918bb5714751 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/918bb5714751
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Rearranged code a little.


diffs (93 lines):

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
@@ -140,6 +140,7 @@ new_segment(segment *o, sql_trans *tr, s
 static segment *
 split_segment(segments *segs, segment *o, segment *p, sql_trans *tr, size_t 
start, size_t cnt, bool deleted)
 {
+       assert(tr);
        if (o->start == start && o->end == start+cnt) {
                assert(o->deleted != deleted || o->ts < TRANSACTION_ID_BASE);
                o->oldts = o->ts;
@@ -149,7 +150,6 @@ split_segment(segments *segs, segment *o
        }
        segment *n = (segment*)GDKmalloc(sizeof(segment));
 
-       assert(tr);
        if (!n)
                return NULL;
        n->prev = NULL;
@@ -164,6 +164,8 @@ split_segment(segments *segs, segment *o
                n->deleted = deleted;
        }
        if (start == o->start) {
+               /* 2-way split: o remains latter part of segment, new one is
+                * inserted before */
                n->start = o->start;
                n->end = n->start + cnt;
                n->next = o;
@@ -172,8 +174,9 @@ split_segment(segments *segs, segment *o
                if (p)
                        p->next = n;
                o->start = n->end;
-               return n;
        } else if (start+cnt == o->end) {
+               /* 2-way split: o remains first part of segment, new one is
+                * added after */
                n->start = o->end - cnt;
                n->end = o->end;
                n->next = o->next;
@@ -181,34 +184,26 @@ split_segment(segments *segs, segment *o
                if (segs->t == o)
                        segs->t = n;
                o->end = n->start;
-               return n;
+       } else {
+               /* 3-way split: o remains first part of segment, two new ones
+                * are added after */
+               segment *n2 = GDKmalloc(sizeof(segment));
+               if (n2 == NULL) {
+                       GDKfree(n);
+                       return NULL;
+               }
+               n->next = n2;
+               n->start = start;
+               n->end = start + cnt;
+               *n2 = *o;
+               n2->start = n->end;
+               n2->prev = NULL;
+               if (segs->t == o)
+                       segs->t = n2;
+               o->next = n;
+               o->end = start;
        }
-       /* 3 way split */
-       n->start = start;
-       n->end = o->end;
-       n->next = o->next;
-       o->next = n;
-       if (segs->t == o)
-               segs->t = n;
-       o->end = n->start;
-
-       segment *oo = o;
-       o = n;
-       n = (segment*)GDKmalloc(sizeof(segment));
-       if (!n)
-               return NULL;
-       n->prev = NULL;
-       n->ts = oo->ts;
-       n->oldts = oo->oldts;
-       n->deleted = oo->deleted;
-       n->start = start+cnt;
-       n->end = o->end;
-       n->next = o->next;
-       o->next = n;
-       if (segs->t == o)
-               segs->t = n;
-       o->end = n->start;
-       return o;
+       return n;
 }
 
 static void
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to