Changeset: b0c4b14cd2c6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b0c4b14cd2c6
Modified Files:
        monetdb5/modules/kernel/aggr.c
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/mal/remote.c
        sql/backends/monet5/sql_rank.c
        sql/backends/monet5/sql_subquery.c
Branch: Jul2021
Log Message:

Revert changes of BATdescriptor to BBPquickdesc.
The GDK level functions should not be called with incomplete BAT
pointers, even if they currently don't use the data.


diffs (truncated from 574 to 300 lines):

diff --git a/monetdb5/modules/kernel/aggr.c b/monetdb5/modules/kernel/aggr.c
--- a/monetdb5/modules/kernel/aggr.c
+++ b/monetdb5/modules/kernel/aggr.c
@@ -35,7 +35,7 @@ AGGRgrouped(bat *retval1, bat *retval2, 
 
        b = BATdescriptor(*bid);
        g = gid ? BATdescriptor(*gid) : NULL;
-       e = eid ? BBPquickdesc(*eid) : NULL;
+       e = eid ? BATdescriptor(*eid) : NULL;
        s = sid ? BATdescriptor(*sid) : NULL;
        q = quantile ? BATdescriptor(*quantile) : NULL;
 
@@ -48,6 +48,8 @@ AGGRgrouped(bat *retval1, bat *retval2, 
                        BBPunfix(b->batCacheid);
                if (g)
                        BBPunfix(g->batCacheid);
+               if (e)
+                       BBPunfix(e->batCacheid);
                if (s)
                        BBPunfix(s->batCacheid);
                if (q)
@@ -76,6 +78,8 @@ AGGRgrouped(bat *retval1, bat *retval2, 
                                BBPunfix(b->batCacheid);
                                if (g)
                                        BBPunfix(g->batCacheid);
+                               if (e)
+                                       BBPunfix(e->batCacheid);
                                if (s)
                                        BBPunfix(s->batCacheid);
                                BBPunfix(q->batCacheid);
@@ -93,6 +97,8 @@ AGGRgrouped(bat *retval1, bat *retval2, 
        BBPunfix(b->batCacheid);
        if (g)
                BBPunfix(g->batCacheid);
+       if (e)
+               BBPunfix(e->batCacheid);
        if (s)
                BBPunfix(s->batCacheid);
        if (bn == NULL)
@@ -620,7 +626,7 @@ AGGRavg3(bat *retval1, bat *retval2, bat
 
        b = BATdescriptor(*bid);
        g = gid != NULL && !is_bat_nil(*gid) ? BATdescriptor(*gid) : NULL;
-       e = eid != NULL && !is_bat_nil(*eid) ? BBPquickdesc(*eid) : NULL;
+       e = eid != NULL && !is_bat_nil(*eid) ? BATdescriptor(*eid) : NULL;
        s = sid != NULL && !is_bat_nil(*sid) ? BATdescriptor(*sid) : NULL;
 
        if (b == NULL ||
@@ -631,6 +637,8 @@ AGGRavg3(bat *retval1, bat *retval2, bat
                        BBPunfix(b->batCacheid);
                if (g)
                        BBPunfix(g->batCacheid);
+               if (e)
+                       BBPunfix(e->batCacheid);
                if (s)
                        BBPunfix(s->batCacheid);
                throw(MAL, "aggr.subavg", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
@@ -641,6 +649,8 @@ AGGRavg3(bat *retval1, bat *retval2, bat
        BBPunfix(b->batCacheid);
        if (g)
                BBPunfix(g->batCacheid);
+       if (e)
+               BBPunfix(e->batCacheid);
        if (s)
                BBPunfix(s->batCacheid);
        if (rc != GDK_SUCCEED)
@@ -663,7 +673,7 @@ AGGRavg3comb(bat *retval1, const bat *bi
        r = BATdescriptor(*rid);
        c = BATdescriptor(*cid);
        g = gid != NULL && !is_bat_nil(*gid) ? BATdescriptor(*gid) : NULL;
-       e = eid != NULL && !is_bat_nil(*eid) ? BBPquickdesc(*eid) : NULL;
+       e = eid != NULL && !is_bat_nil(*eid) ? BATdescriptor(*eid) : NULL;
 
        if (b == NULL ||
                r == NULL ||
@@ -678,6 +688,8 @@ AGGRavg3comb(bat *retval1, const bat *bi
                        BBPunfix(c->batCacheid);
                if (g)
                        BBPunfix(g->batCacheid);
+               if (e)
+                       BBPunfix(e->batCacheid);
                throw(MAL, "aggr.subavg", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
        }
 
@@ -688,6 +700,8 @@ AGGRavg3comb(bat *retval1, const bat *bi
        BBPunfix(c->batCacheid);
        if (g)
                BBPunfix(g->batCacheid);
+       if (e)
+               BBPunfix(e->batCacheid);
        if (bn == NULL)
                throw(MAL, "aggr.subavg", GDK_EXCEPTION);
        *retval1 = bn->batCacheid;
@@ -987,7 +1001,7 @@ AGGRgroup_str_concat(bat *retval1, const
 
        b = BATdescriptor(*bid);
        g = gid ? BATdescriptor(*gid) : NULL;
-       e = eid ? BBPquickdesc(*eid) : NULL;
+       e = eid ? BATdescriptor(*eid) : NULL;
        s = sid ? BATdescriptor(*sid) : NULL;
        sep = sepid ? BATdescriptor(*sepid) : NULL;
 
@@ -997,6 +1011,8 @@ AGGRgroup_str_concat(bat *retval1, const
                        BBPunfix(b->batCacheid);
                if (g)
                        BBPunfix(g->batCacheid);
+               if (e)
+                       BBPunfix(e->batCacheid);
                if (s)
                        BBPunfix(s->batCacheid);
                if (sep)
@@ -1009,6 +1025,8 @@ AGGRgroup_str_concat(bat *retval1, const
        BBPunfix(b->batCacheid);
        if (g)
                BBPunfix(g->batCacheid);
+       if (e)
+               BBPunfix(e->batCacheid);
        if (s)
                BBPunfix(s->batCacheid);
        if (sep)
@@ -1070,7 +1088,7 @@ AGGRgrouped2(bat *retval, const bat *bid
        b1 = BATdescriptor(*bid1);
        b2 = BATdescriptor(*bid2);
        g = gid ? BATdescriptor(*gid) : NULL;
-       e = eid ? BBPquickdesc(*eid) : NULL;
+       e = eid ? BATdescriptor(*eid) : NULL;
        s = sid ? BATdescriptor(*sid) : NULL;
 
        if (b1 == NULL || b2 == NULL || (gid != NULL && g == NULL) || (eid != 
NULL && e == NULL) ||
@@ -1081,6 +1099,8 @@ AGGRgrouped2(bat *retval, const bat *bid
                        BBPunfix(b2->batCacheid);
                if (g)
                        BBPunfix(g->batCacheid);
+               if (e)
+                       BBPunfix(e->batCacheid);
                if (s)
                        BBPunfix(s->batCacheid);
                throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
@@ -1091,6 +1111,8 @@ AGGRgrouped2(bat *retval, const bat *bid
                BBPunfix(b2->batCacheid);
                if (g)
                        BBPunfix(g->batCacheid);
+               if (e)
+                       BBPunfix(e->batCacheid);
                if (s)
                        BBPunfix(s->batCacheid);
                throw(MAL, malfunc, SQLSTATE(42000) "%s requires both arguments 
of the same type", malfunc);
@@ -1102,6 +1124,8 @@ AGGRgrouped2(bat *retval, const bat *bid
        BBPunfix(b2->batCacheid);
        if (g)
                BBPunfix(g->batCacheid);
+       if (e)
+               BBPunfix(e->batCacheid);
        if (s)
                BBPunfix(s->batCacheid);
        if (bn == NULL)
diff --git a/monetdb5/modules/kernel/algebra.c 
b/monetdb5/modules/kernel/algebra.c
--- a/monetdb5/modules/kernel/algebra.c
+++ b/monetdb5/modules/kernel/algebra.c
@@ -793,19 +793,28 @@ ALGcrossproduct(bat *l, bat *r, const ba
        BAT *sl = NULL, *sr = NULL;
        gdk_return ret;
 
-       if ((L = BBPquickdesc(*left)) == NULL)
-               throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       if ((R = BBPquickdesc(*right)) == NULL)
+       if ((L = BATdescriptor(*left)) == NULL ||
+               (R = BATdescriptor(*right)) == NULL) {
+               if (L)
+                       BBPunfix(L->batCacheid);
+               if (R)
+                       BBPunfix(R->batCacheid);
                throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       if (slid && !is_bat_nil(*slid) && (sl = BATdescriptor(*slid)) == NULL)
-               throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-       if (srid && !is_bat_nil(*srid) && (sr = BATdescriptor(*srid)) == NULL) {
+       }
+       if ((slid && !is_bat_nil(*slid) && (sl = BATdescriptor(*slid)) == NULL) 
||
+               (srid && !is_bat_nil(*srid) && (sr = BATdescriptor(*srid)) == 
NULL)) {
+               BBPunfix(L->batCacheid);
+               BBPunfix(R->batCacheid);
                if (sl)
                        BBPunfix(sl->batCacheid);
+               if (sr)
+                       BBPunfix(sr->batCacheid);
                throw(MAL, "algebra.crossproduct", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
        }
        ret = BATsubcross(&bn1, r ? &bn2 : NULL, L, R, sl, sr,
                                          max_one && !is_bit_nil(*max_one) && 
*max_one);
+       BBPunfix(L->batCacheid);
+       BBPunfix(R->batCacheid);
        if (sl)
                BBPunfix(sl->batCacheid);
        if (sr)
@@ -971,46 +980,28 @@ ALGsort11(bat *result, const bat *bid, c
 static str
 ALGcountCND_nil(lng *result, const bat *bid, const bat *cnd, const bit 
*ignore_nils)
 {
-       str msg = MAL_SUCCEED;
-       BAT *b = NULL, *s = NULL;
-       bool heap_loaded = false;
+       BAT *b, *s = NULL;
 
-       if (!(b = BBPquickdesc(*bid))) {
-               msg = createException(MAL, "aggr.count", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-               goto bailout;
+       if ((b = BATdescriptor(*bid)) == NULL) {
+               throw(MAL, "aggr.count", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
        }
-       if (cnd && !is_bat_nil(*cnd) && !(s = BATdescriptor(*cnd))) {
-               msg = createException(MAL, "aggr.count", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
-               goto bailout;
-       }
-       if (b->ttype == TYPE_void || b->ttype == TYPE_msk || (*ignore_nils && 
!b->tnonil)) {
-               if (!(b = BATdescriptor(*bid))) { /* has to load the heap */
-                       msg = createException(MAL, "aggr.count", 
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
-                       goto bailout;
-               }
-               heap_loaded = true;
+       if (cnd && !is_bat_nil(*cnd) && (s = BATdescriptor(*cnd)) == NULL) {
+               BBPunfix(b->batCacheid);
+               throw(MAL, "aggr.count", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
        }
-
        if (b->ttype == TYPE_msk || mask_cand(b)) {
-               assert(heap_loaded);
-               if (BATsum(result, TYPE_lng, b, s, *ignore_nils, false, false) 
!= GDK_SUCCEED) {
-                       msg = createException(MAL, "aggr.count", GDK_EXCEPTION);
-                       goto bailout;
-               }
-       } else if (*ignore_nils && !b->tnonil) {
-               assert(heap_loaded);
-               *result = (lng) BATcount_no_nil(b, s);
-       } else {
-               struct canditer ci;
-               *result = (lng) canditer_init(&ci, b, s);
-       }
-
-bailout:
-       if (b && heap_loaded)
-               BBPunfix(b->batCacheid);
+               BATsum(result, TYPE_lng, b, s, *ignore_nils, false, false);
+       } else
+        if (*ignore_nils) {
+                       *result = (lng) BATcount_no_nil(b, s);
+        } else {
+                       struct canditer ci;
+                       *result = (lng) canditer_init(&ci, b, s);
+        }
        if (s)
                BBPunfix(s->batCacheid);
-       return msg;
+       BBPunfix(b->batCacheid);
+       return MAL_SUCCEED;
 }
 
 static str
diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c
--- a/monetdb5/modules/mal/remote.c
+++ b/monetdb5/modules/mal/remote.c
@@ -1517,8 +1517,12 @@ static str RMTbincopyto(Client cntxt, Ma
                throw(MAL, "remote.bincopyto", MAL_MALLOC_FAIL);
 
        sendtheap = b->ttype != TYPE_void && b->tvarsized;
-       if (isVIEW(b) && sendtheap && VIEWvtparent(b) && BATcount(b) < 
BATcount(BBP_cache(VIEWvtparent(b))))
+       if (isVIEW(b) && sendtheap && VIEWvtparent(b) && BATcount(b) < 
BATcount(BBP_cache(VIEWvtparent(b)))) {
+               if ((b = BATdescriptor(bid)) == NULL)
+                       throw(MAL, "remote.bincopyto", RUNTIME_OBJECT_MISSING);
                v = COLcopy(b, b->ttype, true, TRANSIENT);
+               BBPunfix(b->batCacheid);
+       }
 
        mnstr_printf(cntxt->fdout, /*JSON*/"{"
                        "\"version\":1,"
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -1274,7 +1274,7 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal
 {
        BAT *r = NULL, *b = NULL, *p = NULL, *o = NULL, *s = NULL, *e = NULL;
        int tpe, frame_type;
-       bit ignore_nils, heap_loaded = false;
+       bit ignore_nils;
        bat *res = NULL;
        str msg = MAL_SUCCEED;
 
@@ -1288,18 +1288,9 @@ SQLcount(Client cntxt, MalBlkPtr mb, Mal
 
        if (isaBatType(tpe))
                tpe = getBatType(tpe);
-       if (isaBatType(getArgType(mb, pci, 1))) {
-               if (!(b = BBPquickdesc(*getArgReference_bat(stk, pci, 1)))) {
-                       msg = createException(SQL, "sql.count", SQLSTATE(HY005) 
"Cannot access column descriptor");
-                       goto bailout;
-               }
-               if (ignore_nils && !b->tnonil) {
-                       if (!(b = BATdescriptor(*getArgReference_bat(stk, pci, 
1)))) {
-                               msg = createException(SQL, "sql.count", 
SQLSTATE(HY005) "Cannot access column descriptor");
-                               goto bailout;
-                       }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to