Changeset: 267d133c11a5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=267d133c11a5
Modified Files:
monetdb5/extras/bwd/optimizer.c
Branch: bwd
Log Message:
* making sure group bys get properly refined
Unterschiede (36 Zeilen):
diff --git a/monetdb5/extras/bwd/optimizer.c b/monetdb5/extras/bwd/optimizer.c
--- a/monetdb5/extras/bwd/optimizer.c
+++ b/monetdb5/extras/bwd/optimizer.c
@@ -26,10 +26,14 @@ static inline int OPTBWDImplementation(C
size_t instructionCount = malBlock->stop;
size_t initialNumberOfVariables = malBlock->vtop;
int* approximations = malloc(initialNumberOfVariables*sizeof(int));
+ int* leftJoinResultLeftInputs =
malloc(initialNumberOfVariables*sizeof(int));
+
InstrPtr* oldProgram = malBlock->stmt;
uint i;
- for (i = 0; i < initialNumberOfVariables; ++i)
+ for (i = 0; i < initialNumberOfVariables; ++i) {
approximations[i] = 0;
+ leftJoinResultLeftInputs[i] = 0;
+ }
for (i = 0; i < instructionCount; ++i)
if(oldProgram[i]->modname == sqlRef && (oldProgram[i]->fcnname
== bindRef || oldProgram[i]->fcnname == bindidxRef))
approximations[getDestVar(oldProgram[i])] =
getDestVar(oldProgram[i]);
@@ -136,6 +140,16 @@ static inline int OPTBWDImplementation(C
/* refineLeftjoin =
pushReturn(malBlock, refineLeftjoin, getArg(oldProgram[i], j)); */
refineLeftjoin = pushArgument(malBlock,
refineLeftjoin, approximations[getArg(oldProgram[i], j)]);
pushInstruction(malBlock, refineLeftjoin);
+ if(match_function(oldProgram[i], algebraRef,
leftjoinRef)){
+
leftJoinResultLeftInputs[getDestVar(refineLeftjoin)] = getArg(refineLeftjoin,
1);
+ } else if(match_function(oldProgram[i],
groupRef, multicolumnsRef)){
+ InstrPtr groupReduction =
newInstruction(malBlock, ASSIGNsymbol);
+ rename_function(groupReduction,
GDKstrdup(algebraRef), GDKstrdup(leftjoinRef), (int[]){0}, client);
+ groupReduction = pushReturn(malBlock,
groupReduction, getArg(oldProgram[i], 1));
+ groupReduction = pushArgument(malBlock,
groupReduction, leftJoinResultLeftInputs[getArg(oldProgram[i], 2)]);
+ groupReduction = pushArgument(malBlock,
groupReduction, getArg(oldProgram[i], 1));
+ pushInstruction(malBlock,
groupReduction);
+ }
}
} else {
pushInstruction(malBlock, oldProgram[i]);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list