Changeset: 6f48d8060e44 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6f48d8060e44
Modified Files:
        monetdb5/extras/bwd/operations.c
Branch: bwd
Log Message:

* made (left)join deal with non-void headed left inputs


Unterschiede (73 Zeilen):

diff --git a/monetdb5/extras/bwd/operations.c b/monetdb5/extras/bwd/operations.c
--- a/monetdb5/extras/bwd/operations.c
+++ b/monetdb5/extras/bwd/operations.c
@@ -359,7 +359,7 @@ str BWDLeftJoinRefine(bat * res, bat * l
                        BATsetcount(refinement, approximation->batCount);
                        for (i = 0; i < approximation->batCount; ++i) 
                                outputRegion[i] = approximationRegion[i] + 
((*((unsigned int*) (residuals + (i+offset)*residualBytes))) >> 
approximationBits);
-               } else if(BAThvoid(left) && BAThvoid(right) && right->tseqbase 
!= oid_nil){
+               } else if(BAThvoid(right) && right->tseqbase != oid_nil){
                        // we essentially perform a merge-join of the precise 
positions (left tail) and the approximate positions to get the approximate 
values of the super result set
                        // this is okay because the approximate positions are a 
superset of the precise positions and the position lists have the same 
permutation
                        // we reconstruct the precise values in the same loop
@@ -374,6 +374,7 @@ str BWDLeftJoinRefine(bat * res, bat * l
                        supersetApproximateValuesColumn = 
getApproximateValuesColumn(batTailApproximation(approximation), 
GDKmalloc(bufferSize), &bufferSize);
 
                        refinement = BATnew(TYPE_void, ATOMtype(right->ttype), 
left->batCount);
+
                        if(batTailResidualBits(approximation) == 0){
 #define expansionLoop(type) {                                                  
                                                                                
                                        \
                                        unsigned int i;                         
                                                                                
                                                                                
                                \
@@ -435,6 +436,14 @@ str BWDLeftJoinRefine(bat * res, bat * l
                
                        GDKfree(supersetPositionsColumn);
                        GDKfree(supersetApproximateValuesColumn);
+
+                       if(!BAThvoid(left)){ // propagate left head column
+                               /* BATseqbase(refinement, oid_nil); */
+                               BATseqbase(BATmirror(refinement), oid_nil);
+                               refinement = VIEWcreate(BATmark(left, 
oid_nil),refinement);
+                       
+                               /* refinement = 
VIEWcreate(VIEWhead(left),refinement); */
+                       }
                }
 
                BBPkeepref(*res = refinement->batCacheid);
@@ -1290,7 +1299,7 @@ str BWDjoinApproximate(int *ret, int *li
        str result;
        BAT *left = BATdescriptor(*lid), *right = BATdescriptor(*rid);
 
-       if(BAThvoid(left) && BAThvoid(right) && right->tseqbase != oid_nil){
+       if(BATttype(left) == TYPE_oid){
                result = BWDLeftJoinApproximate(ret, lid, rid);
 
        } else {
@@ -1306,7 +1315,7 @@ str BWDjoinRefine(int *ret, int *lid, in
        str result;
        BAT *left = BATdescriptor(*lid), *right = BATdescriptor(*rid);
 
-       if(BAThvoid(left) && BAThvoid(right) && right->tseqbase != oid_nil){
+       if(BAThvoid(right) && right->tseqbase != oid_nil){
                result = BWDLeftJoinRefine(ret, lid, rid, approx);
 
        } else {
@@ -1543,7 +1552,7 @@ str BWDMulticolumnGroupApproximate(Clien
                                        clHead* positions;
                                        clTail* counts;
                                        size_t bufferSize;
-                                       int i;
+                                       unsigned int i;
                                        
getPositionsColumn(batHeadApproximation(histo), NULL, &bufferSize);
                                        positions = 
getPositionsColumn(batHeadApproximation(histo), GDKmalloc(bufferSize), 
&bufferSize);
                                        
getApproximateValuesColumn(batTailApproximation(histo), NULL, &bufferSize);
@@ -1629,8 +1638,8 @@ str BWDMulticolumnGroupRefine(Client cnt
                /* BBPincref(*rethisto = 
materializeBATInHostMemory(approximationrethisto)->batCacheid, 1); */
                BBPkeepref(*retbid = 
materializeBATInHostMemory(approximationretbid)->batCacheid);
                BBPkeepref(*rethisto = 
materializeBATInHostMemory(approximationrethisto)->batCacheid);
-               BBPreleaseref(*retbid);
-               BBPreleaseref(*rethisto);
+               BBPreleaseref(approximationrethisto->batCacheid);
+               BBPreleaseref(approximationretbid->batCacheid);
        }
        for (i = 0; i< pci->argc-4; ++i)
                BBPreleaseref(inputs[i]->batCacheid);    
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to