Changeset: d1e9a3d5ed93 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d1e9a3d5ed93
Modified Files:
        monetdb5/modules/kernel/array.c
        monetdb5/modules/kernel/bat5.c
Branch: default
Log Message:

Void-headed BATs only


diffs (76 lines):

diff --git a/monetdb5/modules/kernel/array.c b/monetdb5/modules/kernel/array.c
--- a/monetdb5/modules/kernel/array.c
+++ b/monetdb5/modules/kernel/array.c
@@ -363,9 +363,9 @@ arraymultiply(int,lng)
 arraymultiply(lng,lng)
 
 str
-ARRAYproduct(int *ret, int *bid, int *rid)
+ARRAYproduct(int *ret, int *ret2, int *bid, int *rid)
 {
-       BAT *bn, *b, *r;
+       BAT *bn, *bm, *b, *r;
        BUN p, q, s, t;
        BATiter bi, ri;
 
@@ -381,13 +381,28 @@ ARRAYproduct(int *ret, int *bid, int *ri
                BBPreleaseref(r->batCacheid);
                throw(MAL, "array.product", "Illegal argument bounds");
        }
-       bn = BATnew(b->ttype, r->ttype, BATcount(r));
+       bn = BATnew(TYPE_void,b->ttype, BATcount(r));
+       if( bn == NULL){
+               BBPreleaseref(b->batCacheid);
+               BBPreleaseref(r->batCacheid);
+               throw(MAL, "array.product", "Illegal argument bounds");
+       }
+       bm = BATnew(TYPE_void,r->ttype, BATcount(r));
+       if( bm == NULL){
+               BBPreleaseref(bn->batCacheid);
+               BBPreleaseref(b->batCacheid);
+               BBPreleaseref(r->batCacheid);
+               throw(MAL, "array.product", "Illegal argument bounds");
+       }
+       BATseqbase(bn,0);
+       BATseqbase(bm,0);
 
        bi = bat_iterator(b);
        ri = bat_iterator(r);
        BATloop(r, s, t) {
                BATloop(b, p, q) {
-                       BUNfastins(bn, BUNtail(bi, p), BUNtail(ri, s));
+                       BUNappend(bn, BUNtail(bi,p), FALSE);
+                       BUNappend(bm, BUNtail(ri,s), FALSE);
                        s++;
                }
                s--;
@@ -400,7 +415,17 @@ ARRAYproduct(int *ret, int *bid, int *ri
        bn->T->nonil = b->T->nonil & r->T->nonil;
        if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ); \
        *ret = bn->batCacheid;
+
+       bm->hsorted = 0;
+       bm->hrevsorted = 0;
+       bm->tsorted = 0;
+       bm->trevsorted = 0;
+       bm->T->nonil = b->T->nonil & r->T->nonil;
+       if (!(bm->batDirty&2)) bm = BATsetaccess(bm, BAT_READ); \
+       *ret = bm->batCacheid;
+
        BBPkeepref(*ret);
+       BBPkeepref(*ret2);
        BBPreleaseref(b->batCacheid);
        BBPreleaseref(r->batCacheid);
        return MAL_SUCCEED;
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
@@ -2022,7 +2022,7 @@ BKCsetHash(bit *ret, int *bid, bit *prop
        if ((b = BATdescriptor(*bid)) == NULL) {
                throw(MAL, "bat.setHash", RUNTIME_OBJECT_MISSING);
        }
-       BAThash(b, 0);
+       BAThash(BATmirror(b), 0);
        BBPreleaseref(b->batCacheid);
        return MAL_SUCCEED;
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to