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

Reply via email to