Update of /cvsroot/monetdb/pathfinder/runtime
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv32133

Modified Files:
        pathfinder.mx 
Log Message:
issue 2664405: give an error in fn:collection() if the document does not exist



U pathfinder.mx
Index: pathfinder.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/runtime/pathfinder.mx,v
retrieving revision 1.453
retrieving revision 1.454
diff -u -d -r1.453 -r1.454
--- pathfinder.mx       19 Mar 2009 17:30:08 -0000      1.453
+++ pathfinder.mx       7 Apr 2009 10:02:10 -0000       1.454
@@ -3346,17 +3346,23 @@
     return ret;
 }
 
+PROC ws_collection_check(BAT[any::1,str] nms) : BAT[any::1,oid] {
+    var coll := nms.leftjoin(reverse(collection_name)); 
+    var miss := nms.kdiff(coll);
+    if (count(miss) > 0) 
+        ERROR("err:FODC0004: collection '%s' unknown (%d missing in total)", 
miss.fetch(0), count(tunique(miss)));
+    return coll;
+}
+
 # pf:collection(), get 'collection root' as a single startpoint to query an 
entire collection
 PROC ws_collection_root(BAT[void,BAT] ws, BAT[void,str] colnames) : 
BAT[oid,oid]
 {
     var colnames_unq := 
colnames.tdiff(ws.fetch(CONT_NAME)).tunique().mirror(); # [str,str]
     lock_set(pf_short);
-    var colnames_coll, err := CATCH({ colnames_coll := 
colnames_unq.leftjoin(reverse(collection_name));
+    var colnames_coll, err := CATCH({ colnames_coll := 
ws_collection_check(colnames_unq);
                                       
colname_pins.insert(colnames_coll.project(ws_id(ws))); });
     lock_unset(pf_short);
-    var notfound := reverse(colnames_coll).tdiff(colnames);
-    if (count(notfound) > 0) ERROR("pf:collection() %s not found (%d such 
errors).\n", notfound.fetch(0), count(notfound));
-
+    if (not(isnil(err))) ERROR(err);
     colnames_c...@batloop() {
         var docBAT := [bat]([+](str(int($t)), ws_dsk).reverse().mirror()); # 
get master bats
         ws_opencoll(ws, docBAT, $h, $t); # collections are loaded one-by-one
@@ -3372,7 +3378,7 @@
     nms := nms.fetch(nms.tmark(0...@0).[startsWith]("::").ord_uselect(false));
 
     lock_set(pf_short);
-    err := CATCH({ var doc := 
nms.leftjoin(reverse(collection_name)).leftjoin(reverse(doc_collection)).tsort();
+    err := CATCH({ var doc := 
ws_collection_check(nms).leftjoin(reverse(doc_collection)).tsort();
                    var doch := doc.mark(0...@0), doct := doc.tmark(0...@0); # 
doc == doch.leftjoin(doct);
                    var docs := 
doct.leftjoin(doc_name).select(str_nil,str_nil);  # selected existing docs
                    doc := doch.leftjoin(docs.mirror().leftjoin(doct));  # 
reduced doc to existing docs


------------------------------------------------------------------------------
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to