Changeset: 8677b85843fa for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8677b85843fa
Modified Files:
monetdb5/optimizer/opt_costModel.mx
monetdb5/optimizer/opt_mitosis.mx
monetdb5/optimizer/opt_prelude.mx
Branch: default
Log Message:
Cost model refinements
diffs (86 lines):
diff --git a/monetdb5/optimizer/opt_costModel.mx
b/monetdb5/optimizer/opt_costModel.mx
--- a/monetdb5/optimizer/opt_costModel.mx
+++ b/monetdb5/optimizer/opt_costModel.mx
@@ -177,14 +177,18 @@
@:newRows2(c1+c2)@
} else if (getFunctionId(p)== kdifferenceRef) {
@:newRows2(c1==0?0:c2==0?c1: c1 - c2 < 0 ? 1 :
c1 - c2+1)@
- } else if (getFunctionId(p) == joinRef ) {
+ } else if (getFunctionId(p) == joinRef ||
+ getFunctionId(p) == leftjoinRef ||
+ getFunctionId(p) == leftjoinPathRef ) {
/* assume 1-1 joins */
@:newRows2(c1 < c2 ? c1 : c2)@
} else if (getFunctionId(p) == semijoinRef ) {
/* assume 1-1 semijoins */
@:newRows2(c1 < c2? c1 : c2)@
} else if (getFunctionId(p) == selectRef ||
- getFunctionId(p) == uselectRef) {
+ getFunctionId(p) == uselectRef ||
+ getFunctionId(p) == thetaselectRef ||
+ getFunctionId(p) == thetauselectRef) {
@:newRows1(1, c1 > 100 ? c1 / 2 +1: c1)@
} else if (getFunctionId(p) == crossRef) {
@:newRows2((log((double) c1) + log((double) c2)
> log(INT_MAX) ? INT_MAX : c1 * c2 +1))@
@@ -192,10 +196,17 @@
@:newRows1(1, c1 < 50 ? c1 : c1 / 10+1)@
}
} else if (getModuleId(p) == batcalcRef) {
- if( isaBatType(getArgType(mb,p,1)) )
+ if( getFunctionId(p) == ifthenelseRef) {
+ if( isaBatType(getArgType(mb,p,2) ) )
+ @:newRows1(2, c1)@
+ else
+ @:newRows1(3, c1)@
+ } else if( isaBatType(getArgType(mb,p,1)) )
+ @:newRows1(1, c1)@
+ else
+ @:newRows1(2, c2)@
+ } else if (getModuleId(p) == batstrRef) {
@:newRows1(1, c1)@
- else
- @:newRows1(2, c2)@
} else if (getModuleId(p) == batRef) {
if (getFunctionId(p) == reverseRef ||
getFunctionId(p) == setWriteModeRef ||
diff --git a/monetdb5/optimizer/opt_mitosis.mx
b/monetdb5/optimizer/opt_mitosis.mx
--- a/monetdb5/optimizer/opt_mitosis.mx
+++ b/monetdb5/optimizer/opt_mitosis.mx
@@ -252,8 +252,9 @@
}
rows = varGetProp(mb, getArg(p,0), rowsProp);
if ( rows){
+ wrd prows = rows->value.val.wval / pieces + 1;
memset((char*) &vr, 0, sizeof(vr));
- varSetProp(mb, k, rowsProp, op_eq, VALset(&vr,
TYPE_wrd, &rows->value.val.wval));
+ varSetProp(mb, k, rowsProp, op_eq, VALset(&vr,
TYPE_wrd, &prows));
}
if (getFunctionId(p) == binddbatRef) {
diff --git a/monetdb5/optimizer/opt_prelude.mx
b/monetdb5/optimizer/opt_prelude.mx
--- a/monetdb5/optimizer/opt_prelude.mx
+++ b/monetdb5/optimizer/opt_prelude.mx
@@ -89,6 +89,7 @@
opt_export str hashRef;
opt_export str histogramRef;
opt_export str identityRef;
+opt_export str ifthenelseRef;
opt_export str inplaceRef;
opt_export str insertRef;
opt_export str intRef;
@@ -301,6 +302,7 @@
str hashRef;
str histogramRef;
str identityRef;
+str ifthenelseRef;
str inplaceRef;
str insertRef;
str intRef;
@@ -509,6 +511,7 @@
hashRef = putName("hash",4);
histogramRef = putName("histogram",9);
identityRef = putName("identity",8);
+ ifthenelseRef = putName("ifthenelse",10);
inplaceRef = putName("inplace",7);
insertRef = putName("insert",6);
intRef = putName("int",3);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list