Update of /cvsroot/monetdb/pathfinder/runtime
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv29051/pathfinder/runtime

Modified Files:
      Tag: XQuery_0-18
        pf_support.mx 
Log Message:

fixing bug
[ 1731850 ] Error in preceding axis
http://sourceforge.net/tracker/index.php?func=detail&aid=1731850&group_id=56967&atid=482468

in case the input to a preceding or following step is ordered on item|iter,
make sure we first re-order it on iter|item
before handing it to ll_preceeding()/ll_following().

added respective test.


Index: pf_support.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pf_support.mx,v
retrieving revision 1.244
retrieving revision 1.244.2.1
diff -u -d -r1.244 -r1.244.2.1
--- pf_support.mx       29 May 2007 13:57:55 -0000      1.244
+++ pf_support.mx       6 Jun 2007 12:13:37 -0000       1.244.2.1
@@ -1564,15 +1564,7 @@
        min_iter := min(iter);
        max_iter := max(iter);
 
-       # pre-sort input
-       if ( and(order,1) = 0 ) {
-               var ord := item.tsort();
-                   ord := ord.CTrefine(iter).mark([EMAIL PROTECTED]).reverse();
-               iter := ord.leftfetchjoin(iter);
-               item := ord.leftfetchjoin(item);
-               iter := iter.chk_order();
-               item := item.chk_order();
-       }
+       @:pre_sort_input@
 
        # the actual location step
        if ( isnil(result) ) {
@@ -1605,6 +1597,17 @@
 returns all nodes on the @1 axis of the ctx-nodes duplicate free for each 
group.",
 "pf_support");
 @
[EMAIL PROTECTED] pre_sort_input
+       # pre-sort input
+       if ( and(order,1) = 0 ) {
+               var ord := item.tsort();
+                   ord := ord.CTrefine(iter).mark([EMAIL PROTECTED]).reverse();
+               iter := ord.leftfetchjoin(iter);
+               item := ord.leftfetchjoin(item);
+               iter := iter.chk_order();
+               item := item.chk_order();
+       }
+@
 @= post_sort_output
        # post-sort output
        if ( (and(order,2) = 2) and not(ordered(reverse(result.fetch(1)))) ) {
@@ -1712,9 +1715,11 @@
 @= upwards
 PROC @1(BAT[void,oid] iter, BAT[void,oid] ctx, oid cont, BAT[void,bat] ws, int 
order) : BAT[void,bat]
 {
-    # "order" is not (yet?) used, here.
     var pre_sizes := ws.fetch(PRE_SIZE).fetch(cont);
     var pre_levels := ws.fetch(PRE_LEVEL).fetch(cont);
+
+    # If ctx is not sorted on tail, [EMAIL PROTECTED] will internally sort ctx 
and re-order iter accordingly.
+
     var res := [EMAIL PROTECTED](iter.chk_order(), ctx.chk_order(), pre_sizes, 
pre_levels);
     var result := new(void,bat,2).seqbase([EMAIL 
PROTECTED]).append(hmark(res,[EMAIL PROTECTED])).append(tmark(res,[EMAIL 
PROTECTED])).access(BAT_READ);
 
@@ -1727,7 +1732,6 @@
 @= ll_prec_foll_impl
 PROC @1(BAT[void,oid] iter, BAT[void,oid] item, oid cont, BAT[void,bat] ws, 
int order, chr kind_test) : BAT[void,bat]
 {
-    # "order" is not (yet?) used, here.
     @:foll_prec_code@
     var pre_sizes := ws.fetch(PRE_SIZE).fetch(cont);
     var pre_kinds;
@@ -1737,6 +1741,11 @@
     } else {
         pre_kinds := ws.fetch(PRE_KIND).fetch(cont);
     }
+
+    iter := iter.chk_order();
+    item := item.chk_order();
+    @:pre_sort_input@
+
     var res := [EMAIL PROTECTED](iter.chk_order(), item.chk_order(), doc_pre, 
pre_sizes, pre_kinds, kind_test);
     var result := new(void,bat,2).seqbase([EMAIL 
PROTECTED]).append(hmark(res,[EMAIL PROTECTED])).append(tmark(res,[EMAIL 
PROTECTED])).access(BAT_READ);
 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to