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

merged with jul2021


diffs (82 lines):

diff --git a/monetdb5/modules/mal/mkey.c b/monetdb5/modules/mal/mkey.c
--- a/monetdb5/modules/mal/mkey.c
+++ b/monetdb5/modules/mal/mkey.c
@@ -324,7 +324,7 @@ MKEYrotate_xor_hash(Client cntxt, MalBlk
 static str
 MKEYbulk_rotate_xor_hash(bat *res, const bat *hid, const int *nbits, const bat 
*bid)
 {
-       BAT *hb, *b, *bn;
+       BAT *hb, *b, *ob = NULL, *bn;
        int lbit = *nbits;
        int rbit = (int) sizeof(lng) * 8 - lbit;
        ulng *restrict r;
@@ -345,12 +345,23 @@ MKEYbulk_rotate_xor_hash(bat *res, const
                throw(MAL, "mkey.rotate_xor_hash",
                          OPERATION_FAILED ": input bats are not aligned");
        }
+       ob = b;
+       if (b && (b->ttype == TYPE_msk || mask_cand(b))) {
+               b = BATunmask(b);
+               if (!b) {
+                       BBPunfix(hb->batCacheid);
+                       BBPunfix(ob->batCacheid);
+                       throw(MAL, "mkey.rotate_xor_hash", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               }
+       }
 
        n = BATcount(b);
 
        bn = COLnew(b->hseqbase, TYPE_lng, n, TRANSIENT);
        if (bn == NULL) {
                BBPunfix(hb->batCacheid);
+               if (b != ob)
+                       BBPunfix(ob->batCacheid);
                BBPunfix(b->batCacheid);
                throw(MAL, "mkey.rotate_xor_hash", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        }
@@ -429,6 +440,8 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        bn->tnil = false;
 
        BBPkeepref(*res = bn->batCacheid);
+       if (b != ob)
+               BBPunfix(ob->batCacheid);
        BBPunfix(b->batCacheid);
        BBPunfix(hb->batCacheid);
        return MAL_SUCCEED;
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
@@ -926,21 +926,21 @@ cs_update_bat( sql_trans *tr, column_sto
        }
        /* When we go to smaller grained update structures we should check for 
concurrent updates on this column ! */
        /* currently only one update delta is possible */
-       if (!otids->tsorted || complex_cand(otids) /* make sure we have simple 
dense or oids */) {
-               BAT *sorted, *order;
-               if (BATsort(&sorted, &order, NULL, otids, NULL, NULL, false, 
false, false) != GDK_SUCCEED) {
+       if (!is_new && !cs->cleared) {
+               if (!otids->tsorted || complex_cand(otids) /* make sure we have 
simple dense or oids */) {
+                       BAT *sorted, *order;
+                       if (BATsort(&sorted, &order, NULL, otids, NULL, NULL, 
false, false, false) != GDK_SUCCEED) {
+                               if (otids != tids)
+                                       bat_destroy(otids);
+                               return LOG_ERR;
+                       }
                        if (otids != tids)
                                bat_destroy(otids);
-                       return LOG_ERR;
+                       otids = sorted;
+                       oupdates = BATproject(order, oupdates);
+                       bat_destroy(order);
                }
-               if (otids != tids)
-                       bat_destroy(otids);
-               otids = sorted;
-               oupdates = BATproject(order, oupdates);
-               bat_destroy(order);
-       }
-       assert(otids->tsorted);
-       if (!is_new && !cs->cleared) {
+               assert(otids->tsorted);
                BAT *ui = NULL, *uv = NULL;
 
                /* handle updates on just inserted bits */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to