Update of /cvsroot/monetdb/MonetDB5/src/optimizer
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv16325

Modified Files:
        opt_replicator.mx 
Log Message:
Fixed bug of nil result bat. Added more retain policies.


Index: opt_replicator.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/optimizer/opt_replicator.mx,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- opt_replicator.mx   19 Feb 2008 09:03:18 -0000      1.19
+++ opt_replicator.mx   19 Feb 2008 11:48:05 -0000      1.20
@@ -371,10 +371,24 @@
 
 }
 
+/* check if replica should be retained */
+static int checkRetain(lng cnt, lng clk)
+{
+       if( retain <= 1 ) return 1;     /* 0 keep stat, 1 retain all */
+       if( retain == 2 ) {             /* cost-based */
+               if( clk > 1000) return 1;       /* at least 1 msec spent */
+               else return 0;
+       }
+       if( retain == 3 ) {             /* cost-based per item*/
+               if( cnt && (clk/cnt > 1)) return 1;     /* at least 1 usec 
spent per tuple*/
+               else return 0;
+       }
+       else return 0;                  
+}
 
 
 @-
-The overloaded algebra operator simply calles the
+The overloaded algebra operator simply calls the
 underlying implementation and collects statistics on the
 cost.
 @c
@@ -416,7 +430,7 @@
 {
        int tpe, rr;
        BAT *bn, *br;
-       lng cnt=0, clk = 0;
+       lng cnt = -1, clk = 0;
        Replica r;
        sht ov;
 
@@ -427,7 +441,7 @@
 
        /* execute selection if needed */
        if((retain == 0) ||     /* normal execution + keep stat */
-          ((retain == 1) && (ov < 0))){        /* no overlap in exist. repl. */
+          ((retain > 0) && (ov < 0))){ /* no overlap in exist. repl. */
                clk = GDKusec();
                bn = BAT_select_(b, low, hgh, li, hi, tl, FALSE);
                clk = GDKusec()-clk;
@@ -441,7 +455,7 @@
                else throw(MAL, "REPselectImpl", "GDKerror");
 
        } else 
-       if ((retain == 1) && (ov > 0)){ /* exec. over subset repl. */ 
+       if ((retain > 0) && (ov > 0)){  /* exec. over subset repl. */ 
                 r = repltable + rr;
                        r->ucntsub++;
 
@@ -462,36 +476,23 @@
                 else throw(MAL, "REPselectImpl", "GDKerror");
        }
 
-       if( cnt == 0 ) /* don't store empty intermediates */
-               return MAL_SUCCEED;
-               /* update replica table */
-       if( ov < 0 ){                   /* new intermed. -> new entry */
-               r = newReplica(sname,tname,cname,tpe,tl);
-               setReplicaRange(r,tpe,low,hgh,li,hi);
-               r->cnt = cnt;
-               r->cost = clk;
-               r->ucnteq = r->ucntsub = 0;
-               if( retain == 1){
-                       r->resbid = *ret;
-                       BBPincref(*ret,TRUE);
-               }
-       } else
+       /* update replica table */
        if(ov == 0 ){           /* equality, reuse replica rr*/
-               r = repltable + rr;
+               r = repltable + rr;     /* no new intermediate */
                r->ucnteq++;
-               if( retain == 1 ){  
+               if( retain > 0 ){  
                        *ret = r->resbid;
                        BBPincref(*ret,TRUE);
                }
-       } else {        /* reuse replica rr to shrink selection,
-                        make new entry for the result*/
+       } else                  /* new intermed. -> ev. new entry */
+       if( checkRetain(cnt,clk) ){             
                r = newReplica(sname,tname,cname,tpe,tl);
                setReplicaRange(r,tpe,low,hgh,li,hi);
                r->cnt = cnt;
                r->cost = clk;
                r->ucnteq = r->ucntsub = 0;
-               if( retain == 1){
-                       r->resbid = *ret;
+               if( retain > 0){
+                       r->resbid = *ret;
                        BBPincref(*ret,TRUE);
                }
        }


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins

Reply via email to