--- runtime/pathfinder.mx 7 Oct 2006 01:21:52 -0000 1.248 +++ runtime/pathfinder.mx 13 Oct 2006 18:45:15 -0000 @@ -1622,28 +1622,27 @@ selidx_names := selidx_names.mirror().leftfetchjoin(idx_names); var selidx_unames := selidx_names.reverse().kunique().reverse(); var commitBAT := bat(void,str); - selidx_unames@batloop() { - # note that due to caching rules, some temporary documents (e.g. file URLs) become persistent - var ts := idx_timestamps.find($h); - var doCommit := not(isnil(ts)); - var colname := "::" + str(wsid) + "::" + $t; # unique name contains ws identfier (MT unique) - var name := bat(void,str).append(colname).seqbase(0@0).access(BAT_READ); - var location := bat(void,str).append($t).seqbase(0@0).access(BAT_READ); - var docBAT := bat(str,bat); - var coll_oid := shred_into_docBAT(docBAT, location, name, colname, oid_nil, empty_runtime, doCommit, lng(0), ts, stream_nil, wsid); - var cont := ws_opencoll(ws, docBAT, colname, coll_oid); - if (doCommit) commitBAT.append([bbpname](docBAT).tmark(0@0)); - var idx_repl := selidx_names.uselect($t); - idx_colname.replace(idx_repl.project(colname)); - idx_repl := idx_repl.project(coll_oid); - idx_coll.replace(idx_repl); - idx_doc.replace(idx_repl); - } + var docBAT := bat(str,bat); + var locations := selidx_unames.tmark(0@0); + var names := [+]("::" + str(wsid) + "::", locations); + var colname := names.fetch(0); + var ts := selidx_unames.mirror().leftfetchjoin(idx_timestamps).min(); + var doCommit := not(isnil(ts)); + var coll_oid := shred_into_docBAT(docBAT, locations, names, colname, oid_nil, empty_runtime, doCommit, lng(0), ts, stream_nil, wsid); + var cont := ws_opencoll(ws, docBAT, colname, coll_oid); + if (doCommit) commitBAT.append([bbpname](docBAT).tmark(0@0)); + # commit the new collections pf_checkpoint(commitBAT); lock_set(pf_short); doc_undo.delete(doc_undo.select(wsid)); # if these remain, ws_destroy() would remove the new documents + var doc_oids := names.leftjoin(doc_name.reverse()); lock_unset(pf_short); + + # set new colname, coll_oid, and doc_oid + idx_colname.replace(selidx_names.project(colname)); + idx_coll.replace(selidx_names.project(coll_oid)); + idx_doc.replace(selidx_names.leftjoin(locations.reverse()).leftjoin(doc_oids)); } # add in bulk all documents to the ws (could be thousands of them!!)