Changeset: c6b4b2d6fc5c for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c6b4b2d6fc5c Modified Files: MonetDB5/src/optimizer/Tests/tst4730.stable.out MonetDB5/src/optimizer/opt_costModel.mx MonetDB5/src/optimizer/opt_emptySet.mx MonetDB5/src/optimizer/opt_mergetable.mx MonetDB5/src/optimizer/opt_mitosis.mx MonetDB5/src/optimizer/opt_pushranges.mx MonetDB5/src/optimizer/opt_support.mx sql/src/backends/monet5/sql_optimizer.mx sql/src/server/rel_bin.mx sql/src/server/sql_scan.mx sql/src/server/sql_statement.mx sql/src/test/BugTracker-2010/Tests/All Branch: default Log Message:
Merged from Jun2010 (manual) I manually resolved the conflicts that happened for Niels' rowsProp change. diffs (truncated from 841 to 300 lines): diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/modules/kernel/algebra.mx --- a/MonetDB5/src/modules/kernel/algebra.mx Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/modules/kernel/algebra.mx Fri Aug 06 12:47:46 2010 +0200 @@ -1871,6 +1871,8 @@ GDKerror("CMDslice: start position of slice should >= 0\n"); return GDK_FAIL; } + if (end == wrd_nil) + end = BATcount(b); if (start > (lng) BUN_MAX || end >= (lng) BUN_MAX) { GDKerror("CMDslice: argument out of range\n"); return GDK_FAIL; diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/Tests/CMexample.stable.out --- a/MonetDB5/src/optimizer/Tests/CMexample.stable.out Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/Tests/CMexample.stable.out Fri Aug 06 12:47:46 2010 +0200 @@ -26,9 +26,9 @@ # Cost model example r{rows=100} := bat.new(:oid,:int); # 2 r:bat[:oid,:int] := CMDBATnew(_4:oid, _5:int) {G} s{rows=1000} := bat.new(:oid,:int); # 3 s:bat[:oid,:int] := CMDBATnew(_4:oid, _8:int) {G} - rs{rows=501:lng} := algebra.select(s{rows=1000},1,1);# 4 rs:bat[:oid,:int] := ALGselect(s:bat[:oid,:int], _10:int, _10:int) {G} - rr{rows=100:lng} := bat.reverse(r{rows=100});# 5 rr:bat[:int,:oid] := BKCreverse(r:bat[:oid,:int]) {G} - j{rows=100:lng} := algebra.join(rs{rows=501:lng},rr{rows=100:lng});# 6 j:bat[:oid,:oid] := ALGjoin(rs:bat[:oid,:int], rr:bat[:int,:oid]) {G} + rs{rows=501} := algebra.select(s{rows=1000},1,1);# 4 rs:bat[:oid,:int] := ALGselect(s:bat[:oid,:int], _10:int, _10:int) {G} + rr{rows=100} := bat.reverse(r{rows=100});# 5 rr:bat[:int,:oid] := BKCreverse(r:bat[:oid,:int]) {G} + j{rows=100} := algebra.join(rs{rows=501},rr{rows=100});# 6 j:bat[:oid,:oid] := ALGjoin(rs:bat[:oid,:int], rr:bat[:int,:oid]) {G} mdb.List(); # 7 _14:void := MDBlistDetail() end main; # 8 diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/Tests/emptyset00.stable.out --- a/MonetDB5/src/optimizer/Tests/emptyset00.stable.out Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/Tests/emptyset00.stable.out Fri Aug 06 12:47:46 2010 +0200 @@ -28,9 +28,9 @@ function user.main():void; # 0 main:void := user.main() {G} b := bat.new(:oid,:int); # 1 b:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} s1 := algebra.select(b,80,90); # 2 s1:bat[:oid,:int] := ALGselect(b:bat[:oid,:int], _5:int, _6:int) {G} - s2{rows=0:lng} := bat.new(:oid,:int);# 3 s2:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} - s3{rows=0:lng} := bat.new(:oid,:int);# 4 s3:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} - io.print(s3{rows=0:lng}); # 5 _9:void := IOprint_val(s3:bat[:oid,:int]) {G} + s2{rows=0} := bat.new(:oid,:int); # 3 s2:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} + s3{rows=0} := bat.new(:oid,:int); # 4 s3:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} + io.print(s3{rows=0}); # 5 _9:void := IOprint_val(s3:bat[:oid,:int]) {G} mdb.List(); # 6 _12:void := MDBlistDetail() end main; # 7 diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/Tests/emptyset01.stable.out --- a/MonetDB5/src/optimizer/Tests/emptyset01.stable.out Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/Tests/emptyset01.stable.out Fri Aug 06 12:47:46 2010 +0200 @@ -39,7 +39,7 @@ V1 := bat.new(:oid,:int); # 1 V1:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} V7 := bat.new(:oid,:int); # 2 V7:bat[:oid,:int] := CMDBATnew(_2:oid, _3:int) {G} V10{rows=0:lng} := bat.new(:int,:oid);# 3 V10:bat[:int,:oid] := CMDBATnew(_3:int, _2:oid) {G} - V11{rows=0:lng} := bat.reverse(V10{rows=0:lng});# 4 V11:bat[:oid,:int] := BKCreverse(V10:bat[:int,:oid]) {G} + V11{rows=0} := bat.reverse(V10{rows=0:lng});# 4 V11:bat[:oid,:int] := BKCreverse(V10:bat[:int,:oid]) {G} V12 := V7; # 5 V12:bat[:oid,:int] := V7:bat[:oid,:int] {G} V16 := algebra.markT(V12); # 6 V16:bat[:oid,:oid] := ALGtmark_default(V12:bat[:oid,:int]) {G} V17 := algebra.join(V16,V7); # 7 V17:bat[:oid,:int] := ALGjoin(V16:bat[:oid,:oid], V7:bat[:oid,:int]) {G} diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/Tests/rangePush01.stable.out --- a/MonetDB5/src/optimizer/Tests/rangePush01.stable.out Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/Tests/rangePush01.stable.out Fri Aug 06 12:47:46 2010 +0200 @@ -29,12 +29,12 @@ # detect empty ranges b := bat.new(:void,:int); # 2 b:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} s1 := algebra.select(b,80,90); # 3 s1:bat[:void,:int] := ALGselect(b:bat[:void,:int], _6:int, _7:int) {G} - s2{rows=0:lng} := bat.new(:void,:int);# 4 s2:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} + s2{rows=0} := bat.new(:void,:int); # 4 s2:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} s3 := algebra.select(b,80,80); # 5 s3:bat[:void,:int] := ALGselect(b:bat[:void,:int], _6:int, _6:int) {G} s4 := algebra.select(b,80,80,true,true);# 6 s4:bat[:void,:int] := ALGselectInclusive(b:bat[:void,:int], _6:int, _6:int, _11:bit, _11:bit) {G} - s5{rows=0:lng} := bat.new(:void,:int);# 7 s5:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} - s6{rows=0:lng} := bat.new(:void,:int);# 8 s6:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} - s7{rows=0:lng} := bat.new(:void,:int);# 9 s7:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} + s5{rows=0} := bat.new(:void,:int); # 7 s5:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} + s6{rows=0} := bat.new(:void,:int); # 8 s6:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} + s7{rows=0} := bat.new(:void,:int); # 9 s7:bat[:void,:int] := CMDBATnew(_3:void, _4:int) {G} mdb.List(); # 10 _17:void := MDBlistDetail() end main; # 11 diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/Tests/tst4730.stable.out --- a/MonetDB5/src/optimizer/Tests/tst4730.stable.out Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/Tests/tst4730.stable.out Fri Aug 06 12:47:46 2010 +0200 @@ -111,54 +111,54 @@ V75:bat[:oid,:flt] {rows=1000:lng} := user.bind("sys","lineitem","l_discount",0);# 7 V75:bat[:oid,:flt] := user.bind(_8:str, _9:str, _22:str, _11:int) {G} V105:bat[:oid,:flt] {rows=1000:lng} := user.bind("sys","lineitem","l_tax",0);# 8 V105:bat[:oid,:flt] := user.bind(_8:str, _9:str, _24:str, _11:int) {G} barrier always := true; # 9 always:bit := _26:bit {J72} - V12{rows=1000:lng} := bat.reverse(V11{rows=1000:lng});# 10 V12:bat[:oid,:oid] := BKCreverse(V11:bat[:oid,:oid]) {G} - V13{rows=1:lng} := algebra.kdifference(V6{rows=1000:lng},V12{rows=1000:lng});# 11 V13:bat[:oid,:date] := ALGkdiff(V6:bat[:oid,:date], V12:bat[:oid,:oid]) {G} + V12{rows=1000} := bat.reverse(V11{rows=1000:lng});# 10 V12:bat[:oid,:oid] := BKCreverse(V11:bat[:oid,:oid]) {G} + V13{rows=1} := algebra.kdifference(V6{rows=1000:lng},V12{rows=1000});# 11 V13:bat[:oid,:date] := ALGkdiff(V6:bat[:oid,:date], V12:bat[:oid,:oid]) {G} V16 := mtime.date_sub_sec_interval(A3,A4);# 12 V16:date := MTIMEdate_sub_sec_interval_wrap(A3:date, A4:int) a := mtime.date(nil); # 13 a:date := MTIMEnil2date(_31:void) - V17{rows=1:lng} := algebra.uselect(V13{rows=1:lng},a,V16);# 14 V17:bat[:oid,:void] := ALGuselect(V13:bat[:oid,:date], a:date, V16:date) {G} - V20{rows=1:lng} := algebra.markT(V17{rows=1:lng},0...@0);# 15 V20:bat[:oid,:oid] := ALGtmark(V17:bat[:oid,:void], _34:oid) {G} - V21{rows=1:lng} := bat.reverse(V20{rows=1:lng});# 16 V21:bat[:oid,:oid] := BKCreverse(V20:bat[:oid,:oid]) {G} - V26{rows=1:lng} := algebra.kdifference(V22{rows=1000:lng},V12{rows=1000:lng});# 17 V26:bat[:oid,:bit] := ALGkdiff(V22:bat[:oid,:bit], V12:bat[:oid,:oid]) {G} - V27{rows=1:lng} := algebra.join(V21{rows=1:lng},V26{rows=1:lng});# 18 V27:bat[:oid,:bit] := ALGjoin(V21:bat[:oid,:oid], V26:bat[:oid,:bit]) {G} - (h,V28) := group.new(V27{rows=1:lng});# 19 (h:bat[:oid,:wrd], V28:bat[:oid,:oid]) := GRPgroup(V27:bat[:oid,:bit]) {G} - V33{rows=1:lng} := algebra.kdifference(V29{rows=1000:lng},V12{rows=1000:lng});# 20 V33:bat[:oid,:bit] := ALGkdiff(V29:bat[:oid,:bit], V12:bat[:oid,:oid]) {G} - V34{rows=1:lng} := algebra.join(V21{rows=1:lng},V33{rows=1:lng});# 21 V34:bat[:oid,:bit] := ALGjoin(V21:bat[:oid,:oid], V33:bat[:oid,:bit]) {G} - (Ext,V35) := group.derive(h,V28,V34{rows=1:lng});# 22 (Ext:bat[:oid,:wrd], V35:bat[:oid,:oid]) := GRPderive(h:bat[:oid,:wrd], V28:bat[:oid,:oid], V34:bat[:oid,:bit]) {G} + V17{rows=1} := algebra.uselect(V13{rows=1},a,V16);# 14 V17:bat[:oid,:void] := ALGuselect(V13:bat[:oid,:date], a:date, V16:date) {G} + V20{rows=1} := algebra.markT(V17{rows=1},0...@0);# 15 V20:bat[:oid,:oid] := ALGtmark(V17:bat[:oid,:void], _34:oid) {G} + V21{rows=1} := bat.reverse(V20{rows=1});# 16 V21:bat[:oid,:oid] := BKCreverse(V20:bat[:oid,:oid]) {G} + V26{rows=1} := algebra.kdifference(V22{rows=1000:lng},V12{rows=1000});# 17 V26:bat[:oid,:bit] := ALGkdiff(V22:bat[:oid,:bit], V12:bat[:oid,:oid]) {G} + V27{rows=1} := algebra.join(V21{rows=1},V26{rows=1});# 18 V27:bat[:oid,:bit] := ALGjoin(V21:bat[:oid,:oid], V26:bat[:oid,:bit]) {G} + (h,V28) := group.new(V27{rows=1}); # 19 (h:bat[:oid,:wrd], V28:bat[:oid,:oid]) := GRPgroup(V27:bat[:oid,:bit]) {G} + V33{rows=1} := algebra.kdifference(V29{rows=1000:lng},V12{rows=1000});# 20 V33:bat[:oid,:bit] := ALGkdiff(V29:bat[:oid,:bit], V12:bat[:oid,:oid]) {G} + V34{rows=1} := algebra.join(V21{rows=1},V33{rows=1});# 21 V34:bat[:oid,:bit] := ALGjoin(V21:bat[:oid,:oid], V33:bat[:oid,:bit]) {G} + (Ext,V35) := group.derive(h,V28,V34{rows=1});# 22 (Ext:bat[:oid,:wrd], V35:bat[:oid,:oid]) := GRPderive(h:bat[:oid,:wrd], V28:bat[:oid,:oid], V34:bat[:oid,:bit]) {G} V36 := algebra.tunique(Ext); # 23 V36:bat[:oid,:wrd] := ALGtunique(Ext:bat[:oid,:wrd]) {G} V37 := bat.mirror(V36); # 24 V37:bat[:oid,:oid] := BKCmirror(V36:bat[:oid,:wrd]) {G} - V42 := algebra.join(V37,V27{rows=1:lng});# 25 V42:bat[:oid,:bit] := ALGjoin(V37:bat[:oid,:oid], V27:bat[:oid,:bit]) {G} + V42 := algebra.join(V37,V27{rows=1});# 25 V42:bat[:oid,:bit] := ALGjoin(V37:bat[:oid,:oid], V27:bat[:oid,:bit]) {G} V43 := algebra.sort(V42); # 26 V43:bat[:oid,:bit] := ALGhsort(V42:bat[:oid,:bit]) {G} - V51 := algebra.join(V37,V34{rows=1:lng});# 27 V51:bat[:oid,:bit] := ALGjoin(V37:bat[:oid,:oid], V34:bat[:oid,:bit]) {G} + V51 := algebra.join(V37,V34{rows=1});# 27 V51:bat[:oid,:bit] := ALGjoin(V37:bat[:oid,:oid], V34:bat[:oid,:bit]) {G} V52 := group.refine(V43,V51); # 28 V52:bat[:oid,:oid] := GRPrefine(V43:bat[:oid,:bit], V51:bat[:oid,:bit]) {G} - V57{rows=1:lng} := algebra.kdifference(V53{rows=1000:lng},V12{rows=1000:lng});# 29 V57:bat[:oid,:int] := ALGkdiff(V53:bat[:oid,:int], V12:bat[:oid,:oid]) {G} - V58{rows=1:lng} := algebra.join(V21{rows=1:lng},V57{rows=1:lng});# 30 V58:bat[:oid,:int] := ALGjoin(V21:bat[:oid,:oid], V57:bat[:oid,:int]) {G} - V59{rows=1:lng} := aggr.sum(V58{rows=1:lng},V35,V37);# 31 V59:bat[:oid,:lng] := AX3aggrX3_sum3_int_lng(V58:bat[:oid,:int], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} - V64{rows=1:lng} := algebra.kdifference(V60{rows=1000:lng},V12{rows=1000:lng});# 32 V64:bat[:oid,:flt] := ALGkdiff(V60:bat[:oid,:flt], V12:bat[:oid,:oid]) {G} - V65{rows=1:lng} := algebra.join(V21{rows=1:lng},V64{rows=1:lng});# 33 V65:bat[:oid,:flt] := ALGjoin(V21:bat[:oid,:oid], V64:bat[:oid,:flt]) {G} - V66{rows=1:lng} := aggr.sum(V65{rows=1:lng},V35,V37);# 34 V66:bat[:oid,:dbl] := AX3aggrX3_sum3_flt_dbl(V65:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V57{rows=1} := algebra.kdifference(V53{rows=1000:lng},V12{rows=1000});# 29 V57:bat[:oid,:int] := ALGkdiff(V53:bat[:oid,:int], V12:bat[:oid,:oid]) {G} + V58{rows=1} := algebra.join(V21{rows=1},V57{rows=1});# 30 V58:bat[:oid,:int] := ALGjoin(V21:bat[:oid,:oid], V57:bat[:oid,:int]) {G} + V59{rows=1} := aggr.sum(V58{rows=1},V35,V37);# 31 V59:bat[:oid,:lng] := AX3aggrX3_sum3_int_lng(V58:bat[:oid,:int], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V64{rows=1} := algebra.kdifference(V60{rows=1000:lng},V12{rows=1000});# 32 V64:bat[:oid,:flt] := ALGkdiff(V60:bat[:oid,:flt], V12:bat[:oid,:oid]) {G} + V65{rows=1} := algebra.join(V21{rows=1},V64{rows=1});# 33 V65:bat[:oid,:flt] := ALGjoin(V21:bat[:oid,:oid], V64:bat[:oid,:flt]) {G} + V66{rows=1} := aggr.sum(V65{rows=1},V35,V37);# 34 V66:bat[:oid,:dbl] := AX3aggrX3_sum3_flt_dbl(V65:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} V72 := calc.lng(A0); # 35 V72:lng := CALCsht2lng(A0:sht) V74 := calc.*(V72,100); # 36 V74:lng := CALCbinaryMULlngint(V72:lng, _58:int) - V82{rows=1:lng} := algebra.kdifference(V75{rows=1000:lng},V12{rows=1000:lng});# 37 V82:bat[:oid,:flt] := ALGkdiff(V75:bat[:oid,:flt], V12:bat[:oid,:oid]) {G} - V83{rows=1:lng} := algebra.join(V21{rows=1:lng},V82{rows=1:lng});# 38 V83:bat[:oid,:flt] := ALGjoin(V21:bat[:oid,:oid], V82:bat[:oid,:flt]) {G} - V84:bat[:oid,:flt] := mal.multiplex("calc.-",V74,V83{rows=1:lng});# 39 V84:bat[:oid,:flt] := OPTremapMultiplex(_62:str, V74:lng, V83:bat[:oid,:flt]) {G} - V86{rows=1:lng} := batcalc.*(V65{rows=1:lng},V84);# 40 V86:bat[:oid,:flt] := CMDbatMUL_flt_flt_flt(V65:bat[:oid,:flt], V84:bat[:oid,:flt]) {G} - V88{rows=1:lng} := aggr.sum(V86{rows=1:lng},V35,V37);# 41 V88:bat[:oid,:dbl] := AX3aggrX3_sum3_flt_dbl(V86:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V82{rows=1} := algebra.kdifference(V75{rows=1000:lng},V12{rows=1000});# 37 V82:bat[:oid,:flt] := ALGkdiff(V75:bat[:oid,:flt], V12:bat[:oid,:oid]) {G} + V83{rows=1} := algebra.join(V21{rows=1},V82{rows=1});# 38 V83:bat[:oid,:flt] := ALGjoin(V21:bat[:oid,:oid], V82:bat[:oid,:flt]) {G} + V84:bat[:oid,:flt] := mal.multiplex("calc.-",V74,V83{rows=1});# 39 V84:bat[:oid,:flt] := OPTremapMultiplex(_62:str, V74:lng, V83:bat[:oid,:flt]) {G} + V86{rows=1} := batcalc.*(V65{rows=1},V84);# 40 V86:bat[:oid,:flt] := CMDbatMUL_flt_flt_flt(V65:bat[:oid,:flt], V84:bat[:oid,:flt]) {G} + V88{rows=1} := aggr.sum(V86{rows=1},V35,V37);# 41 V88:bat[:oid,:dbl] := AX3aggrX3_sum3_flt_dbl(V86:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} V94 := calc.lng(A1); # 42 V94:lng := CALCsht2lng(A1:sht) V95 := calc.*(V94,100); # 43 V95:lng := CALCbinaryMULlngint(V94:lng, _58:int) - V100:bat[:oid,:flt] := mal.multiplex("calc.-",V95,V83{rows=1:lng});# 44 V100:bat[:oid,:flt] := OPTremapMultiplex(_62:str, V95:lng, V83:bat[:oid,:flt]) {G} - V101{rows=1:lng} := batcalc.*(V65{rows=1:lng},V100);# 45 V101:bat[:oid,:flt] := CMDbatMUL_flt_flt_flt(V65:bat[:oid,:flt], V100:bat[:oid,:flt]) {G} + V100:bat[:oid,:flt] := mal.multiplex("calc.-",V95,V83{rows=1});# 44 V100:bat[:oid,:flt] := OPTremapMultiplex(_62:str, V95:lng, V83:bat[:oid,:flt]) {G} + V101{rows=1} := batcalc.*(V65{rows=1},V100);# 45 V101:bat[:oid,:flt] := CMDbatMUL_flt_flt_flt(V65:bat[:oid,:flt], V100:bat[:oid,:flt]) {G} V103 := calc.lng(A2); # 46 V103:lng := CALCsht2lng(A2:sht) V104 := calc.*(V103,100); # 47 V104:lng := CALCbinaryMULlngint(V103:lng, _58:int) - V109{rows=1:lng} := algebra.kdifference(V105{rows=1000:lng},V12{rows=1000:lng});# 48 V109:bat[:oid,:flt] := ALGkdiff(V105:bat[:oid,:flt], V12:bat[:oid,:oid]) {G} - V110{rows=1:lng} := algebra.join(V21{rows=1:lng},V109{rows=1:lng});# 49 V110:bat[:oid,:flt] := ALGjoin(V21:bat[:oid,:oid], V109:bat[:oid,:flt]) {G} - V111:bat[:oid,:flt] := mal.multiplex("calc.+",V104,V110{rows=1:lng});# 50 V111:bat[:oid,:flt] := OPTremapMultiplex(_74:str, V104:lng, V110:bat[:oid,:flt]) {G} - V113{rows=1:lng} := batcalc.*(V101{rows=1:lng},V111);# 51 V113:bat[:oid,:flt] := CMDbatMUL_flt_flt_flt(V101:bat[:oid,:flt], V111:bat[:oid,:flt]) {G} - V114{rows=1:lng} := aggr.sum(V113{rows=1:lng},V35,V37);# 52 V114:bat[:oid,:dbl] := AX3aggrX3_sum3_flt_dbl(V113:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} - V122{rows=1:lng} := aggr.avg(V58{rows=1:lng},V35,V37);# 53 V122:bat[:oid,:dbl] := AX3aggrX3_avg3_int(V58:bat[:oid,:int], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} - V127{rows=1:lng} := aggr.avg(V65{rows=1:lng},V35,V37);# 54 V127:bat[:oid,:dbl] := AX3aggrX3_avg3_flt(V65:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} - V129 := mal.multiplex("calc.round",V127{rows=1:lng},100);# 55 V129:any := OPTremapMultiplex(_80:str, V127:bat[:oid,:dbl], _58:int) {G} - V135{rows=1:lng} := aggr.avg(V83{rows=1:lng},V35,V37);# 56 V135:bat[:oid,:dbl] := AX3aggrX3_avg3_flt(V83:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} - V136 := mal.multiplex("calc.round",V135{rows=1:lng},100);# 57 V136:any := OPTremapMultiplex(_80:str, V135:bat[:oid,:dbl], _58:int) {G} + V109{rows=1} := algebra.kdifference(V105{rows=1000:lng},V12{rows=1000});# 48 V109:bat[:oid,:flt] := ALGkdiff(V105:bat[:oid,:flt], V12:bat[:oid,:oid]) {G} + V110{rows=1} := algebra.join(V21{rows=1},V109{rows=1});# 49 V110:bat[:oid,:flt] := ALGjoin(V21:bat[:oid,:oid], V109:bat[:oid,:flt]) {G} + V111:bat[:oid,:flt] := mal.multiplex("calc.+",V104,V110{rows=1});# 50 V111:bat[:oid,:flt] := OPTremapMultiplex(_74:str, V104:lng, V110:bat[:oid,:flt]) {G} + V113{rows=1} := batcalc.*(V101{rows=1},V111);# 51 V113:bat[:oid,:flt] := CMDbatMUL_flt_flt_flt(V101:bat[:oid,:flt], V111:bat[:oid,:flt]) {G} + V114{rows=1} := aggr.sum(V113{rows=1},V35,V37);# 52 V114:bat[:oid,:dbl] := AX3aggrX3_sum3_flt_dbl(V113:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V122{rows=1} := aggr.avg(V58{rows=1},V35,V37);# 53 V122:bat[:oid,:dbl] := AX3aggrX3_avg3_int(V58:bat[:oid,:int], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V127{rows=1} := aggr.avg(V65{rows=1},V35,V37);# 54 V127:bat[:oid,:dbl] := AX3aggrX3_avg3_flt(V65:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V129 := mal.multiplex("calc.round",V127{rows=1},100);# 55 V129:any := OPTremapMultiplex(_80:str, V127:bat[:oid,:dbl], _58:int) {G} + V135{rows=1} := aggr.avg(V83{rows=1},V35,V37);# 56 V135:bat[:oid,:dbl] := AX3aggrX3_avg3_flt(V83:bat[:oid,:flt], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} + V136 := mal.multiplex("calc.round",V135{rows=1},100);# 57 V136:any := OPTremapMultiplex(_80:str, V135:bat[:oid,:dbl], _58:int) {G} V137 := aggr.count(V35,V35,V37); # 58 V137:bat[:oid,:wrd] := AX3aggrX3_count3Nils(V35:bat[:oid,:oid], V35:bat[:oid,:oid], V37:bat[:oid,:oid]) {G} #sql.column(V42,"l_returnflag","varchar",1,0); #sql.column(V51,"l_linestatus","varchar",1,0); diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/opt_costModel.mx --- a/MonetDB5/src/optimizer/opt_costModel.mx Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/opt_costModel.mx Fri Aug 06 12:47:46 2010 +0200 @@ -90,24 +90,6 @@ #include "mal_config.h" #include "opt_costModel.h" -static lng -getVarRows(MalBlkPtr mb, int v) -{ - VarPtr p = varGetProp(mb, v, rowsProp); - - if (!p) - return -1; - if (p->value.vtype == TYPE_lng) - return p->value.val.lval; - if (p->value.vtype == TYPE_int) - return p->value.val.ival; - if (p->value.vtype == TYPE_sht) - return p->value.val.shval; - if (p->value.vtype == TYPE_bte) - return p->value.val.btval; - return -1; -} - @- The cost formula are repetative @= newRows @@ -119,7 +101,7 @@ if (c1 == -1 || c2 == -1) continue; k = (@3); - varSetProp(mb, getArg(p,@4), rowsProp, op_eq, VALset(&v,TYPE_lng,&k)); + varSetProp(mb, getArg(p,@4), rowsProp, op_eq, VALset(&v,TYPE_wrd,&k)); OPTDEBUGcostModel { mnstr_printf(cntxt->fdout,"COST of @1 @2 into @4: " LLFMT "\n",k); printInstruction(cntxt->fdout,mb,0,p,0); @@ -135,7 +117,7 @@ @c static void OPTbackpropagate(MalBlkPtr mb, int i, int idx){ - lng rows; + wrd rows; InstrPtr p; rows = getVarRows(mb, idx); @@ -145,7 +127,7 @@ p = getInstrPtr(mb,i); if (getFunctionId(p) == setWriteModeRef){ if (getVarRows(mb, getArg(p,1)) == 0) { - ValRecord v, *vp = VALset(&v, TYPE_lng, &rows); + ValRecord v, *vp = VALset(&v, TYPE_wrd, &rows); varSetProp(mb, getArg(p,1), rowsProp, op_eq, vp); } } @@ -165,7 +147,7 @@ OPTcostModelImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { int i, actions = 1; - lng k, c1, c2; + wrd k, c1, c2; InstrPtr p; str sortrevRef= putName("sortReverse",11); str sortrevTailRef= putName("sortReverseTail",15); @@ -280,7 +262,7 @@ if (c1 != -1) { ValRecord v; - varSetProp(mb, getArg(p,0), rowsProp, op_eq, VALset(&v, TYPE_lng, &c1)); + varSetProp(mb, getArg(p,0), rowsProp, op_eq, VALset(&v, TYPE_wrd, &c1)); } } } diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/opt_emptySet.mx --- a/MonetDB5/src/optimizer/opt_emptySet.mx Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/opt_emptySet.mx Fri Aug 06 12:47:46 2010 +0200 @@ -316,9 +316,7 @@ (void) stk; (void) p; for (i = 0; i < mb->vtop; i++) { - VarPtr rowsp; - if ((rowsp = varGetProp(mb, i, rowsProp)) != NULL - && rowsp->value.val.lval == 0) { + if (getVarRows(mb, i) == 0) { OPTDEBUGemptySet mnstr_printf(cntxt->fdout, "#START emptyset optimizer %d", i); empty[i] = 1; diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/opt_mergetable.mx --- a/MonetDB5/src/optimizer/opt_mergetable.mx Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/opt_mergetable.mx Fri Aug 06 12:47:46 2010 +0200 @@ -1754,12 +1754,12 @@ Disabled as a slice is used also for offset where we need the oposite of the slice part. y= x.slice(). x.diff(y); @c - if (0 && match > 0 && getModuleId(p) == algebraRef && + if (match > 0 && getModuleId(p) == algebraRef && getFunctionId(p) == sliceRef && (m = isMATalias(getArg(p, 1), mat, mtop)) >= 0) { /* inject new mat.pack() operation */ - MATpackAll2(mb, NULL, mat, m, &mtop); + MATpackAll(mb, NULL, mat, m, &mtop); q = getInstrPtr(mb, mb->stop - 1); /* rename mat.pack() to mat.slice() */ setFunctionId(q, sliceRef); diff -r 76dd9fabceef -r c6b4b2d6fc5c MonetDB5/src/optimizer/opt_mitosis.mx --- a/MonetDB5/src/optimizer/opt_mitosis.mx Fri Aug 06 11:27:43 2010 +0200 +++ b/MonetDB5/src/optimizer/opt_mitosis.mx Fri Aug 06 12:47:46 2010 +0200 @@ -68,7 +68,7 @@ #include "opt_octopus.h" #include "mal_interpreter.h" -#define PARTITION_THRESHOLD (BUN) GDKnr_threads /* should be increased in production version */ +#define PARTITION_THRESHOLD (wrd) GDKnr_threads /* should be increased in production version */ static int eligible(MalBlkPtr mb ) { @@ -93,9 +93,8 @@ str schema=0, table=0; VarRecord low,hgh; oid slice; - BUN r=0,rowcnt=0; /* table should be sizeable to consider parallel execution*/ + wrd r = 0, rowcnt=0; /* table should be sizeable to consider parallel execution*/ InstrPtr q,*old, target= 0, matq; - VarPtr v; size_t typewidth= 3 *sizeof(lng); /* 2 arguments and a result */ (void)cntxt; @@ -118,20 +117,14 @@ base table and passes them on as a row property. _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list