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