Changeset: 3194a8c0a3b1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3194a8c0a3b1
Modified Files:
        monetdb5/extras/bwd/91_bwd.sql
        monetdb5/extras/bwd/cl_program_utilities.c
        monetdb5/extras/bwd/operations.c
        monetdb5/extras/bwd/opt_bwd.mal
        monetdb5/extras/bwd/optimizer.c
        monetdb5/extras/bwd/pusher.c
Branch: bwd
Log Message:

* fixed TPC Q6 correctness


Unterschiede (105 Zeilen):

diff --git a/monetdb5/extras/bwd/91_bwd.sql b/monetdb5/extras/bwd/91_bwd.sql
--- a/monetdb5/extras/bwd/91_bwd.sql
+++ b/monetdb5/extras/bwd/91_bwd.sql
@@ -1,6 +1,9 @@
 create function bwdecomposedec(col decimal(9,2), bits integer)
 returns varchar(4096) external name bwd.decompose;
 
+create function bwdecomposedec9_2(col decimal(9,2), bits integer)
+returns varchar(4096) external name bwd.decompose;
+
 create function bwdecomposedec8_5(col decimal(8,5), bits integer)
 returns varchar(4096) external name bwd.decompose;
 
diff --git a/monetdb5/extras/bwd/cl_program_utilities.c 
b/monetdb5/extras/bwd/cl_program_utilities.c
--- a/monetdb5/extras/bwd/cl_program_utilities.c
+++ b/monetdb5/extras/bwd/cl_program_utilities.c
@@ -188,7 +188,9 @@ cl_program getUSelectProgram(int type, c
                "}"
        };
        char* sourceCode = malloc(16384);
-       snprintf(sourceCode, 16384, sourceCodeTemplates[inputIsVoidHeaded>0], 
(str[]){[TYPE_int] = "int"}[type], approximateOperation(predicateOperation), 
predicateOperation2?approximateOperation(predicateOperation2):"==", 
approximationBits/8-offsetBits/8, predicateOperation2 == NULL?1:0, 
offsetBits/8);
+       static const str typeNames[] = {[TYPE_int] = "int"};
+       static const size_t typeSizes[] = {[TYPE_int] = sizeof(int)};
+       snprintf(sourceCode, 16384, sourceCodeTemplates[inputIsVoidHeaded!=0], 
typeNames[type], (approximationBits == 
8*typeSizes[type])?predicateOperation:(approximateOperation(predicateOperation)),
 predicateOperation2?((approximationBits == 
8*typeSizes[type])?predicateOperation2:approximateOperation(predicateOperation2)):"==",
 approximationBits/8-offsetBits/8, predicateOperation2 == NULL?1:0, 
offsetBits/8);
        {
                cl_program program = compileProgram(sourceCode,"");
                free(sourceCode);
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
@@ -379,7 +379,7 @@ static inline str uselect(bat *res, bat 
                                        const int parameters[2] = {
                                                
(((((*(int*)val)-base)>>batTailResidualBits(data))<<batTailResidualBits(data)) 
+ base),
                                                
val2?(((((*(int*)val2)-base)>>batTailResidualBits(data))<<batTailResidualBits(data))
 + base):0};
-                                       printf ("relaxed conditions from (%d, 
%d) to (%d, %d)\n", *(int*)val, *(int*)val2, parameters[0], parameters[1]);
+                                       printf ("relaxed conditions from (%d, 
%d) to (%d, %d)\n", *(int*)val, val2?(*(int*)val2):-1, parameters[0], 
parameters[1]);
                                        int i;
                                        for (i = 0; i < 2; ++i) 
                                                if((err = 
clSetKernelArg(selectKernel, bufferI+i, sizeof(int), &(parameters[i]))))  // 
type specific
@@ -892,9 +892,9 @@ str BWDSumApproximate(lng* res, int *bid
        return MAL_SUCCEED;
 }
        
-str BWDSumRefine(int* res, int *bid, lng* approx) {
+str BWDSumRefine(lng* res, int *bid, lng* approx) {
        //TODO: implement me (easy)
-       return ALGsum_int_int(res, bid, (signed char[]){1});
+       return ALGsum_int_lng(res, bid, (signed char[]){1});
 }
 
 str bwd_export_value_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci){
diff --git a/monetdb5/extras/bwd/opt_bwd.mal b/monetdb5/extras/bwd/opt_bwd.mal
--- a/monetdb5/extras/bwd/opt_bwd.mal
+++ b/monetdb5/extras/bwd/opt_bwd.mal
@@ -55,7 +55,7 @@ address BWDSemijoinRefine;
 
 
 # This one is only temporarily implemented in mal
-function filter{inline} (tupleIds:bat[:oid,:void], 
filterAttribute:bat[:oid,:int], low:int, high:int, li:bit, hi:bit) 
:bat[:oid,:void];
+function filter{inline} (tupleIds:bat[:oid,:void], 
filterAttribute:bat[:oid,:any_1], low:any_1, high:any_1, li:bit, hi:bit) 
:bat[:oid,:void];
        projection := semijoinapproximate(filterAttribute, tupleIds);
   return selection := bwd.uselectapproximate(projection, low, high, li, hi); 
 end filter;
@@ -78,11 +78,11 @@ address BWDSelectNotNilRefine
 comment "Select all not-nil values";
 
 
-command sumapproximate (b:bat[:any_1,:any_2]) :any_2
+command sumapproximate (b:bat[:any_1,:int]) :lng
 address BWDSumApproximate
 comment "Gives the sum of all tail values.";
 
-command sumrefine (b:bat[:any_1,:any_2], approximation:any_2) :any_2
+command sumrefine (b:bat[:any_1,:int], approximation:lng) :lng
 address BWDSumRefine
 comment "Gives the sum of all tail values.";
 
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
@@ -87,8 +87,10 @@ static inline int OPTBWDImplementation(C
                        if (getTailType(getDestType(malBlock, oldProgram[i])) 
== TYPE_lng){ //TODO: implement bwd for longs
                                if(isaBatType(getDestType(malBlock, 
oldProgram[i])))
                                        setDestType(malBlock, oldProgram[i], 
newBatType(getHeadType(getDestType(malBlock, oldProgram[i])), TYPE_int));
-                               else
-                                       setDestType(malBlock, oldProgram[i], 
TYPE_int);
+                               else{
+                                       if(!match_function(oldProgram[i], 
"aggr", "sum")) setDestType(malBlock, oldProgram[i], TYPE_int);
+                               }
+                                       
                                
                        } 
                        approximations[getDestVar(oldProgram[i])] = 
newTmpVariable(malBlock, getDestType(malBlock, oldProgram[i]));
diff --git a/monetdb5/extras/bwd/pusher.c b/monetdb5/extras/bwd/pusher.c
--- a/monetdb5/extras/bwd/pusher.c
+++ b/monetdb5/extras/bwd/pusher.c
@@ -59,7 +59,7 @@ static inline int OPTBWDPusherImplementa
                                {
                                        int argumentI = 2;
                                        for (; argumentI < oldProgram[i]->argc; 
++argumentI) {
-                                               if(argumentI < 4){
+                                               if(argumentI < 4 && 
variableProducers[oldProgram[i]->argv[argumentI]]){
                                                        
pushInstruction(malBlock, 
copyInstruction(oldProgram[variableProducers[getArg(oldProgram[i], 
argumentI)]]));
                                                        
pushedInstructionCursors[variableProducers[getArg(oldProgram[i], argumentI)]] = 
1;
                                                }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to