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