Update of /cvsroot/monetdb/pathfinder/modules/pftijah
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv5845

Modified Files:
      Tag: XQuery_0-16
        pftijah.mx 
Log Message:
PF/Tijah: fix or operator implementation so that it works correctly when
retrieval models only return matching elements


Index: pftijah.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/modules/pftijah/pftijah.mx,v
retrieving revision 1.92.2.10
retrieving revision 1.92.2.11
diff -u -d -r1.92.2.10 -r1.92.2.11
--- pftijah.mx  15 Feb 2007 10:00:05 -0000      1.92.2.10
+++ pftijah.mx  19 Feb 2007 11:52:42 -0000      1.92.2.11
@@ -2114,31 +2114,38 @@
 # PROBABILISTIC SET OPERATORS
 
################################################################################
 
+# Compute symmetric difference between two sets: all element that are not in 
the intersection
+PROC ksymmdiff(bat left, bat right) : bat := 
+{
+    var onlyleft  := left.kdiff(right);
+    var onlyright := right.kdiff(left);
+    return onlyleft.kunion(onlyright);
+}
+
 PROC or_sum(bat left, bat right) : bat :=
 {
 
-       return [+](left,right);
-       #var inters    := [+](left,right);
-       #var onlyleft  := left.kdiff(inters);
-       #var onlyright := right.kdiff(inters);
-       #var result    := inters.kunion(onlyleft).kunion(onlyright).sort();
+       var inters := [+](left,right);
+
+    return inters.kunion(ksymmdiff(left,right)).sort();
 
-       #var inters := nil; var onlyleft := nil; var onlyright := nil;
-       
-        #return result;
 }
 
 PROC or_max(bat left, bat right) : bat :=
 {
 
-       return [max](left,right);
+    var inters := [max](left,right);
+
+    return inters.kunion(ksymmdiff(left,right)).sort();
 
 }
 
 PROC or_prob(bat left, bat right) : bat :=
 {
 
-       return [-](dbl(1),[*]([-](dbl(1),left),[-](dbl(1),right)));
+       var inters := [-](dbl(1),[*]([-](dbl(1),left),[-](dbl(1),right)));
+
+    return inters.kunion(ksymmdiff(left,right)).sort();
 
 }
 
@@ -2161,14 +2168,18 @@
 PROC or_min(bat left, bat right) : bat :=
 {
 
-       return [min](left,right);
+    var inters := [min](left,right);
+
+    return inters.kunion(ksymmdiff(left,right)).sort();
 
 }
 
 PROC or_prod(bat left, bat right) : bat :=
 {
 
-       return [*](left,right);
+    var inters := [*](left,right);
+
+    return inters.kunion(ksymmdiff(left,right)).sort();
 
 }
 


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to