Changeset: f95cc38e9d40 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f95cc38e9d40
Modified Files:
monetdb5/modules/kernel/bat5.c
monetdb5/modules/mal/mkey.c
Branch: pushcands
Log Message:
Merged with default
diffs (275 lines):
diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -194,6 +194,15 @@ BKCappend_cand_force_wrap(bat *r, const
BBPunfix(b->batCacheid);
throw(MAL, "bat.append", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
}
+ if (mask_cand(u)) {
+ BAT *ou = u;
+ u = BATunmask(u);
+ BBPunfix(ou->batCacheid);
+ if (!u) {
+ BBPunfix(b->batCacheid);
+ throw(MAL, "bat.append", GDK_EXCEPTION);
+ }
+ }
if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {
BBPunfix(b->batCacheid);
BBPunfix(u->batCacheid);
diff --git a/monetdb5/modules/mal/batExtensions.c
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -240,11 +240,20 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt
BBPunfix(b->batCacheid);
throw(MAL, "bat.append_bulk",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
}
+ if (mask_cand(d)) {
+ BAT *du = d;
+ d = BATunmask(d);
+ BBPunfix(du->batCacheid);
+ if (!d) {
+ BBPunfix(b->batCacheid);
+ throw(MAL, "bat.append_bulk",
GDK_EXCEPTION);
+ }
+ }
rt = BATappend(b, d, NULL, force);
BBPunfix(d->batCacheid);
if (rt != GDK_SUCCEED) {
BBPunfix(b->batCacheid);
- throw(MAL,"bat.append_bulk",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ throw(MAL,"bat.append_bulk",
GDK_EXCEPTION);
}
}
} else {
@@ -252,7 +261,7 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt
total = number_existing + inputs;
if (BATextend(b, total) != GDK_SUCCEED) {
BBPunfix(b->batCacheid);
- throw(MAL,"bat.append_bulk", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ throw(MAL,"bat.append_bulk", GDK_EXCEPTION);
}
for (int i = 3, args = pci->argc; i < args; i++) {
ptr u = getArgReference(stk,pci,i);
@@ -260,7 +269,7 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt
u = (ptr) *(ptr *) u;
if (BUNappend(b, u, force) != GDK_SUCCEED) {
BBPunfix(b->batCacheid);
- throw(MAL,"bat.append_bulk",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ throw(MAL,"bat.append_bulk",
GDK_EXCEPTION);
}
}
}
diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c
--- a/monetdb5/modules/mal/mat.c
+++ b/monetdb5/modules/mal/mat.c
@@ -77,25 +77,31 @@ MATpackInternal(Client cntxt, MalBlkPtr
throw(MAL, "mat.pack", SQLSTATE(HY013) MAL_MALLOC_FAIL);
for (i = 1; i < p->argc; i++) {
- BAT *ob = b = BATdescriptor(stk->stk[getArg(p,i)].val.ival);
- if ((unmask && b && b->ttype == TYPE_msk) || mask_cand(b))
+ if (!(b = BATdescriptor(stk->stk[getArg(p,i)].val.ival))) {
+ BBPreclaim(bn);
+ throw(MAL, "mat.pack", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
+ }
+ if ((unmask && b->ttype == TYPE_msk) || mask_cand(b)) {
+ BAT *ob = b;
b = BATunmask(b);
- if( b ){
- if (BATcount(bn) == 0) {
- BAThseqbase(bn, b->hseqbase);
- BATtseqbase(bn, b->tseqbase);
- }
- if (BATappend(bn, b, NULL, false) != GDK_SUCCEED) {
- BBPunfix(bn->batCacheid);
- BBPunfix(b->batCacheid);
+ BBPunfix(ob->batCacheid);
+ if (!b) {
+ BBPreclaim(bn);
throw(MAL, "mat.pack", GDK_EXCEPTION);
}
- BBPunfix(b->batCacheid);
+ }
+ if (BATcount(bn) == 0) {
+ BAThseqbase(bn, b->hseqbase);
+ BATtseqbase(bn, b->tseqbase);
}
- if (b != ob)
- BBPunfix(ob->batCacheid);
+ if (BATappend(bn, b, NULL, false) != GDK_SUCCEED) {
+ BBPreclaim(bn);
+ BBPunfix(b->batCacheid);
+ throw(MAL, "mat.pack", GDK_EXCEPTION);
+ }
+ BBPunfix(b->batCacheid);
}
- if (!(!bn->tnil || !bn->tnonil)) {
+ if (bn->tnil && bn->tnonil) {
BBPreclaim(bn);
throw(MAL, "mat.pack", "INTERNAL ERROR" "bn->tnil or
bn->tnonil fails ");
}
@@ -112,7 +118,7 @@ MATpackIncrement(Client cntxt, MalBlkPtr
{
bat *ret = getArgReference_bat(stk,p,0);
int pieces;
- BAT *b, *bb, *bn;
+ BAT *b, *bb, *bn, *nb;
size_t newsize;
(void) cntxt;
@@ -121,7 +127,6 @@ MATpackIncrement(Client cntxt, MalBlkPtr
throw(MAL, "mat.pack", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
if ( getArgType(mb,p,2) == TYPE_int){
- BAT *ob = b;
/* first step, estimate with some slack */
pieces = stk->stk[getArg(p,2)].val.ival;
int tt = ATOMtype(b->ttype);
@@ -138,58 +143,69 @@ MATpackIncrement(Client cntxt, MalBlkPtr
newsize = b->tvheap->size * pieces;
if (HEAPextend(bn->tvheap, newsize, true) !=
GDK_SUCCEED) {
BBPunfix(b->batCacheid);
- BBPunfix(bn->batCacheid);
- throw(MAL, "mat.pack", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ BBPreclaim(bn);
+ throw(MAL, "mat.pack", GDK_EXCEPTION);
}
}
BATtseqbase(bn, b->tseqbase);
- if (b->ttype == TYPE_msk || mask_cand(b))
+ if (b->ttype == TYPE_msk || mask_cand(b)) {
+ BAT *ob = b;
b = BATunmask(b);
- if (b && BATappend(bn, b, NULL, false) != GDK_SUCCEED) {
- BBPunfix(bn->batCacheid);
- if (b != ob)
- BBPunfix(ob->batCacheid);
+ BBPunfix(ob->batCacheid);
+ if (!b) {
+ BBPreclaim(bn);
+ throw(MAL, "mat.pack", GDK_EXCEPTION);
+ }
+ }
+ if (BATappend(bn, b, NULL, false) != GDK_SUCCEED) {
+ BBPreclaim(bn);
BBPunfix(b->batCacheid);
throw(MAL, "mat.pack", GDK_EXCEPTION);
}
bn->unused = (pieces-1); /* misuse "unused" field */
BATsettrivprop(bn);
- if (b != ob)
- BBPunfix(ob->batCacheid);
- if (b)
- BBPunfix(b->batCacheid);
- if (!(!bn->tnil || !bn->tnonil)) {
+ BBPunfix(b->batCacheid);
+ if (bn->tnil && bn->tnonil) {
BBPreclaim(bn);
- throw(MAL, "mat.packIncrement", "INTERNAL ERROR" "
bn->tnil %d bn->tnonil %d", bn->tnil, bn->tnonil);
+ throw(MAL, "mat.pack", "INTERNAL ERROR" " bn->tnil %d
bn->tnonil %d", bn->tnil, bn->tnonil);
}
*ret = bn->batCacheid;
BBPretain(bn->batCacheid);
BBPunfix(bn->batCacheid);
} else {
/* remaining steps */
- BAT *obb = bb = BATdescriptor(stk->stk[getArg(p,2)].val.ival);
- if (bb && (bb->ttype == TYPE_msk || mask_cand(bb)))
+ if (!(bb = BATdescriptor(stk->stk[getArg(p,2)].val.ival))) {
+ BBPunfix(b->batCacheid);
+ throw(MAL, "mat.pack", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
+ }
+ if (bb->ttype == TYPE_msk || mask_cand(bb)) {
+ BAT *obb = bb;
bb = BATunmask(bb);
- if ( bb ){
- if (BATcount(b) == 0) {
- BAThseqbase(b, bb->hseqbase);
- BATtseqbase(b, bb->tseqbase);
- }
- if (BATappend(b, bb, NULL, false) != GDK_SUCCEED) {
- BBPunfix(bb->batCacheid);
+ BBPunfix(obb->batCacheid);
+ if (!bb) {
BBPunfix(b->batCacheid);
throw(MAL, "mat.pack", GDK_EXCEPTION);
}
- BBPunfix(bb->batCacheid);
}
- if (bb != obb)
- BBPunfix(obb->batCacheid);
- b->unused--;
- if (b->unused == 0 && (b = BATsetaccess(b, BAT_READ)) == NULL) {
+ if (BATcount(b) == 0) {
+ BAThseqbase(b, bb->hseqbase);
+ BATtseqbase(b, bb->tseqbase);
+ }
+ if (BATappend(b, bb, NULL, false) != GDK_SUCCEED) {
+ BBPunfix(bb->batCacheid);
BBPunfix(b->batCacheid);
throw(MAL, "mat.pack", GDK_EXCEPTION);
}
- if (!(!b->tnil || !b->tnonil)) {
+ BBPunfix(bb->batCacheid);
+ b->unused--;
+ if (b->unused == 0) {
+ if (!(nb = BATsetaccess(b, BAT_READ))) {
+ BBPunfix(b->batCacheid);
+ throw(MAL, "mat.pack", GDK_EXCEPTION);
+ }
+ b = nb;
+ }
+ if (b->tnil && b->tnonil) {
BBPunfix(b->batCacheid);
throw(MAL, "mat.pack", "INTERNAL ERROR" " b->tnil or
b->tnonil fails ");
}
@@ -234,7 +250,7 @@ MATpackValues(Client cntxt, MalBlkPtr mb
return MAL_SUCCEED;
bailout:
BBPreclaim(bn);
- throw(MAL, "mat.pack", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ throw(MAL, "mat.pack", GDK_EXCEPTION);
}
#include "mel.h"
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
@@ -351,7 +351,7 @@ MKEYbulk_rotate_xor_hash(Client cntxt, M
{
bat *res = getArgReference_bat(stk, pci, 0), *hid =
getArgReference_bat(stk, pci, 1), *bid = getArgReference_bat(stk, pci, 3),
*sid1 = pci->argc == 6 ? getArgReference_bat(stk, pci, 4) :
NULL, *sid2 = pci->argc == 6 ? getArgReference_bat(stk, pci, 5) : NULL;
- BAT *hb = NULL, *ob = NULL, *b = NULL, *bn = NULL, *s1 = NULL, *s2 =
NULL;
+ BAT *hb = NULL, *b = NULL, *bn = NULL, *s1 = NULL, *s2 = NULL;
int lbit = *getArgReference_int(stk, pci, 2), rbit = (int) sizeof(lng)
* 8 - lbit;
str msg = MAL_SUCCEED;
struct canditer ci1 = {0}, ci2 = {0};
@@ -370,10 +370,14 @@ MKEYbulk_rotate_xor_hash(Client cntxt, M
msg = createException(MAL, "mkey.rotate_xor_hash",
SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
goto bailout;
}
- ob = b;
- if ((b->ttype == TYPE_msk || mask_cand(b)) && !(b = BATunmask(b))) {
- msg = createException(MAL, "mkey.rotate_xor_hash",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
- goto bailout;
+ if (b->ttype == TYPE_msk || mask_cand(b)) {
+ BAT *ob = b;
+ b = BATunmask(b);
+ BBPunfix(ob->batCacheid);
+ if (!b) {
+ BBPunfix(hb->batCacheid);
+ throw(MAL, "mkey.rotate_xor_hash", GDK_EXCEPTION);
+ }
}
if ((sid1 && !is_bat_nil(*sid1) && !(s1 = BATdescriptor(*sid1))) ||
(sid2 && !is_bat_nil(*sid2) && !(s2 = BATdescriptor(*sid2)))) {
msg = createException(MAL, "mkey.rotate_xor_hash",
SQLSTATE(HY005) RUNTIME_OBJECT_MISSING);
@@ -466,8 +470,6 @@ bailout:
}
if (b)
BBPunfix(b->batCacheid);
- if (ob && b != ob)
- BBPunfix(ob->batCacheid);
if (hb)
BBPunfix(hb->batCacheid);
if (s1)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list