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