Update of /cvsroot/monetdb/MonetDB5/src/optimizer
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv7858
Modified Files:
opt_replicator.mx
Log Message:
Code reorganization to make policy control easier.
Index: opt_replicator.mx
===================================================================
RCS file: /cvsroot/monetdb/MonetDB5/src/optimizer/opt_replicator.mx,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- opt_replicator.mx 12 Feb 2008 13:11:05 -0000 1.13
+++ opt_replicator.mx 12 Feb 2008 16:11:34 -0000 1.14
@@ -396,14 +396,19 @@
str sname, str tname, str cname, bit tl)
{
int tpe, rr;
- BAT *bn;
+ BAT *bn, *br;
lng cnt=0,clk;
Replica r;
sht ov;
tpe= ATOMstorage(b->T->type);
- if( retain == 0){ /* normal execution + keep stat */
+ /* replica match */
+ rr = findReplica(sname,tname,cname,tpe,tl, low, hgh, li, hi, &ov);
+
+ /* execute selection if needed */
+ if((retain == 0) || /* normal execution + keep stat */
+ ((retain == 1) && (ov < 0))){ /* no overlap in exist. repl. */
clk= GDKusec();
bn = BAT_select_(b, low, hgh, li, hi, tl, FALSE);
clk= GDKusec()-clk;
@@ -412,31 +417,61 @@
if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
*ret = bn->batCacheid;
cnt= BATcount(bn);
- BBPkeepref(bn->batCacheid);
+ BBPkeepref(*ret);
}
else throw(MAL, "REPselectImpl", "GDKerror");
-
- rr = findReplica(sname,tname,cname,tpe,tl,low,hgh,li,hi,&ov);
- if (ov < 0){ /* no repl overlaps, new entry in repl. table*/
- 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;
- } else
- if (ov == 0 ){ /* equality, reuse replica rr*/
- r = repltable + rr;
- r->ucnteq++;
- }
- else { /* use replica rr to shrink selection */
- r = repltable + rr;
- r->ucntsub++;
- /* make new entry in replica table*/
- 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;
+
+ } else
+ if ((retain == 1) && (ov > 0)){ /* exec. over subset repl. */
+ r = repltable + rr;
+ r->ucntsub++;
+
+ if ((br = BATdescriptor(r->resbid)) == NULL) {
+ throw(MAL, "REPselectImpl", "Cannot access
replica descriptor");
+ }
+ clk= GDKusec();
+ bn = BAT_select_(br, low, hgh, li, hi, tl, FALSE);
+ clk= GDKusec()-clk;
+
+ BBPreleaseref(br->batCacheid);
+ if (bn) {
+ if (!(bn->batDirty&2)) bn = BATsetaccess(bn,
BAT_READ);
+ *ret = bn->batCacheid;
+ cnt = BATcount(bn);
+ BBPkeepref(*ret);
+ }
+ else throw(MAL, "REPselectImpl", "GDKerror");
+ }
+
+ /* 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
+ if(ov == 0 ){ /* equality, reuse replica rr*/
+ r = repltable + rr;
+ r->ucnteq++;
+ if( retain == 1 ){
+ *ret = r->resbid;
+ BBPincref(*ret,TRUE);
+ }
+ } else { /* reuse replica rr to shrink selection,
+ make new entry for the result*/
+ 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);
}
}
return MAL_SUCCEED;
-------------------------------------------------------------------------
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