Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv16427/compiler/mil

Modified Files:
      Tag: XQuery_0-16
        milprint_summer.c 
Log Message:
- fix problems in information functions (pf:documents/collections)
  when documents have been deleted from multi-document collections



Index: milprint_summer.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milprint_summer.c,v
retrieving revision 1.318.2.14
retrieving revision 1.318.2.15
diff -u -d -r1.318.2.14 -r1.318.2.15
--- milprint_summer.c   21 Feb 2007 13:30:02 -0000      1.318.2.14
+++ milprint_summer.c   21 Feb 2007 23:43:42 -0000      1.318.2.15
@@ -6519,23 +6519,24 @@
             "  pos  := [EMAIL PROTECTED];\n"
             "} # end of translate pf:collection (string) as node*\n", 
(rc)?item_ext:val_join(STR));
         return NORMAL;
-    } else if (!PFqname_eq(fnQname,PFqname (PFns_lib,"documents")))
+    } else if (PFqname_eq(fnQname,PFqname (PFns_lib,"documents")) == 0 ||
+              (PFqname_eq(fnQname,PFqname (PFns_lib,"documents-unsafe")) == 0 
&& (rc=1)))
     {
+        char *consistent = rc?"false":"true";
         if (fun->arity) {
             rc = translate2MIL (f, VALUES, cur_level, counter, L(args));
             item_ext = kind_str(rc);
-        
             milprintf(f, 
                 "{ # translate pf:documents (string*) as string*\n"
-                "  var ret := ws_documents(ws, item%s.materialize(ipik));\n"
+                "  var ret := ws_documents(ws, item%s.materialize(ipik),%s);\n"
                 "  item := ret.tmark([EMAIL PROTECTED]);\n"
-                "  iter := ret.hmark([EMAIL 
PROTECTED]).leftfetchjoin(iter);\n", (rc)?item_ext:val_join(STR));
+                "  iter := ret.hmark([EMAIL 
PROTECTED]).leftfetchjoin(iter);\n", (rc)?item_ext:val_join(STR), consistent);
         } else {
             milprintf(f, 
                 "{ # translate pf:documents () as string*\n"
-                "  var ret := reverse(loop%03u).cross(ws_documents(ws));\n"
+                "  var ret := reverse(loop%03u).cross(ws_documents(ws,%s));\n"
                 "  iter := ret.hmark([EMAIL PROTECTED]);\n"
-                "  item := ret.tmark([EMAIL PROTECTED]);\n", cur_level);
+                "  item := ret.tmark([EMAIL PROTECTED]);\n", cur_level, 
consistent);
         }
         milprintf(f,
                 "  ipik := item;\n"
@@ -6543,17 +6544,19 @@
                 "  pos  := tmark_grp_unique(iter,ipik);\n" 
                 "} # end of translate fn:documents (string?) as string*\n");
         return NORMAL;
-    } else if (!PFqname_eq(fnQname,PFqname (PFns_lib,"collections")))
+    } else if (PFqname_eq(fnQname,PFqname (PFns_lib,"collections")) == 0 ||
+              (PFqname_eq(fnQname,PFqname (PFns_lib,"collections-unsafe")) == 
0 && (rc=1)))
     {
+        char *consistent = rc?"false":"true";
         milprintf(f,
                 "{ # translate pf:collections () as string*\n"
-                "  var ret := reverse(loop%03u).cross(ws_collections(ws));\n"
+                "  var ret := reverse(loop%03u).cross(ws_collections(ws, 
%s));\n"
                 "  iter := ret.hmark([EMAIL PROTECTED]);\n"
                 "  item := ret.tmark([EMAIL PROTECTED]);\n"
                 "  ipik := item;\n"
                 "  kind := set_kind(WS,ELEM);\n"
                 "  pos  := tmark_grp_unique(iter,ipik);\n"
-                "} # end of translate fn:collections () as string*\n", 
cur_level);
+                "} # end of translate fn:collections () as string*\n", 
cur_level, consistent);
         return NORMAL;
     } else if (!PFqname_eq(fnQname,PFqname (PFns_lib,"mil")))
     {
@@ -6561,7 +6564,7 @@
         item_ext = kind_str(rc);
         milprintf(f,
                 "{ # translate pf:mil (string) as item*\n"
-                "  if (count(loop%03u) != 1) ERROR(\"pf:mil can only be called 
in a single iteration\");\n"
+                "  if (count(loop%03u) != 1) ERROR(\"pf:mil cannot be called 
from within a for-loop\");\n"
                 "  kind := ELEM;\n"
                 "  item := ws_mil(ws, item%s.fetch(0));\n"
                 "  if (type(item) = str) {\n"


-------------------------------------------------------------------------
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