Changeset: 3329ce0f3084 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3329ce0f3084
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: Dec2023
Log Message:

We can't transfer views, so make a copy.


diffs (131 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
@@ -66,11 +66,20 @@ static void merge_delta( sql_delta *obat
                ((!seg->deleted && VALID_4_READ(seg->ts, tr)) || \
                 (seg->deleted && OLD_VALID_4_READ(seg->ts, seg->oldts, tr)))
 
-static inline void
+static inline BAT *
 transfer_to_systrans(BAT *b)
 {
        /* transfer a BAT from the TRANSIENT farm to the SYSTRANS farm */
        MT_lock_set(&b->theaplock);
+       if (VIEWtparent(b) || VIEWvtparent(b)) {
+               MT_lock_unset(&b->theaplock);
+               BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+               BBPreclaim(b);
+               b = bn;
+               if (b == NULL)
+                       return NULL;
+               MT_lock_set(&b->theaplock);
+       }
        if (b->theap->farmid == TRANSIENT ||
                (b->tvheap && b->tvheap->farmid == TRANSIENT)) {
                QryCtx *qc = MT_thread_get_qry_ctx();
@@ -87,6 +96,7 @@ transfer_to_systrans(BAT *b)
                }
        }
        MT_lock_unset(&b->theaplock);
+       return b;
 }
 
 static void
@@ -1160,8 +1170,8 @@ dict_append_bat(sql_trans *tr, sql_delta
                                }
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
+                               n = transfer_to_systrans(n);
                                bat_set_access(n, BAT_READ);
-                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                if (cs->ebid && !new)
@@ -1203,8 +1213,8 @@ dict_append_bat(sql_trans *tr, sql_delta
                                }
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
+                               n = transfer_to_systrans(n);
                                bat_set_access(n, BAT_READ);
-                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                cs->cleared = true;
@@ -1256,8 +1266,8 @@ for_append_bat(column_storage *cs, BAT *
                                return NULL;
                        if (cs->bid)
                                temp_destroy(cs->bid);
+                       n = transfer_to_systrans(n);
                        bat_set_access(n, BAT_READ);
-                       transfer_to_systrans(n);
                        cs->bid = temp_create(n);
                        cs->ucnt = 0;
                        if (cs->uibid)
@@ -1511,8 +1521,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                } else {
                                        temp_destroy(cs->uibid);
                                        temp_destroy(cs->uvbid);
-                                       transfer_to_systrans(ui);
-                                       transfer_to_systrans(uv);
+                                       ui = transfer_to_systrans(ui);
+                                       uv = transfer_to_systrans(uv);
                                        cs->uibid = temp_create(ui);
                                        cs->uvbid = temp_create(uv);
                                        cs->ucnt = BATcount(ui);
@@ -1605,8 +1615,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                                if (res == LOG_OK) {
                                                        temp_destroy(cs->uibid);
                                                        temp_destroy(cs->uvbid);
-                                                       
transfer_to_systrans(nui);
-                                                       
transfer_to_systrans(nuv);
+                                                       nui = 
transfer_to_systrans(nui);
+                                                       nuv = 
transfer_to_systrans(nuv);
                                                        cs->uibid = 
temp_create(nui);
                                                        cs->uvbid = 
temp_create(nuv);
                                                        cs->ucnt = 
BATcount(nui);
@@ -1698,8 +1708,8 @@ dict_append_val(sql_trans *tr, sql_delta
                                }
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
+                               n = transfer_to_systrans(n);
                                bat_set_access(n, BAT_READ);
-                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                if (cs->ebid && !new)
@@ -1736,8 +1746,8 @@ dict_append_val(sql_trans *tr, sql_delta
                                }
                                if (cs->bid)
                                        temp_destroy(cs->bid);
+                               n = transfer_to_systrans(n);
                                bat_set_access(n, BAT_READ);
-                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                cs->cleared = true;
@@ -1773,8 +1783,8 @@ for_append_val(column_storage *cs, void 
                        /* TODO decompress updates if any */
                        if (cs->bid)
                                temp_destroy(cs->bid);
+                       n = transfer_to_systrans(n);
                        bat_set_access(n, BAT_READ);
-                       transfer_to_systrans(n);
                        cs->bid = temp_create(n);
                        cs->st = ST_DEFAULT;
                        /* at append_col the column's storage type is cleared */
@@ -4932,13 +4942,13 @@ col_compress(sql_trans *tr, sql_column *
        d->cs.cleared = true;
        if (d->cs.bid)
                temp_destroy(d->cs.bid);
+       o = transfer_to_systrans(o);
        bat_set_access(o, BAT_READ);
-       transfer_to_systrans(o);
        d->cs.bid = temp_create(o);
        if (u) {
                if (d->cs.ebid)
                        temp_destroy(d->cs.ebid);
-               transfer_to_systrans(u);
+               u = transfer_to_systrans(u);
                d->cs.ebid = temp_create(u);
        }
        return LOG_OK;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to