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

* we don't have to refine the grouping result if the approximation is accurate


Unterschiede (50 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
@@ -1820,27 +1820,35 @@ str BWDMulticolumnGroupRefine(Client cnt
                {
                        unsigned int count = 
getCount(batTailApproximation(approximationretbid));
                        BAT* result = BATnew(BAThtype(approximationretbid), 
BATttype(approximationretbid), count);
-                       clHead* positionsColumn;
-                       size_t bufferSize;
-                       
getPositionsColumn(batTailPositions(approximationretbid), NULL, &bufferSize);
-                       positionsColumn = 
getPositionsColumn(batTailPositions(approximationretbid), 
GDKmalloc(bufferSize), &bufferSize);
-                       assert(count == positionsColumn->count);
+                       /* size_t bufferSize; */
                        BATseqbase(result, 0);
                        {
                                register oid* outputRegion = (oid*) 
Tloc(result, BUNfirst(result));
-                               unsigned int i, outI, refinedPositionsI;
+                               unsigned int i;
                
                                clTail* valueColumn;
                                size_t bufferSize;
                                
getApproximateValuesColumn(batTailApproximation(approximationretbid), NULL, 
&bufferSize);
                                valueColumn = 
getApproximateValuesColumn(batTailApproximation(approximationretbid), 
GDKmalloc(bufferSize), &bufferSize);
                                assert(count == valueColumn->count);
-                               for (i = outI = refinedPositionsI = 0; i < 
count; i++)  {
-                                       outputRegion[outI] = ((unsigned 
int*)valueColumn->elements)[i];
-                                       outI += (positionsColumn->positions[i] 
== ((oid*)refinedOIDs->T->heap.base)[refinedPositionsI]);
-                                       refinedPositionsI += 
(positionsColumn->positions[i] == 
((oid*)refinedOIDs->T->heap.base)[refinedPositionsI]);
+                               if(valueColumn->count > BATcount(refinedOIDs)){
+                                       unsigned int outI, refinedPositionsI;
+                                       clHead* positionsColumn;
+                                       
getPositionsColumn(batTailPositions(approximationretbid), NULL, &bufferSize);
+                                       positionsColumn = 
getPositionsColumn(batTailPositions(approximationretbid), 
GDKmalloc(bufferSize), &bufferSize);
+                                       assert(count == positionsColumn->count);
+                                       for (i = outI = refinedPositionsI = 0; 
i < count; i++)  {
+                                               outputRegion[outI] = ((unsigned 
int*)valueColumn->elements)[i];
+                                               outI += 
(positionsColumn->positions[i] == 
((oid*)refinedOIDs->T->heap.base)[refinedPositionsI]);
+                                               refinedPositionsI += 
(positionsColumn->positions[i] == 
((oid*)refinedOIDs->T->heap.base)[refinedPositionsI]);
+                                       }
+                                       count = outI;                   
+                               } else {
+                                       for (i = 0; i < count; i++) 
+                                               outputRegion[i] = ((unsigned 
int*)valueColumn->elements)[i];
+                                       
                                }
-                               count = outI;
+
                                        
                        }
                        BATsetcount(result, count);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to