Changeset: ef573cb4e212 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef573cb4e212 Modified Files: MonetDB5/ChangeLog.Jun2010 MonetDB5/src/optimizer/opt_mergetable.mx sql/src/backends/monet5/sql_optimizer.mx Branch: Jun2010 Log Message:
Fixed bug 2557. Mergetable didn't handle semijoin(x, mat) properly. This gave (with multi key foreign key checks) too many parts. diffs (62 lines): diff -r 5be5570ea066 -r ef573cb4e212 MonetDB5/ChangeLog.Jun2010 --- a/MonetDB5/ChangeLog.Jun2010 Fri Jul 30 15:18:33 2010 +0200 +++ b/MonetDB5/ChangeLog.Jun2010 Fri Jul 30 17:42:22 2010 +0200 @@ -1,6 +1,10 @@ # ChangeLog file for MonetDB5 # This file is updated with Maddlog +* Fri Jul 30 2010 Niels Nes <ni...@cwi.nl> +- Fixed bug 2557. There was a bug in the mergetable optimizer which was + triggered by multi column (atleast 32 columns). + * Wed Jul 28 2010 Martin Kersten <m...@cwi.nl> - Added missing multiplex version of MAL str.stringlength(). This improves performance of SQL length(). diff -r 5be5570ea066 -r ef573cb4e212 MonetDB5/src/optimizer/opt_mergetable.mx --- a/MonetDB5/src/optimizer/opt_mergetable.mx Fri Jul 30 15:18:33 2010 +0200 +++ b/MonetDB5/src/optimizer/opt_mergetable.mx Fri Jul 30 17:42:22 2010 +0200 @@ -1643,6 +1643,16 @@ actions++; continue; } + if (match == 1 && getModuleId(p) == algebraRef && getFunctionId(p) == semijoinRef && + ((m=isMATalias(getArg(p,2), mat, mtop)) >= 0) && + varGetProp(mb, getArg(p,1), hlbProp)) { + InstrPtr bc; + + if ((bc = mat_semijoin(mb, p, mat, m)) != NULL) + mtop = mat_add(mat, mtop, bc, NULL, mat_none ); + actions++; + continue; + } @- Now we handle group, derive and aggregation statements. @c diff -r 5be5570ea066 -r ef573cb4e212 sql/src/backends/monet5/sql_optimizer.mx --- a/sql/src/backends/monet5/sql_optimizer.mx Fri Jul 30 15:18:33 2010 +0200 +++ b/sql/src/backends/monet5/sql_optimizer.mx Fri Jul 30 17:42:22 2010 +0200 @@ -389,15 +389,21 @@ pushInstruction(mb,q); } if (part <= 1) { + int lowprop = hlbProp, highprop = hubProp; oid low = 0, high = low + rows; pushInstruction(mb, p); if (mode == RD_INS) { - low = high; + if (f != binddbatRef) + low = high; high += BPM_SPLIT; } - varSetProp(mb, getArg(p,0), hlbProp, op_gte, VALset(&vr, TYPE_oid, &low)); - varSetProp(mb, getArg(p,0), hubProp, op_lt, VALset(&vr, TYPE_oid, &high)); + if (f == binddbatRef) { + lowprop = tlbProp; + highprop = tubProp; + } + varSetProp(mb, getArg(p,0), lowprop, op_gte, VALset(&vr, TYPE_oid, &low)); + varSetProp(mb, getArg(p,0), highprop, op_lt, VALset(&vr, TYPE_oid, &high)); } else { int i, v = getArg(p,0); int tpe = getVarType(mb, v); _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list