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